JMeter中的一些實用功能,你瞭解嗎?

搜狗測試2019-06-22 13:10:26

jmeter這個測試工具在測試界十分常用,我們經常會利用它進行一些測試。其中,有一些組件,我們在一般的測試中可能不常使用,但卻十分方便,可以為我們的測試工作提供很大的幫助。現在就讓我們來看一看JMeter中幾個非常實用的功能。

 

一、Json提取器(JSON Extractor)的使用

在利用http請求器進行的測試中,往往服務器會返回JSON格式的Response message,我們又時常需要提取其中的一些鍵值來進行下一步的測試。這時,JSON Extractor無疑是最好的工具。


JSON Extractor有如下幾個參數設置:

Variable names:保存的變量名,後面使用${Variable names}引用

JSON Path expressions:JSON表達式 

Match Numbers:匹配數字(0代表隨機,1代表第一個,-1代表所有,留空默認是0)

Default Values:找不到時的默認值

Compute concatenation var(suffix_ALL):如果有匹配到多個值,選擇此項,會將全部值保存到_ALL,並使用逗號分割每個值

以合成主播項目的測試為例,在啟動流的請求中,服務端會返回所啟動流的streamID

我們可以利用以下設置進行提取,將streamID值保存在同名變量中:

在需要該值的地方,我們只需使用${streamID}進行引用。

比如在查詢流狀態的過程中,我們需要利用前一步啟動流時所使用的streamID來調用查詢接口,查詢當前流的狀態。如圖所示,在查詢請求的Path位置引用${streamID},即可完成查詢請求。


二、斷言(Assertion)的使用

在利用jmeter進行測試時,有時服務器返回的信息很多,在結果樹中看不出哪些請求出現了錯誤,必須要通過後續分析log文件才能發現,在長時間穩定性測試中還好,但對於一些要實時發現錯誤並統計錯誤率的場景就顯得十分不便。。。

這時候,斷言的作用就體現了出來。

通過添加斷言,我們可以自己設置一些錯誤標識,經篩選後在結果樹和聚合報告顯示為錯誤,並計入錯誤率統計,方便我們隨時觀察測試中的錯誤情況。

jmeter中有多種斷言可供添加,其中最常用的就是響應斷言(Response Assertion)。如下圖所示,我們可以在請求器下添加響應斷言。

比較關鍵的是Field to TestPatterns Matching Rules這兩個選擇,前者設置判斷的屬性,後者設置判斷的邏輯。比如,我們要對響應結果文本中是否含有error進行判斷,以確定服務器返回結果的正確性,這時就在Field to Test中選擇Text Response(響應文本),Patterns Matching Rules中選擇Contains(包含),同時勾選Not(表示不含error的就是正確的),然後在下面的Patternsto Test裏面填上error

這樣,在測試過程中,正確的(不含error)的響應結果在結果樹中顯示為綠色,錯誤的(含有error)響應結果顯示為紅色,十分便於我們觀察出錯情況,同時,錯誤的結果也會計入聚合報告的統計之中,可以實時觀察錯誤率。


三、BeanShell的使用

BeanShelljmeter腳本中的地位十分重要,靈活使用BeanShell可以為編寫jmx腳本帶來很大幫助,令我們能方便地設計出一些特定的測試方案,結合jmeter測試工具多線程的優勢,更可以真實地模擬出大量不同客户端對於服務器的各種請求。

以下是有關BeanShell的一些簡單介紹:

1BeanShell是一種完全符合Java語法規範的腳本語言,並且又擁有自己的一些語法和方法;

2BeanShell是一種鬆散類型的腳本語言(這點和JS類似)

3BeanShell是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java源代碼解釋器,具有對象腳本語言特性。

4BeanShell執行標準Java語句和表達式,另外包括一些腳本命令和語法。

從以上介紹可以看出,BeanShell對於Java有着良好的兼容性,可以在其中執行Java代碼來完成一些工作。

BeanShell幾乎可以用在jmeter腳本的各個地方:其中最常用的有BeanShell PreProcessor(前置處理器)、BeanShell PostProcessor (後置處理器)和BeanShell Sampler(採樣器)。他們的使用方法大同小異,只是因作用的位置不同而略有區別。下面就來舉幾個例子,體會一下beanshell簡單實用的功能。


1、獲取、修改、設置變量值

在jmeter中,我們可以設置各種各樣的變量,無論是從外部文件引用的數據,還是自定義、隨機的參數值等,他們都會作為變量在各自區域供我們靈活調用。而有時,我們希望在測試進行的過程中,對這些相對固定的值進行一些修改,這時BeanShell就可以為我們提供有力的支持。對於變量的操作,BeanShell提供了以下兩種常用操作方法:

 //獲取變量值vars.get(“變量名”);  //設置變量值vars.put(“變量名”, “變量值”);  

比如在測試lstmlm服務時,需要構造像 

文本1;文本2;…;文本n-1;文本

這種形式的字符串,其中文本數量、長度、排列順序等都要在一定範圍內隨機。這在不使用BeanShell的情況下,僅憑jmeter變量很難做到。而有了BeanShell,這種構造就變得十分簡單。

其中的一種方法,我們先將備選的文本分別放置在n個變量之中。

然後在線程組添加Beanshell Sampler,在Scripts區域寫入以下代碼:

拼接好的字符串會保存在str這個變量之中,在需要調用字符串的地方,只需用${str}調用即可。最後執行腳本,線程組中的各個線程就會分別用每次拼接的字符串去做相應的請求了。

實際測試結果(因為本測試有關工具需要在linux環境中使用,所以將windows中的jmx腳本設置好,修改相關文件路徑,放置在linux環境下運行)

從結果日誌中可以看到,請求時的確按要求構造了我們需要的字符串。


2、保存返回文件

有時,http請求返回的是一個文件,但jmeter顯示、記錄Response內容是使用日誌形式,默認無法直接將文件保存下來。這時,我們可以利用BeanShell來編寫簡單代碼,實現文件的的保存。這裏用到了BeanShell PostProcessor (後置處理器)。

下面以利用在線服務轉換音頻格式,生成特定speex格式的音頻文件為例:

首先設置好http請求,並在請求器下添加BeanShell PostProcessor(後置處理器)。

BeanShell PostProcessorScripts區域寫入以下代碼:

執行腳本,最終會將請求的返回結果(轉換好的speex格式音頻)寫入文件。由於jmeter的多線程,非常適用於做這種批量轉換。



關於BeanShell的用法還有很多,用好BeanShell可以為我們的測試工作帶來很大的幫助,使一些工作變得簡單、靈活、高效。


好啦,以上就是本期有關JMeter功能介紹的全部內容。我們下期再見啦~



有任何想説的話,都可以發送內容到“搜狗測試”公眾號,我們一起聊聊~





歡迎添加我們的搜狗測試微信號,與我們一起聊聊測試。



https://hk.wxwenku.com/d/200971561