一、背景
我們使用Jmeter做壓力測(cè)試或者接口測(cè)試時(shí),除了最簡(jiǎn)單的直接對(duì)接口發(fā)起請(qǐng)求,很多時(shí)候需要對(duì)接口進(jìn)行一些前置操作:比如提前生成測(cè)試數(shù)據(jù),以及一些后置操作:比如提取接口響應(yīng)內(nèi)容中的某個(gè)字段的值。舉個(gè)最常用的例子:
會(huì)員注冊(cè)接口:需要使用電話號(hào)碼作為入?yún)?,電話?hào)碼不能重復(fù),注冊(cè)接口需要添加前置操作生成不重復(fù)的電話號(hào)碼。
注冊(cè)成功后:需要從接口返回的內(nèi)容中,提取注冊(cè)生成的用戶(hù)ID的值,作為后續(xù)其他接口操作的入?yún)ⅰ?/p>
要實(shí)現(xiàn)以上的需求,有多種方式,比如:
函數(shù)助手生成隨機(jī)數(shù);
手動(dòng)在excel表中準(zhǔn)備好足夠多的號(hào)碼,通過(guò)添加配置元件CSV data set config來(lái)獲?。ú煌扑]);
正則表達(dá)式提取值;
通過(guò)BeanShell編碼實(shí)現(xiàn);
本文主要給大家講解如何通過(guò)BeanShell編碼實(shí)現(xiàn),該方法可擴(kuò)展性強(qiáng)。掌握之后,你會(huì)發(fā)現(xiàn)很多場(chǎng)景都可以通過(guò)編寫(xiě)相應(yīng)的編碼來(lái)實(shí)現(xiàn),一通百通。
二、BeanShell生成不重復(fù)的電話號(hào)碼
Sampler前面加一個(gè)前置處理器BeanShellPreProcessor:
BeanShell PreProcessor的內(nèi)容為:
代碼內(nèi)容:
//獲取指定范圍111-199間的隨機(jī)數(shù)作為電話號(hào)碼的前綴
long phoneTitle=${__Random(111,199,)};
String phoneTitleValue=phoneTitle.toString();
log.info(phoneTitleValue.toString());
//當(dāng)前時(shí)間戳,比如:1649038001761,除100000,得到一個(gè)8位的時(shí)間戳數(shù)字。
long num1 = ${__time(/100000,)};
log.info(num1.toString());
//取1個(gè)[1,100000]的隨機(jī)數(shù)字,有極低的概率重復(fù)
long num2 = ${__Random(1,100000,)};
log.info(num2.toString());
//num1+num2生成1個(gè)新的8位的數(shù)值
long num = num1+num2;
//通過(guò)時(shí)間戳值的變化+隨機(jī)數(shù)字生成新的隨機(jī)值、前面再拼接隨機(jī)的電話號(hào)碼前綴
//生成一個(gè)不會(huì)重復(fù)的電話號(hào)碼
String phoneValue=phoneTitleValue+num.toString();
//存為變量phone,供后面的接口使用
vars.put("phone",phoneValue);
每一行我都加了相應(yīng)的注釋?zhuān)奖憷斫庠撔写a的作用,應(yīng)該已經(jīng)非常好理解了。
接口請(qǐng)求中使用定義好的變量phone:
查看接口效果:
三、BeanShell 從響應(yīng)結(jié)果中提取內(nèi)容
先在接口Sampler上右鍵,添加后置處理器BeanShell Post Processor:
假設(shè)接口返回內(nèi)容為:
{“code”:“0000”,“msg”:“”,“data”:{“userId”:111111,“phone”:“12011111111”,“cardNo”:“8000000000”}}?
{
"code":"0000",
"msg":"",
"data":{
"userId":111111,
"phone":"12011111111",
"cardNo":"8000000000"
}
}
BeanShell Post Processor腳本代碼內(nèi)容:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
//獲取響應(yīng)內(nèi)容
vars.put("reponseContent",prev.getResponseDataAsString());
//獲取響應(yīng)code
vars.put("reponseCode",prev.getResponseCode());
//獲取響應(yīng)內(nèi)容,String類(lèi)型存儲(chǔ)
String resjson=prev.getResponseDataAsString();
log.info(resjson);
//轉(zhuǎn)為Json對(duì)象
JSONObject jso=JSONObject.parseObject(resjson);
//從對(duì)象中獲取code的值
String codeValue=jso.getString("code");
log.info(codeValue);
//從對(duì)象中獲取子的Json對(duì)象data
JSONObject data=jso.getJSONObject("data");
log.info(data.toString());
//獲取子的Json對(duì)象data中的userId的值
String useridValue=data.getString("userId");
log.info(useridValue);
//將獲取到的userId的值存為變量userid,供后面的接口使用
vars.put("userid",useridValue);
每一行我都加了相應(yīng)的注釋?zhuān)奖憷斫庠撔写a的作用,應(yīng)該已經(jīng)非常好理解了。
運(yùn)行請(qǐng)求,Jmeter運(yùn)行日志中可以看到各個(gè)值都成功獲取到了:
后面的接口使用BeanShell Post Processor腳本中定義好的變量userid:
總結(jié):BeanShell代碼和Java代碼非常相似,有Java編程基礎(chǔ)的同學(xué)可以快速的上手,通過(guò)編碼的方式可以很好的擴(kuò)展我們需要的功能,也是Jmeter進(jìn)階使用的必學(xué)必會(huì)知識(shí)之一 ~
最后感謝每一個(gè)認(rèn)真閱讀我文章的人,禮尚往來(lái)總是要有的,雖然不是什么很值錢(qián)的東西,如果你用得到的話可以直接拿走:【文末領(lǐng)取】
? ? ?【下面是我整理的2023年最全的軟件測(cè)試工程師學(xué)習(xí)知識(shí)架構(gòu)體系圖+全套資料】
一、Python編程入門(mén)到精通
二、接口自動(dòng)化項(xiàng)目實(shí)戰(zhàn)??
三、Web自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
四、App自動(dòng)化項(xiàng)目實(shí)戰(zhàn)??
五、一線大廠簡(jiǎn)歷
六、測(cè)試開(kāi)發(fā)DevOps體系??
七、常用自動(dòng)化測(cè)試工具
八、JMeter性能測(cè)試??
九、軟件測(cè)試全套資料
十、總結(jié)(文末尾部小驚喜)
生命不息,奮斗不止。每一份努力都不會(huì)被辜負(fù),只要堅(jiān)持不懈,終究會(huì)有回報(bào)。珍惜時(shí)間,追求夢(mèng)想。不忘初心,砥礪前行。你的未來(lái),由你掌握!
生命短暫,時(shí)間寶貴,我們無(wú)法預(yù)知未來(lái)會(huì)發(fā)生什么,但我們可以掌握當(dāng)下。珍惜每一天,努力奮斗,讓自己變得更加強(qiáng)大和優(yōu)秀。堅(jiān)定信念,執(zhí)著追求,成功終將屬于你!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-652690.html
只有不斷地挑戰(zhàn)自己,才能不斷地超越自己。堅(jiān)持追求夢(mèng)想,勇敢前行,你就會(huì)發(fā)現(xiàn)奮斗的過(guò)程是如此美好而值得。相信自己,你一定可以做到!???文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-652690.html
到了這里,關(guān)于Jmeter進(jìn)階使用:BeanShell實(shí)現(xiàn)接口前置和后置操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!