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