Jmeter后置处理器BeanShell PostProcessor的使用方法

【Jmeter简介】

Apache JMeter是Apache组织开发的基于Java的压力测试工具,目前常见是用来做软件的接口测试和压力测试。

【问题背景】

使用jmeter进行测试时,一般使用正则表达式进行取值作为接口的传参。但如果当接口返回有多个list,需要对每个list中同一个字段进行取值,如果采取正则表达式进行提取数据,得需要靠人工先判断是否存在这个值,然后再去确定要提取的数据在多少位。比如接口返回的responseBody有AcctDtlsLst、PcrList、TdAcctNbrLst 3个list,我们要对某个list取AcNo这个字段名的值。如果需要取TdAcctNbrLst中第2个AcNo的值,使用正则表达式时需要先数下TdAcctNbrLst中第2个AcNo的值在整个responseBody排在第8位。

 "responseBody":
:   {
:   :   "AcctDtlsLst":
:   :   [
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190410419-101",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190412738-101",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190415756-101",
:   :   :   },
       ]
:   :   " PcrList ":
:   :   [
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6223210000823107",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"62242711904104190",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"62242711904104198",
:   :   :   },
]
"TdAcctNbrLst":
:   :   [
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190410419-106",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190410419-107",
:   :   :   },
:   :   :   {
:   :   :   :   "AcName":"马云",
:   :   :   :   "AcNo":"6224271190410419-108",
:   :   :   },
]

使用正则表达式如下:


正则表达式.png

因此针对数据比较大且返回有多个list,需人工去判断需要取的值是否存在并且在什么位置,效率会有所降低并且容易出错。因此针对这种情况可以使用jmeter自带的功能后置处理器BeanShell PostProcessor,分别提取每个list的值。

【BeanShellPostProcessor简介】

BeanShellPostProcessor 是一个轻量级的面向Java的脚本语言,借用了JMeter对于BeanShell支持的特性,允许使用标准的Java语法来处理Json数据。

【正则表达式与BeanShell的对比】

在jmeter中都可以使用正则表达式和BeanShellPostProcessor用来提取数据,下面是对他们的优缺点进行对比,如图:


正则表达式与BeanShell的对比.png

通过对比发现,BeanShellPostProcessor可以使用Java进行逻辑判断提取更多复杂的值。因此可以提取接口返回多个list且每个list有多个同一字段的值。下面将对BeanShell PostProcessor的具体使用方法做详细的说明。

【BeanShell PostProcessor使用方法】

1、 下载fastjson-1.1.6.jar
下载fastjosn.jar包用以解析json数据,下载链接如下,然后把jar包放在jmeter文件的lib下就可以了。
https://pan.baidu.com/s/1hrT0Unq

2、 添加后置处理器—BeanShell PostProcessor
在需要获取接口返回的值的接口处添加-后置处理器-BeanShellPostProcessor。


添加后置处理器.png

3、在BeanShell PostProcessor里输入下面的代码,用以解析responseBody的数据并取出list中某个AcNo的值。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

String json=prev.getResponseDataAsString();
JSONObject jso = JSON.parseObject(json);
JSONObject responseBody = jso.getJSONObject("responseBody");

JSONArray List = responseBody.getJSONArray("PcrList");
vars.put("AcctNo",List.getJSONObject(0).getString("AcNo"));
JSONArray List2 = responseBody.getJSONArray("AcctDtlsLst");
vars.put("AcctNo2",List2.getJSONObject(0).getString("AcNo"));
JSONArray List3 = responseBody.getJSONArray("TdAcctNbrLst");
vars.put("AcctNo3",List2.getJSONObject(2).getString("AcNo"));
图片 3.png

4、 在接口需要传参的字段引入AcctNo/AcctNo2/AcctNo3


图片 4.png

总结

对于数据量小建议大家还是使用正则表达式,方便快捷。但如果数据量大,或者对取值有特殊要求可以考虑使用BeanShell PostProcessor。当然还有更复杂的情况,比如返回的list中又包含list,或者需要取某种状态下的数据,后续再继续研究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容