楊 柳
(廈門海洋職業技術學院 福建 廈門 361100)
近年來,實際網站案例在課堂教學中的應用越來越廣泛,對課堂教學及教學成果的驗收起到極大的輔助作用。但經常會發生網站沒有經過性能測試,或者性能測試不充分而引發的問題,比如系統訪問量激增而導致網站癱瘓。因此,除了對網站進行功能測試(如黑盒測試、白盒測試)之外,還需要對網站的性能進行測試,性能測試也是非常重要且必要的。本文通過介紹Fiddler抓包工具和JMeter測試工具,對WebTours網站進行性能測試。通過測試案例分析,得出測試結果并進行分析,從而判斷網站是否達到用戶的性能需求。
性能測試是通過性能測試工具模擬正常、峰值及異常負載狀態下對系統的各項性能指標進行測試的活動。性能測試能夠驗證軟件系統是否達到了用戶期望的性能需求,包括系統的執行效率、穩定性、可靠性、安全性等,同時發現系統中可能存在的性能瓶頸及缺陷,從而優化系統的性能。性能的好壞首先可以表明軟件系統或構件對其及時性要求的符合程度,其次,性能是軟件產品的一種特性,可以用時間來進行度量。性能測試的及時性指標可以用響應時間來衡量,也可以用吞吐量來衡量[1]。
評價性能測試的指標有:響應時間、吞吐量、并發用戶數、TPS、點擊率和資源利用率。
在進行性能測試時,需要使用性能測試工具來代替手工測試,即性能測試自動化的過程。性能測試的自動化解決方案應達到模擬各個級別數量用戶與系統交互,而無需過多的硬件需求,并且能測量最終模擬用戶的響應時間[2-3]。
性能測試的流程如圖1所示。

圖1 性能測試流程圖
Fiddler是基于http協議的一種調試代理工具,通過Fiddler,可以抓取到客戶端和服務器端之間的所有HTTP請求,同時對用戶特定的HTTP請求分析其請求數據、設置相應的斷點、調試Web應用、修改頁面請求的數據,甚至可以根據用戶的需要修改服務器返回的數據。通俗來講,Fiddler可以記錄、檢查所有終端設備和互聯網之間的http通訊,抓取并查看進出Fiddler的數據。Fiddler是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
JMeter是Apache組織基于Java開發的一款性能測試軟件,是一款開源、小巧、支持多協議、眾多插件為一體的強大工具。JMeter最初出現的時候,被用于針對Web的應用測試,后來進一步擴展到其他的測試領域。它可以用于測試靜態和動態資源,例如靜態文件、Java小服務程序、CGI腳本、Java對象、數據庫、FTP服務器等[4]。
JMeter能夠通過斷言來驗證程序是否返回期望的結果,同時可以批量產生測試人員所需的測試數據,用于對服務器、網絡或對象模擬巨大的負載,從而測試網站的性能強度,進一步分析網站的整體性能[5-6]。
本文以WebTours網站注冊功能為例,通過Fiddler抓包、JMeter取樣、添加事務、設置檢查點、注冊用戶參數化(50個用戶)、設置集合點、場景設計等,最后通過命令行執行,觀察執行結果。
在安裝運行WebTours網站前,先安裝strawberry軟件,然后解壓WebTours,在解壓后的目錄中雙擊StartServer.bat運行服務器,訪問http://localhost:1080/webTours,能正常啟動WebTours網站即可。
使用Fiddler抓包工具抓包,注意只抓取WebTours網站注冊功能界面。本次抓取到WebTours網站注冊時,有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中創建線程組,添加線程“WebTours注冊”,為抓取到的每個注冊界面,添加HTTP請求,并進行設置,設置協議為HTTP,服務器名稱為localhost,端口號為1080,除此之外,根據不同請求頁面,設置對應的GET/POST方式、路徑等。
為注冊請求添加事務,并勾選生成父采樣選項。事務下必須有請求,不能是空事務。
為注冊請求設置檢查點,斷言是否成功注冊。斷言用于檢查測試中得到的實際結果與預期結果相等,如果達到預期,可以保證測試過程中數據的交互與期望一致。
在WebTours網站中注冊賬號要求賬號用戶名不能重復,那么腳本中的用戶名和密碼就需要被參數化,模擬真實用戶向服務器提交數據的場景。通過用戶參數方法參數化50組用戶。添加調試取樣器,觀察是否參數化成功。
在性能測試過程中,通常會在線程組中設置并發用戶數,但是在JMeter的各個線程進行業務操作的順序會存在一定的隨機性。那么集合點的目的主要是讓各個線程步調一致,對系統進行加壓,從而達到模擬真實并發訪問的效果。本文為注冊請求設置集合點,集合點5,超時為0。通過定時器中的SynChronizing Timer(同步定時器)進行設置。
線程數設置為50,R a m p-u p時間(線程啟動開始運行的時間間隔)設置為49,循環次數1。線程數設置為50表示50個用戶同時并發執行,并發用戶數量越大,對系統的性能影響越大,并發用戶數量較大可能會導致系統響應變慢、系統不穩定等。軟件系統在設計時必須要考慮并發訪問的情況,測試工程師在進行性能測試時也必須進行并發訪問的測試。R a m p-u p可以設置得足夠大,以避免在啟動測試時有一個太大的工作負載,又要足夠小以保證最后一個線程在第一個完成前啟動。一般設置ramp-up=線程數啟動,并可以進行適當上下調整。
運行線程,并觀察察看結果樹和聚合報告,如圖2、3所示。在察看結果樹中,可以得到所有的請求都有正確響應并完成,50個模擬用戶均注冊成功。在聚合報告中,可以通過觀察每個請求的平均響應時間、中位數、90%的用戶小于的響應時間、95%的用戶小于的響應時間、99%的用戶小于的響應時間、最大值、最小值、吞吐量等數據,進行性能上的分析。其中,響應時間(Response Time)指系統對用戶請求作出響應所需要的時間。這個時間是指用戶從軟件客戶端發出請求到用戶接收到返回數據的整個過程所需要的時間,包括各種中間件(如服務器、數據庫等)的處理時間。響應時間越短,表明軟件的響應速度越快,性能越好。吞吐量(Throughput)是指單位時間內系統能夠完成的工作量,它衡量的是軟件系統服務器的處理能力。吞吐量是軟件系統衡量自身負載能力的一個很重要的指標,吞吐量越大,系統單位時間內處理的數據就越多,系統的負載能力就越強。

圖2 查看結果樹

圖3 聚合報告
日常測試過程中發現,在大數量并發時,JMeter GUI界面時常宕機、卡死,在這種情況下我們就需要使用命令行來執行腳本了(非GUI也稱為no Mode模式),使用非GUI模式,即命令行模式運行,JMeter 測試腳本能夠大大縮減所需要的系統資源。使用命令行執行的原因主要有以下三點:
(1)圖形化界面消耗更多資源,如CPU和內存,容易使壓力機達到瓶頸,從而影響測試結果。
(2)圖形化界面不支持大型的負載測試和性能測試,并發較大時,JMeter會崩潰。
(3)命令行測試支持持續集成,命令行方式可以把腳本配置到Jenkins上實現持續集成,做成自動化測試。
在運行線程時,除了采用上文中提出的圖形界面方法,還可以采用命令行方式執行。
命令行執行時,需將腳本保存在JMeter的bin目錄下,在bin目錄中創建一個空的結果文件夾。例如:WebToursTest(必須為空)。命令行執行語句:D:apache-JMeter-5.3in>JMeter-n-t WebTours1.jmx-l result.csv-e-o D:apache-JMeter-5.3inWebToursTest。執行界面如圖4所示。-n表示以命令行模式執行,-t表示腳本文件路徑,-l表示執行結果文件路徑,-e表示生成html格式的測試報告,-o表示測試報告保存的目錄文件,該文件目錄必須不存在或者為空。

圖4 命令行運行界面
命令執行完畢后,會生成result.csv文件以及html格式的測試報告。測試者可以通過測試報告得到WebTours網站執行多用戶注冊時的性能優劣。測試報告也可以反映出每個請求是否被正確執行,以及平均響應時間、中位數、最大值、最小值、吞吐量等性能指標。請求執行情況如圖5所示,請求響應時間如圖6所示。

圖5 請求執行情況

圖6 響應時間
當用戶請求能在2秒內得到響應,用戶會感覺網站的響應很快。綜合以上測試結果,可以得出,WebTours網站在多用戶并發執行時,可以進行正確的響應,各頁面請求的平均響應時間均低于1秒,但與其他頁面請求相比,點擊注冊按鈕后的切換頁面用時較長。當用戶注冊訪問量持續增加時,響應時間可能會有所增加,從而影響用戶的使用感受。WebTours網站后續可以進一步完善,縮短頁面切換的響應時間,提高網站的性能,為用戶提供更好的服務。
本文分別介紹了性能測試概念、Fiddler抓包工具、以及JMeter測試工具。并結合WebTours網站的注冊功能進行了性能測試的實踐,得出測試聚合報告,并通過命令行執行得到測試報告,并對測試結果進行分析。綜合分析測試報告和測試結果表明,WebTours網站達到了用戶期望的性能需求,同時發現了網站中可能存在的瓶頸,如當用戶注冊訪問量持續增加時,注冊切換頁面響應時間可能會有所增加,為以后測試工作的開展提供基礎,從而進一步優化網站的性能。