Jmeter中有關隨機參數的那些事

  • 2019 年 10 月 4 日
  • 筆記

相信大家已經看過前面一些介紹jmeter的文章,對這個測試工具已經有了「深入」的了解。在介面測試中,通常我們發送的請求不是一成不變的,使用參數化功能可以解決對不同數據的需求,但對於需要隨機參數的地方,我們需要另外的一些方法。今天我就來介紹一下jmeter中很重要的一類功能——隨機參數。

一、利用Jmeter內置函數方法生成隨機參數

Jmeter中內置了一些十分方便實用的函數,可以大大豐富我們測試的內容與覆蓋度。其中有一類含Random關鍵字的函數便是我們本次介紹的主題。從函數的名字就可以看出,它們都是與隨機有關的,下面我就來簡單介紹一下它們的用法。

提示:

在jmeter中,可以使用函數助手來快速生成函數,調用函數時無需手動輸入整個函數,只要設置幾個參數值,點擊Generate & Copy to clipboard即可自動生成完整的函數,粘貼至需要的位置即可:

函數助手菜單欄入口

1、__Random函數

最常用的隨機函數之一,可以生成一定範圍內的隨機整數。

函數助手中的參數設置

參數說明:

第一個參數:範圍下限

第二個參數:範圍上限

第三個參數:函數值返回的目標參數(變數)

使用舉例:

在合成主播項目的測試中,每次發送文本需要用到不同的文本序號,可以用__Random函數生成,如下圖所示:

json中的seqNo欄位設置為100-999範圍內隨機數字

2、__RandomString函數

與__Random函數類似,用於生成隨機字元串,可以生成一定長度的、由指定字元組成的隨機字元串。

函數助手中的參數設置

參數說明:

第一個參數:字元串長度

第二個參數:用於生成隨機字元串的字元

第三個參數:函數值返回的目標參數(變數)

3、__RandomDate函數

與__Random函數類似,用於生成一定時間範圍內的隨機日期。

函數助手中的參數設置

參數說明:

第一個參數:日期格式

第二個參數:起始日期

第三個參數:終止日期

第四個參數:地域

第五個參數:函數值返回的目標參數(變數)

4、__RandomFromMultipleVars函數

這個函數與前面的幾個略有區別,是通過隨機取變數的方式來獲取函數值,因此在使用前,我們需要預先定義好用於隨機的變數及變數值。

函數助手中的參數設置

參數說明:

第一個參數:用於隨機的變數名(豎線分隔)

第二個參數:函數值返回的目標參數(變數)

使用舉例:

在輸入法變聲服務的測試中,服務支援多種音色變換,為模擬線上用戶實際使用時的情況,需要隨機取用音色:

首先利用自定義用戶變數的方式設置音色列表:

音色列表

在speaker(音色)參數中調用函數獲得隨機音色

二、利用BeanShell生成隨機參數

儘管jmeter內置的函數已經足以解決大部分隨機參數的問題,但還是有一些場景無法完全覆蓋。比如兩個隨機的變數需要對應出現(如音頻編碼和音頻擴展名),需要生成一定範圍內隨機小數等等。這時候,萬能的BeanShell可以為我們提供更加靈活的解決方案來滿足這些需求。

使用舉例:

1、在語音合成項目的測試中,需要合成不同音頻格式的音頻,為了模擬線上情況,音頻編碼和輸出音頻的擴展名應設置為隨機,但二者需要對應。

首先,利用用戶自定義變數的方式分別添加所需的音頻編碼類型和擴展名,為了方便,二者變數名的序號部分設置為一一對應。

音頻編碼和擴展名

我們可以在請求下添加BeanShell前置處理器(BeanShell PreProcessor),在腳本框中輸入如下程式碼:

BeanShell中生成隨機參數

其中,f和w分別對應音頻編碼和擴展名,在請求中調用即可。

請求中調用生成的隨機變數

2、同樣在語音合成項目的測試中,需要為合成的音頻設置不同的語速、音調、音量等,這些參數為一定範圍內的隨機小數。這時,我們依然可以使用BeanShell來獲取這些隨機參數值。

BeanShell中生成隨機參數

volume、pitch和rate即為生成的三個隨機參數值。進一步我們可以通過設置邊界值變數,再利用上文中介紹的__RandomFromMultipleVars函數來提高邊界值的命中概率(結合線上實際數據分析和測試的需要,邊界值的命中概率會比較高)

三組邊界值變數

參數調用

如此設置可以實現上限值、下限值、中間值命中概率各三分之一,明顯提升了上下邊界值的命中概率,更加符合實際場景與測試需求。

好了,關於jmeter隨機參數有關的內容就介紹到這裡,希望能給大家的測試帶來一些幫助,我們下期再見啦~。