楊 柳
(廈門海洋職業(yè)技術(shù)學(xué)院 福建 廈門 361100)
近年來,實際網(wǎng)站案例在課堂教學(xué)中的應(yīng)用越來越廣泛,對課堂教學(xué)及教學(xué)成果的驗收起到極大的輔助作用。但經(jīng)常會發(fā)生網(wǎng)站沒有經(jīng)過性能測試,或者性能測試不充分而引發(fā)的問題,比如系統(tǒng)訪問量激增而導(dǎo)致網(wǎng)站癱瘓。因此,除了對網(wǎng)站進行功能測試(如黑盒測試、白盒測試)之外,還需要對網(wǎng)站的性能進行測試,性能測試也是非常重要且必要的。本文通過介紹Fiddler抓包工具和JMeter測試工具,對WebTours網(wǎng)站進行性能測試。通過測試案例分析,得出測試結(jié)果并進行分析,從而判斷網(wǎng)站是否達(dá)到用戶的性能需求。
性能測試是通過性能測試工具模擬正常、峰值及異常負(fù)載狀態(tài)下對系統(tǒng)的各項性能指標(biāo)進行測試的活動。性能測試能夠驗證軟件系統(tǒng)是否達(dá)到了用戶期望的性能需求,包括系統(tǒng)的執(zhí)行效率、穩(wěn)定性、可靠性、安全性等,同時發(fā)現(xiàn)系統(tǒng)中可能存在的性能瓶頸及缺陷,從而優(yōu)化系統(tǒng)的性能。性能的好壞首先可以表明軟件系統(tǒng)或構(gòu)件對其及時性要求的符合程度,其次,性能是軟件產(chǎn)品的一種特性,可以用時間來進行度量。性能測試的及時性指標(biāo)可以用響應(yīng)時間來衡量,也可以用吞吐量來衡量[1]。
評價性能測試的指標(biāo)有:響應(yīng)時間、吞吐量、并發(fā)用戶數(shù)、TPS、點擊率和資源利用率。
在進行性能測試時,需要使用性能測試工具來代替手工測試,即性能測試自動化的過程。性能測試的自動化解決方案應(yīng)達(dá)到模擬各個級別數(shù)量用戶與系統(tǒng)交互,而無需過多的硬件需求,并且能測量最終模擬用戶的響應(yīng)時間[2-3]。
性能測試的流程如圖1所示。
圖1 性能測試流程圖
Fiddler是基于http協(xié)議的一種調(diào)試代理工具,通過Fiddler,可以抓取到客戶端和服務(wù)器端之間的所有HTTP請求,同時對用戶特定的HTTP請求分析其請求數(shù)據(jù)、設(shè)置相應(yīng)的斷點、調(diào)試Web應(yīng)用、修改頁面請求的數(shù)據(jù),甚至可以根據(jù)用戶的需要修改服務(wù)器返回的數(shù)據(jù)。通俗來講,F(xiàn)iddler可以記錄、檢查所有終端設(shè)備和互聯(lián)網(wǎng)之間的http通訊,抓取并查看進出Fiddler的數(shù)據(jù)。Fiddler是以代理web服務(wù)器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
JMeter是Apache組織基于Java開發(fā)的一款性能測試軟件,是一款開源、小巧、支持多協(xié)議、眾多插件為一體的強大工具。JMeter最初出現(xiàn)的時候,被用于針對Web的應(yīng)用測試,后來進一步擴展到其他的測試領(lǐng)域。它可以用于測試靜態(tài)和動態(tài)資源,例如靜態(tài)文件、Java小服務(wù)程序、CGI腳本、Java對象、數(shù)據(jù)庫、FTP服務(wù)器等[4]。
JMeter能夠通過斷言來驗證程序是否返回期望的結(jié)果,同時可以批量產(chǎn)生測試人員所需的測試數(shù)據(jù),用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,從而測試網(wǎng)站的性能強度,進一步分析網(wǎng)站的整體性能[5-6]。
本文以WebTours網(wǎng)站注冊功能為例,通過Fiddler抓包、JMeter取樣、添加事務(wù)、設(shè)置檢查點、注冊用戶參數(shù)化(50個用戶)、設(shè)置集合點、場景設(shè)計等,最后通過命令行執(zhí)行,觀察執(zhí)行結(jié)果。
在安裝運行WebTours網(wǎng)站前,先安裝strawberry軟件,然后解壓WebTours,在解壓后的目錄中雙擊StartServer.bat運行服務(wù)器,訪問http://localhost:1080/webTours,能正常啟動WebTours網(wǎng)站即可。
使用Fiddler抓包工具抓包,注意只抓取WebTours網(wǎng)站注冊功能界面。本次抓取到WebTours網(wǎng)站注冊時,有4個請求界面,分別為: http://localhost:1080/cgi-bin/welcome.pl?signOff=true,http://localhost:1080/cgibin/welcome.pl?signOff=true,http://localhost:1080/cgi-bin/login.pl?username=&password=&getInfo=true和http://localhost:1080/cgi-bin/login.pl。
在JMeter中創(chuàng)建線程組,添加線程“WebTours注冊”,為抓取到的每個注冊界面,添加HTTP請求,并進行設(shè)置,設(shè)置協(xié)議為HTTP,服務(wù)器名稱為localhost,端口號為1080,除此之外,根據(jù)不同請求頁面,設(shè)置對應(yīng)的GET/POST方式、路徑等。
為注冊請求添加事務(wù),并勾選生成父采樣選項。事務(wù)下必須有請求,不能是空事務(wù)。
為注冊請求設(shè)置檢查點,斷言是否成功注冊。斷言用于檢查測試中得到的實際結(jié)果與預(yù)期結(jié)果相等,如果達(dá)到預(yù)期,可以保證測試過程中數(shù)據(jù)的交互與期望一致。
在WebTours網(wǎng)站中注冊賬號要求賬號用戶名不能重復(fù),那么腳本中的用戶名和密碼就需要被參數(shù)化,模擬真實用戶向服務(wù)器提交數(shù)據(jù)的場景。通過用戶參數(shù)方法參數(shù)化50組用戶。添加調(diào)試取樣器,觀察是否參數(shù)化成功。
在性能測試過程中,通常會在線程組中設(shè)置并發(fā)用戶數(shù),但是在JMeter的各個線程進行業(yè)務(wù)操作的順序會存在一定的隨機性。那么集合點的目的主要是讓各個線程步調(diào)一致,對系統(tǒng)進行加壓,從而達(dá)到模擬真實并發(fā)訪問的效果。本文為注冊請求設(shè)置集合點,集合點5,超時為0。通過定時器中的SynChronizing Timer(同步定時器)進行設(shè)置。
線程數(shù)設(shè)置為50,R a m p-u p時間(線程啟動開始運行的時間間隔)設(shè)置為49,循環(huán)次數(shù)1。線程數(shù)設(shè)置為50表示50個用戶同時并發(fā)執(zhí)行,并發(fā)用戶數(shù)量越大,對系統(tǒng)的性能影響越大,并發(fā)用戶數(shù)量較大可能會導(dǎo)致系統(tǒng)響應(yīng)變慢、系統(tǒng)不穩(wěn)定等。軟件系統(tǒng)在設(shè)計時必須要考慮并發(fā)訪問的情況,測試工程師在進行性能測試時也必須進行并發(fā)訪問的測試。R a m p-u p可以設(shè)置得足夠大,以避免在啟動測試時有一個太大的工作負(fù)載,又要足夠小以保證最后一個線程在第一個完成前啟動。一般設(shè)置ramp-up=線程數(shù)啟動,并可以進行適當(dāng)上下調(diào)整。
運行線程,并觀察察看結(jié)果樹和聚合報告,如圖2、3所示。在察看結(jié)果樹中,可以得到所有的請求都有正確響應(yīng)并完成,50個模擬用戶均注冊成功。在聚合報告中,可以通過觀察每個請求的平均響應(yīng)時間、中位數(shù)、90%的用戶小于的響應(yīng)時間、95%的用戶小于的響應(yīng)時間、99%的用戶小于的響應(yīng)時間、最大值、最小值、吞吐量等數(shù)據(jù),進行性能上的分析。其中,響應(yīng)時間(Response Time)指系統(tǒng)對用戶請求作出響應(yīng)所需要的時間。這個時間是指用戶從軟件客戶端發(fā)出請求到用戶接收到返回數(shù)據(jù)的整個過程所需要的時間,包括各種中間件(如服務(wù)器、數(shù)據(jù)庫等)的處理時間。響應(yīng)時間越短,表明軟件的響應(yīng)速度越快,性能越好。吞吐量(Throughput)是指單位時間內(nèi)系統(tǒng)能夠完成的工作量,它衡量的是軟件系統(tǒng)服務(wù)器的處理能力。吞吐量是軟件系統(tǒng)衡量自身負(fù)載能力的一個很重要的指標(biāo),吞吐量越大,系統(tǒng)單位時間內(nèi)處理的數(shù)據(jù)就越多,系統(tǒng)的負(fù)載能力就越強。
圖2 查看結(jié)果樹
圖3 聚合報告
日常測試過程中發(fā)現(xiàn),在大數(shù)量并發(fā)時,JMeter GUI界面時常宕機、卡死,在這種情況下我們就需要使用命令行來執(zhí)行腳本了(非GUI也稱為no Mode模式),使用非GUI模式,即命令行模式運行,JMeter 測試腳本能夠大大縮減所需要的系統(tǒng)資源。使用命令行執(zhí)行的原因主要有以下三點:
(1)圖形化界面消耗更多資源,如CPU和內(nèi)存,容易使壓力機達(dá)到瓶頸,從而影響測試結(jié)果。
(2)圖形化界面不支持大型的負(fù)載測試和性能測試,并發(fā)較大時,JMeter會崩潰。
(3)命令行測試支持持續(xù)集成,命令行方式可以把腳本配置到Jenkins上實現(xiàn)持續(xù)集成,做成自動化測試。
在運行線程時,除了采用上文中提出的圖形界面方法,還可以采用命令行方式執(zhí)行。
命令行執(zhí)行時,需將腳本保存在JMeter的bin目錄下,在bin目錄中創(chuàng)建一個空的結(jié)果文件夾。例如:WebToursTest(必須為空)。命令行執(zhí)行語句:D:apache-JMeter-5.3in>JMeter-n-t WebTours1.jmx-l result.csv-e-o D:apache-JMeter-5.3inWebToursTest。執(zhí)行界面如圖4所示。-n表示以命令行模式執(zhí)行,-t表示腳本文件路徑,-l表示執(zhí)行結(jié)果文件路徑,-e表示生成html格式的測試報告,-o表示測試報告保存的目錄文件,該文件目錄必須不存在或者為空。
圖4 命令行運行界面
命令執(zhí)行完畢后,會生成result.csv文件以及html格式的測試報告。測試者可以通過測試報告得到WebTours網(wǎng)站執(zhí)行多用戶注冊時的性能優(yōu)劣。測試報告也可以反映出每個請求是否被正確執(zhí)行,以及平均響應(yīng)時間、中位數(shù)、最大值、最小值、吞吐量等性能指標(biāo)。請求執(zhí)行情況如圖5所示,請求響應(yīng)時間如圖6所示。
圖5 請求執(zhí)行情況
圖6 響應(yīng)時間
當(dāng)用戶請求能在2秒內(nèi)得到響應(yīng),用戶會感覺網(wǎng)站的響應(yīng)很快。綜合以上測試結(jié)果,可以得出,WebTours網(wǎng)站在多用戶并發(fā)執(zhí)行時,可以進行正確的響應(yīng),各頁面請求的平均響應(yīng)時間均低于1秒,但與其他頁面請求相比,點擊注冊按鈕后的切換頁面用時較長。當(dāng)用戶注冊訪問量持續(xù)增加時,響應(yīng)時間可能會有所增加,從而影響用戶的使用感受。WebTours網(wǎng)站后續(xù)可以進一步完善,縮短頁面切換的響應(yīng)時間,提高網(wǎng)站的性能,為用戶提供更好的服務(wù)。
本文分別介紹了性能測試概念、Fiddler抓包工具、以及JMeter測試工具。并結(jié)合WebTours網(wǎng)站的注冊功能進行了性能測試的實踐,得出測試聚合報告,并通過命令行執(zhí)行得到測試報告,并對測試結(jié)果進行分析。綜合分析測試報告和測試結(jié)果表明,WebTours網(wǎng)站達(dá)到了用戶期望的性能需求,同時發(fā)現(xiàn)了網(wǎng)站中可能存在的瓶頸,如當(dāng)用戶注冊訪問量持續(xù)增加時,注冊切換頁面響應(yīng)時間可能會有所增加,為以后測試工作的開展提供基礎(chǔ),從而進一步優(yōu)化網(wǎng)站的性能。