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

有個需求,須要在壓測環境中,建立幾十萬的帳號數據,而後再根據建立結果,查詢到某些帳號信息。html

按照以前個人作法,直接Python調用API,而後再數據庫查詢;正則表達式

可是近期全部開發人員的數據庫訪問權限被限制,我也不能例外。無法訪問數據庫,可是有沒有查詢的API,很差弄。數據庫

 

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

拿到建立數據的 post  API,用Jmeter實現如下,而後提取返回值,並保存到本地文件。api

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

我以前用Python弄得多一些,這裏把用Jmeter實現,也給作一下簡要的簡要記錄。以下:post

 

步驟以下:性能

一.新建TestPlanui

 

 

二.增長以下組件:spa

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後置處理器 ,要注意使用;

 


 

 

部分參考:http://www.javashuo.com/article/p-xjwvbwdc-gh.html ,可是該文章有點問題錯誤,看的時候要注意辨別;

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

一、首先把接口調通,肯定須要統計的字段,這裏以統計ccmpSeq字段來作例子。

 

二、添加正則表達式提取器,用來提取響應結果中的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)缺省值:若是參數沒有取獲得值,那默認給一個值讓它取,一般狀況下爲空
 
三、在本地新建一個123.csv文件,而後添加一個BeanShell PreProcessor,用於提取結果並將之保存到123.csv文件。

 

四、添加線程數爲10,運行後,打開123.csv,查看結果。 

相關文章
相關標籤/搜索