【Jmeter】jmeter提取response中的返回值,並保存到本地文件--BeanShell后置處理器


有個需求,需要在壓測環境中,創建幾十萬的賬號數據,然后再根據創建結果,查詢到某些賬號信息。

按照之前我的做法,直接Python調用API,然后再數據庫查詢;

但是近期所有開發人員的數據庫訪問權限被限制,我也不能例外。沒法訪問數據庫,但是有沒有查詢的API,不好弄。

 

后來我想到了一個解決辦法,試驗了一下,可行。簡要記錄如下:

拿到創建數據的 post  API,用Jmeter實現以下,然后提取返回值,並保存到本地文件。

順便說一下,其實這個用Python實現也沒問題,選擇哪個,其實都行。

我之前用Python弄得多一些,這里把用Jmeter實現,也給做一下簡要的簡要記錄。如下:

 

步驟如下:

一.新建TestPlan

 

 

二.增加如下組件:

1.TestPlan

 

 

2.增加setUp Thread Group

 

 

3.增加 HTTP HTTP信息頭管理器

 

 

 配置:Content-Type:application/json

 

4.增加HTTP Request

 

 

POST http://haochuangtest.com/api/rest/internal/v1/en/XXXenterprise/${具體參數}/cloudXXXXX

POST data:
{
"id": "",
"XXXXXNumber": "",
"displayName": "HAO-TEST",
"password": "",
"XXXXXPassword": "",
"autoXXX": 2,
"XXXModel": false,
"smartXXXX": 6,
"expireTime": -1,
"adminUserId": 0,
"adminDisplayName": "null",
"permanent": "true",
"XXXXXNumberType": 4,
"XXXXXId": "null",
"userXXXXXXXDisplayName": "null",
"configs": {
"conXXXX": "2"
}
}

 

 

5.增加 Regular Expression Extractor

 

 

        <hashTree>
          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
            <stringProp name="RegexExtractor.refname">meetingNumber</stringProp>
            <stringProp name="RegexExtractor.regex">&quot;meetingNumber&quot;:&quot;(.+?)&quot;,</stringProp>
            <stringProp name="RegexExtractor.template">$1$</stringProp>
            <stringProp name="RegexExtractor.default"></stringProp>
            <stringProp name="RegexExtractor.match_number">1</stringProp>
          </RegexExtractor>
          <hashTree/>

 

6.增加 BeanShell PostProcessor

 

 

FileWriter fstream = new FileWriter("D:\\WORK_2020\\20200224_HAOCloud\\meetingId.txt",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("meetingNumber")+ "\n");
out.close();
fstream.close();

 

 

7.增加 View Result Tree 察看結果樹

 

 

 

3.調試配置並運行;

運行過程,查看結果數的返回結果就行,此處不做截圖;

 

4.檢查結果:

可見文件已經成功生成 :

   

 

 

 

 

 

注意點:

1.對於返回結果的正則部分要注意,差一個雙引號或者.都可能出錯,導致獲取的結果為null;

2.對於兩個引用的組件要注意,不要選錯;

3.其中主要的就是這個 BeanShell后置處理器 ,要注意使用;

 


 

 

部分參考:https://www.cnblogs.com/yrxns/p/10912816.html ,但是該文章有點問題錯誤,看的時候要注意辨別;

當做性能壓測時,可能會需要把響應數據的一些字段統計出來。這里簡單介紹一下。

1、首先把接口調通,確定需要統計的字段,這里以統計ccmpSeq字段來做例子。

 

2、添加正則表達式提取器,用來提取響應結果中的ccmpSeq

 

 

正則表達式用""包起來,如HTTP請求完成后的響應數據

{
"ccmpSeq":"CBS_queryBalance20171023131825491588",
"respTime":"20180820105000",
"respCode":"0",
"respDesc":"操作成功",
"data":{
"totalAmount":19999991000,
"accountID":"acct1470001090166"
}
}

我們只需要統計ccmpSeq,所以正則表達式為  "ccmpSeq":"(.+?)"

() 表示括起來的部分就是要提取的。

. 表示匹配任何字符串。
+ 表示一次或多次。
?表示不要太貪婪,在找到第一個匹配項后停止。
(3)模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$,$3$等等,表示解析到的第幾個值給seq。如:$1$表示解析到的第1個值,我們這里只有一個正則表達式,所以是$1$
(4)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填1
(5)缺省值:如果參數沒有取得到值,那默認給一個值讓它取,通常情況下為空
 
3、在本地新建一個123.csv文件,然后添加一個BeanShell PreProcessor,用於提取結果並將之保存到123.csv文件。

 

4、添加線程數為10,運行后,打開123.csv,查看結果。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM