jmeter 指令碼增強(引數化)
阿新 • • 發佈:2019-02-15
jmeter 之中通常場景需求需要很多不同的資料作為請求的一部分引數,所以需要將這些不同的資料做為引數使用變數傳遞給每次請求
指令碼的引數化主要有以下幾種方式
1. 使用配置元件CSV Data Set Config
配置解析:
在響應斷言中使用
2. 使用jmeter自帶函式獲取引數值
jmeter中可以獲取引數值的有__Random( , , ),__threadNum,__CSVRead(
, ),__StringFromFile( , , , )四個函式
在請求中使用: 在響應斷言中使用函式讀取的值所儲存的變數Svalue: 3. 從資料庫中取值作為引數化 在測試計劃中加入資料庫配置及請求,在請求下新增後置處理器-->正則表示式提取器,jdbc請求 正則表示式提取器的設定:引用名稱即為後續需要用到變數名,正則表示式必須包含在()裡,我這裡使用者都是字母和數字的組合,所以使用([0-9a-z]+),可以根據自己的實際情況進行,預設值是如果沒有匹配到任何內容就使用預設值作為username的值 登陸請求中使用在資料庫中查詢到的使用者名稱進行登陸 響應斷言中使用資料庫中查詢到的使用者名稱作為登陸成功後的驗證點
- Filename: 讀取的檔案,檔案裡有自己準備為可變引數的賦值資料,多引數可使用多列,檔案字尾也不限制,可以寫相對路徑也可以寫絕對路徑。
- File encoding: 讀取檔案時的編碼型別,預設是UTF-8,所以如果你的檔案不是這個編碼方式,那就需要與自己的檔案編碼方式一致
- Variable Names(comma-delimited):引數變數名稱,引數檔案裡有幾列這裡就有幾個變數,並且順序與引數檔案裡的每一列相對應,是以逗號分隔(半形),變數名是自定義的,但是定義一個比較有意義的變數名會使指令碼具有更好的可讀性。
- Delimiter(use '\t' for tab): 檔案中每一列的分隔符,預設是逗號 (半形),但是注意這裡是配置引數檔案裡的分隔符,而不是定義變數名的分隔符,變數名的分隔符只能是逗號。
- Allow quoted data?: 此欄位表示是否允許引數檔案中的引數值已經被引用,比如引數檔案中的值在雙引號裡,那麼這裡需要設定True才能正常讀取引數檔案中的值,這裡預設是False,比如下圖的引數檔案中的第一列均有雙引號,那麼這裡就需要設定為True才能正常讀取
- Recyle on EOF:設定引數檔案讀到末尾的時候是否從頭再讀,預設是True
- Stop thread on EOF:執行緒讀取檔案到末尾是是否停止,預設False,如果這裡設為True, Recyle on EOF 這個設定也是True時,則指令碼執行執行緒數會以執行緒數和引數檔案的行數中數值最小的為準
- Sharing mode:這個配置元件共享給哪些執行緒,All threads:
- 注:對於Allow quoted data 和 Sharing mode中的edit選專案前還沒搞明白
- __Random(,,):使用函式助手對話方塊,開啟此函式設定如圖,最後一個欄位是選填的,定義隨機取到的值儲存的變數名,比如請求的時候使用了隨機函式,然後響應斷言的時候需要用到此隨機值,即可使用自定義的變數,${Rvalue},將生成的字串拷貝到用到的地方,可以看到此函式的使用形式為$__Random(param1,param2,param3),前兩引數是隨機數的開始和結束值,最後一個引數是此函式隨機生成的值所儲存的變數,熟悉了構成就可以直接手動去寫了,不用再使用函式助手對話方塊
- __threadNum:這個函式使用時沒有任何引數,只是生成當前執行緒的執行緒編號,使用方法${__threadNum},如響應斷言中加入這個函式,在斷言結果中檢視到如圖
- __CSVRead(,):通過列讀取檔案,開啟函式助手對話方塊,第一行是要讀取的引數檔案路徑,注意這裡必須是絕對路徑,第二行是要讀取的檔案列,從第0列開始,即視覺可見的檔案的第一列,0即檔案中第一列,所以要讀取檔案中的第二列是需要設定為1
- __StringFromFile( , , , ):從檔案讀取內容,開啟函式助手對話方塊如圖,有四個引數,第一個是引數檔案路徑,注意也是絕對路徑;第二個引數是此函式讀取的值所儲存的變數,可以用在後續腳本里比如${Svalue};第三個和第四個引數分別是檔案開始和結束的序列號(用在從多個檔案讀取引數值的時候),只有第一個引數是必填,其他根據情況選填。
在請求中使用: 在響應斷言中使用函式讀取的值所儲存的變數Svalue: 3. 從資料庫中取值作為引數化 在測試計劃中加入資料庫配置及請求,在請求下新增後置處理器-->正則表示式提取器,jdbc請求 正則表示式提取器的設定:引用名稱即為後續需要用到變數名,正則表示式必須包含在()裡,我這裡使用者都是字母和數字的組合,所以使用([0-9a-z]+),可以根據自己的實際情況進行,預設值是如果沒有匹配到任何內容就使用預設值作為username的值 登陸請求中使用在資料庫中查詢到的使用者名稱進行登陸 響應斷言中使用資料庫中查詢到的使用者名稱作為登陸成功後的驗證點