Jmeter(二十七) - 從入門到精通 - Jmeter Http協議錄製指令碼(詳解教程)

巨集哥發表於2020-11-25

1.簡介

  LoadRunner的錄製功能讓效能測試指令碼編寫對於不懂程式碼的人變成了一件容易上手的事,但是由於LoadRunner收費高昂,龐大,一般企業很少用,除非必須使用。Jmeter作為效能測試中的王者也少不了提供錄製功能。Jmeter的錄製除了自身提供的HTTP代理方式進行錄製的原理是解析網路資料包,按HTTP協議包裝成Http Request、Http Response等物件,這些物件就是我們可以清楚方便認識的東西。

2.Jmeter配置代理進行錄製

2.1瀏覽器配置代理

1.開啟瀏覽器(巨集哥這裡以IE11為例)順著右上角 -【Internet選項】-【連線】-【區域網設定】進入如圖所示頁面:

2.在“代理伺服器”中按上圖進行設定,可以把“localhost”換成127.0.0.1,8080換成你想設定的埠,主要不要與別的埠產生衝突,如果有,請換成別的埠,一般4位的埠衝突的機會比較少;配置好以後點選“確定”按鈕。

2.2Jmeter中配置代理

 1.首先在JMeter中新增一個執行緒組,如下圖所示:

 2.新增HTTP代理伺服器節點,如下圖所示:

3.設定代理伺服器,埠號設定就是我們在瀏覽器中設定的埠,如下圖所示:

4.目標控制器:決定將來我們錄製的指令碼放在那個目錄下(測試計劃是一顆目錄樹,這個目錄就是樹中的一個節點)。你可以在【測試計劃】-【執行緒組】下面新增節點,然後指定指令碼放在此節點,巨集哥線上程組增加了【簡單控制器】節點,然後就可以在“目標控制器”處選擇到它。如下圖所示:

5.分組:錄製指令碼的時候,會增加很多節點,這些節點我們可以給它分個組,方便我們檢視和管理。對於http請求我們可以把每一個URL看成一個組,這裡可以更好地理解。分組有如下選項,如下圖所示:

選項引數說明:

(1)不對樣本分組:羅列出錄製到的所有http請求。

(2)在組間新增分隔:加入以分割線命名的簡單控制器。

(3)每個組放入一個新的控制器:每個URL產生的請求放在一個 控制器下。

(4)只儲存每個組的第一個樣本:我們知道一個URL產生的HTTP請求可能不止一個,一張圖片、一個樣式都會是一個HTTP請求,錄製時將會產生很多的HTTP請求,但有時候測試我們需要考慮快取,實際上一些圖片不用每次都去下載,我們也不關心這些圖片產生的負載,另外對於網際網路多數會用的CDN等相簿來儲存這些圖片、CSS等靜態資源。所以理論上我們可以在指令碼中忽略它,但是我們必須根據實際情況來選擇是否忽略。因此如果忽略,我們就可以選擇此項,只錄制產生動態資料的HTTP請求。

(5)每個請求放入一個新的事務控制器:巨集哥用大白話解釋就是每個URL的請求放入一個事務中,不管它有多少HTTP請求,只要是這個URL請求產生的。

其他介面引數說明:

(1)記錄HTTP資訊頭:把Header頭資訊也錄製下來。

(2)新增斷言:這個大家都知道,就是新增檢查點,在錄製的時候加入空的檢查點,後續我們自己填寫斷言(檢查)規則。

(3)Regex matching“檢查點用正規表示式來匹配內容。

(4)Http Sampler settings:與“http請求”設定方法一樣。

2.3開始錄製

1.全部配置好以後,在【HTTP代理控制器】中按下【啟動】。然後子啊瀏覽器中瀏覽Web頁面(你要測試的功能),就可以錄製下這些HTTP請求。錄製狀態下的“啟動”按鈕是灰色的不可以點選,非錄製狀態下的“啟動”按鈕可以點選。

2.在錄製時每個js、png、swf及動態請求(需要伺服器動態取資料)都會錄製下來。所以我們選擇“只儲存每個組的第一個樣本”,但這樣通常優惠有動態請求被漏掉,所以HTTP代理來進行錄製還不是很高效,因此我們換一個工具(Badboy)來錄製,甚至有能力的話,我們直接手寫指令碼(巨集哥推薦這種方式)。

注意:
現在越來有多的系統或者網站的前端架構使用動態載入的方式(Ajax+JS+JSON)來處理,對於這種應用,我們使用JMeter或者LoadRunner進行錄製都不能完成任務。不相信的童鞋們可以錄製一下去哪兒官網。

3.點選啟動後,會提示:Jmeter匯入https安全證書,啟動Jmeter的HTTP代理伺服器,會在Jmeter安裝路徑的bin目錄下生成一個安全證書檔案:ApacheJMeterTemporaryRootCA.crt。如下圖所示:

4.在Jmeter選單選項-> SSL管理器,匯入jmeter的bin目錄下的安全證書檔案ApacheJMeterTemporaryRootCA.crt。

5.點選SSL管理器,檢視匯入的證書,如下圖所示:

6.在JMeter的bin目錄下,找到證書雙擊開啟證書,將證書匯入瀏覽器中,如下圖所示:

7.代理伺服器重新啟動後,會開啟如下所示介面,Recorder:Trnsactions Control。此時開始錄製指令碼,在瀏覽器中輸入要訪問的網址,進行相關操作。這裡以度娘為例,錄製訪問度娘,然後查詢:北京-巨集哥的指令碼。

這個彈框用處,為了方便快捷的填寫錄製時,需要編寫的事務名稱所使用;不需要每次去開啟jmeter的介面去修改事務名稱,大家可以忽略它。

8.在瀏覽器輸入度娘網址後,進入度娘後,輸入框輸入:北京-巨集哥,點選查詢。檢視Jmeter執行緒組下的錄製控制器是否已經有請求產生。若產生請求,錄製指令碼成功。如下圖所示:

9.錄製成功後,請求中也會記錄傳送的資訊,如伺服器名稱、埠號、路徑、和請求時的引數等,如下圖所示:

10.選中“錄製控制器”,右鍵新增“觀察結果樹”,執行指令碼,對所錄製的指令碼進行除錯,這裡是驗證錄製登入成功的指令碼,如下圖所示:

11.精簡指令碼,對除訪問度娘,查詢北京-巨集哥以外的請求進行刪除。如下圖所示,在察看結果樹可以看到執行後的指令碼響應,在響應體中看到<百度一下>,代表訪問成功,看到北京-巨集哥的查詢結果,程式碼查詢成功,至此錄製完成。關閉Jmeter代理伺服器。如下圖所示:

 查詢北京-巨集哥請求的結果,如下圖:

3.小結

 1.可能有些同學遇到Jmeter錄製前訪問正常,設定代理卻無法訪問。

根據巨集哥的分析可能性有幾種,一類是工具本身的代理程式未啟動,一類是埠被佔用,另一類是證書問題。

可能性最大的都是證書問題,http的請求可能還好,https的請求就可能涉及到證書。安裝bin目錄下的證書即可(具體證書安裝的方法可以問一下度娘,不過也簡單類似傻瓜式的安裝軟體下一步,下一步就可以了)。其實按照巨集哥的步驟應該是沒有什麼大問題的。

2.錄製完以後,不能正常的訪問網際網路,注意要關閉瀏覽器的代理後,就可以正常訪問了。

·好了,今天就分享到這裡,不會寫指令碼的童鞋們這次有口福了!!!

相關文章