电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

JMeter高阶系列—BeanShell脚本精准提取

来源:金蝶云社区作者:金蝶2024-09-235

JMeter高阶系列—BeanShell脚本精准提取

1概述


JMeter作为一个强大的性能测试工具,预置了很多组件和方法,能解决日常测试中大部分的场景,但复杂的场景需通过编写代码来实现

在做性能测试时,经常需要提取上面请求的内容,JMeter提供了非常多的提取器

提取器仅限于一些特定规则的使用,无法覆盖一些特殊的场景


2 问题场景详述

2.1 问题

给财务云的同学做问题解答时,遇到了一个典型的案例。

业务场景路径:

【企业绩效云】→【合并报表】→【报表编报】→【报表编制】

提取报表名称为资产负债表元素ID,作为下一步操作入参。

它的结构是json数组的形式,并且提取的内容19位的数字串,没有key


JMeter中的显示如下


2.2 常规方法

2.2.1 JSON提取器

之前小编写过一篇文章《JSON提取器》中介绍过提取同一个内容,可以有四种不同的提取写法,但是由于提取的内容是一个纯数组,没有key根据数组的下标,可以用此表达式:$[7][27]

需要提取的元素中有资产负债表,根据这个特点,我们也可以写成:

$[?(@[3] == '资产负债表')][27]

2.2.2 正则表达式

我们可以写正则表达式:[0-9]{15,22}

:[0-9]表示09任意的数字,{15,22},表示15位到22位,如果确定使用的雪花算法做的ID一般是19位,我们可以直接写成[0-9]{19},提取出来的是一个数组,我们再通过下标可以提取想要的内容。

2.3 常规方法弊端

• JSON提取器用的表达式$[7][27]和$[?(@[3] == '资产负债表')][27],依赖数据结构的固定,表达式需固定提取数组下标$[7][27]或者[3]的内容,如果返回的数据结构变化,该表达式会失效。

正则表达式[0-9]{19}能一次性把19位的纯数字都提取出来,返回的是一个数组,需要指定数组下标才能正确提取。如果换一个组织,或者数据发生变化,该表达式失效。

有没有一种方法能解决上述问题了。根据数据的某个属性,比如需要提取的ID和属性 资产负债表在同一个节点,我们可以通过资产负债表属性且不依赖于来精准提取ID


3、解决办法


使用BeanShell脚本我们可以先用json提取器直接提取rows节点的内容,然后再利用代码提取rows节点下带有资产负债表属性节点的ID

具体代码:

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

String reslut  = null;

//使用jsont提取器,提取rows的内容

String rows=vars.get("rows");

log.info(rows);

//将rows的内容做分解,提取带有"资产负债表"属性元素的id

JSONArray jsonArray = JSONObject.parseArray(rows);

 

JMeter高阶系列—BeanShell脚本精准提取

1概述JMeter作为一个强大的性能测试工具,预置了很多组件和方法,能解决日常测试中大部分的场景,但复杂的场景需通过编写代码来实现。在做...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信