jmeter的功能簡(jiǎn)單,不需要有腳本語(yǔ)言的編寫經(jīng)驗(yàn),純圖形界面添加測(cè)試場(chǎng)景, 用起來(lái)上手很快。但是如果手動(dòng)添加每一個(gè)web(http/https)請(qǐng)求,費(fèi)時(shí)又費(fèi)力。而且有可能后手動(dòng)編寫的和實(shí)際發(fā)的請(qǐng)求有出入。
1web性能測(cè)試以及web http請(qǐng)求基本原理。
再介紹錄制jmeter腳本之前,我們先談一下web性能測(cè)試。web是調(diào)用http/https接口, 其實(shí)沒有是什么復(fù)雜度可言。只是我們必須清楚,對(duì)于一個(gè)網(wǎng)站說(shuō),一個(gè)頁(yè)面并通常不是只有一個(gè)http請(qǐng)求。如果需要測(cè)試一個(gè)rich web page,必須了解到這一點(diǎn)(測(cè)試http接口則簡(jiǎn)單的許多,只是單一的http接口請(qǐng)求)。
例如這樣一個(gè)頁(yè)面(下面是html代碼)
如果向服務(wù)器請(qǐng)求上面的一個(gè)頁(yè)面,則除了本身頁(yè)面的請(qǐng)求本身,還有一個(gè)css和img的資源。這樣打開這樣一個(gè)頁(yè)面,本需要有三個(gè)http請(qǐng)求。
1. http1 -> get the web page (首先獲取你要訪問的頁(yè)面的html代碼)
2. the web page contain two resources (假設(shè)該頁(yè)面,有一個(gè)css資源和一個(gè)圖片)
3. then request http2 and http3 to get the css file and image respecitively. (則會(huì)繼續(xù)發(fā)起獲取css和圖片的請(qǐng)求)
所以這樣是發(fā)起了3個(gè)http請(qǐng)求,才完整的打開了一個(gè)頁(yè)面。瀏覽器實(shí)際是這么做的,但瀏覽器作了很多優(yōu)化。 (比如多線程[一般2-6個(gè)http connection,不同瀏覽器內(nèi)核不同], http keep-alive,緩存圖片,css等資源)。說(shuō)道這里,不得不佩服loadrunner的強(qiáng)大。他可以盡量模擬瀏覽器的這些行為,來(lái)保證測(cè)試的結(jié)果準(zhǔn)確性。但這些參數(shù)都可以動(dòng)態(tài)調(diào)整的。(通常我們錄制的富web頁(yè)面, 也是rich webpage, 通常需要使用事務(wù)控制器來(lái)輔助我們進(jìn)行度量數(shù)據(jù), 關(guān)于事務(wù)控制器請(qǐng)?jiān)L問"jmeter如何使用事務(wù)控制器")
注意: 新的jmeter-plugins 已經(jīng)支持了webdriver sampler, 已經(jīng)可以模擬瀏覽器的行為,更真實(shí)的模擬用戶訪問web的行為, 可以得到更真實(shí)的性能數(shù)據(jù). 具體是否使用,還需要根據(jù)自己的測(cè)試場(chǎng)景進(jìn)行判斷. (作者目前并不建議盲目的使用, 需要慎重考慮. 原因: 用戶體驗(yàn)方面的性能測(cè)試可以由其他工具完成, 而性能測(cè)試則專注于特定的問題 )
具體資料信息,請(qǐng)?jiān)L問 http://jmeter-plugins.org/wiki/WebDriverSet/
2。實(shí)際錄制腳本
好,那么我們現(xiàn)在來(lái)實(shí)際錄制腳本吧,并且體驗(yàn)一下真正一個(gè)頁(yè)面的實(shí)際http請(qǐng)求過程。這里我們只談http,https不在本文所講范圍內(nèi)。
錄制腳本目前有2種方法,我們先介紹jmeter proxy方法。另一個(gè)是badboy錄制的腳本轉(zhuǎn)化為jmeter腳本,直接想了解badboy,請(qǐng)直接訪問
http://www.badboysoftware.biz/docs/jmeter.htm
jmeterproxy 來(lái)了。
1)啟動(dòng)jmeter,這個(gè)不多說(shuō)了。
2)選擇測(cè)試計(jì)劃,右鍵添加線程組(thread group)
3)選擇這個(gè)線程組,右鍵添加config element -〉 http默認(rèn)請(qǐng)求
4)在http默認(rèn)請(qǐng)求單元,填入server name 為jakarta.apache.org. 這個(gè)是我們要錄制的頁(yè)面。其他地方不填
5)然后選擇剛才那個(gè)縣城組,右鍵加入一個(gè)錄制控制器。位于Add>Logic Controllers -> Recording Controller
6) 選擇WorkBench,右鍵加入 Non-Test Elements -> Http proxy server
7)在http proxy server里, 的patterns to include 里,寫入.*.html 這個(gè)是正則表達(dá)式,意思是錄制所有的html為后綴名的頁(yè)面。 那么如果你要錄制后綴名為jsp或者do的,則寫入.*.jsp 和 .*.do 分別。
8)對(duì)于url patterns to excllude的地方,是寫入不想被錄制的一些資源文件url(往往我們根據(jù)后綴名來(lái)進(jìn)行區(qū)分)。比如不想錄制http發(fā)起獲取圖片的請(qǐng)求,需要寫上*.jpg 或者 *.png !∵@些是否配置,視測(cè)試的具體場(chǎng)景而定。比如是否要測(cè)試靜態(tài)圖片等。
。梗榱苏{(diào)試錄制的情況,我們選擇http proxy server ,添加一個(gè)察看結(jié)果樹監(jiān)聽器。這個(gè)以前我們?cè)?jīng)用過。
。保埃┗氐絟ttp proxy server然后,選擇開始啟動(dòng)。這樣proxy server 啟動(dòng)了。
11)這樣我們打開一個(gè)瀏覽器,將瀏覽器的代理設(shè)置為jmeter proxy server 的ip和端口號(hào)!∫?yàn)閜roxy server 在本地,所以寫localhost 和端口即可。
。保玻┰O(shè)置好代理后,用瀏覽器訪問http://jakarta.apache.org/jmeter/index.html
13)隨便點(diǎn)擊一些連接,然后回到j(luò)meter 的窗口,你查看結(jié)果樹看到了錄制的http請(qǐng)求了。
14)這樣的腳本,我們稍做修改,可以使用了。