輕松搞定把 jmeter 結(jié)果數(shù)據(jù)寫入到指定文件

背景:
在日常的功能測(cè)試或者性能測(cè)試的時(shí)候,需要把結(jié)果中指定的數(shù)據(jù)保存到指定的文件,進(jìn)行使用,發(fā)現(xiàn) jmeter 自帶的文件寫入,沒有自己需要的,默認(rèn)只支持 XML 的結(jié)果保存,那么接下來我們圍繞 beanshell 來實(shí)現(xiàn)這個(gè)功能。
下面從兩個(gè)方面來實(shí)現(xiàn):
一、保存接口返回指定的數(shù)據(jù)
二、從數(shù)據(jù)庫用 SQL 語句取數(shù)據(jù),保存結(jié)果到指定文件中
保存接口返回指定的數(shù)據(jù)

接口:登錄
需求:提取 token 值
1、新建 HTTP 請(qǐng)求

請(qǐng)求返回的結(jié)果,這里直接用 JSON 顯示:

2、新建 JSON 提取器

3、調(diào)試,看有沒有獲取到值
添加 debug sampler

4、運(yùn)行,查看 debug sampler 響應(yīng)數(shù)據(jù)里面 token 有沒有取到值

5、添加 beanshell 取樣器

6、上代碼
//指定需要寫入到哪個(gè)文件,格式:TXT,csv
FileWriter file = new FileWriter("D:\apache-jmeter-5.0\token_num.txt",true);
//創(chuàng)建一個(gè)字符緩存輸出流
BufferedWriter out = new BufferedWriter(file);
//寫文件內(nèi)容
//vars.get:獲取 jmeter 中的變量值
out.write(vars.get("token")+"\n");
//關(guān)閉寫數(shù)據(jù)流
out.close();
//關(guān)閉文件
file.close();

7、運(yùn)行,可以循環(huán)多次寫入數(shù)據(jù)


從數(shù)據(jù)庫用 SQL 語句取數(shù)據(jù),保存結(jié)果到指定文件中

需求:用 SQ 語句查詢出數(shù)據(jù),保存結(jié)果到文件中
1、添加 SQL 語句的配置元件


2、添加 SQL 語句取樣器


--提取 token 的值,并指定 token 輸出的左邊界值,這里取出 5 行數(shù)據(jù)
SELECT CONCAT('"token_num":',token,'') FROM cb_account LIMIT 5

3、添加正則表達(dá)式,提取 SQL 執(zhí)行之后返回的結(jié)果值

引用名稱:token_num
正則表達(dá)式:"token_num":(.+)
模板:$1$
匹配數(shù)字:-1 (取出所有的值)

4、調(diào)試,看有沒有獲取到值
添加 debug sampler

5、運(yùn)行,可以看到獲取到了所有的查詢結(jié)果


可以看到在引用變量后面加上數(shù)字,從 2 開始,那么下面要怎么做呢?
6、添加 beanshell 取樣器

代碼:
//指定需要寫入到哪個(gè)文件,格式:TXT,csv
FileWriter fstream = new FileWriter("D:\apache-jmeter-5.0\token_num.csv",true);
//創(chuàng)建一個(gè)字符緩存輸出流
BufferedWriter out = new BufferedWriter(fstream);
//返回的結(jié)果有值從數(shù)字 2 開始,一共有 5 次,那么我們這里就小于等于 6
for(int num=2; num<=6; num++){
//拼接變量名稱
? ?token_num = "token_num"+"_"+num;
System.out.println(token_num);
//把拼接的名稱賦值給 token_num
vars.put("token_num",token_num);
System.out.println(vars.get(token_num));
//vars.get()獲取到變量名稱,并和上面返回的 token_num_(2,3,4,5,6)名稱一致,取到變量的值
out.write(vars.get(token_num)+"\n");
}
out.close();
fstream.close();

7、運(yùn)行查看結(jié)果:

聲明:本文作者為檸檬班Mike老師,轉(zhuǎn)載請(qǐng)注明出處!