实战示例

测试场景
  • 电商系统经常会涉及到商品的库存数量的压测,在用户下单前需要先做库存余量的判断,当余量不足时用户无法下单,保证商品的有效售卖
库存余量查询响应结果
  • 响应结果一般是json字符串的形式,响应示例如下:

2、期望获取的结果

通过上面响应结果,想获取参数为periods数组下的period_stock参数值和back_periods数组period_stock参数值。

标注如下:

3、jmeter bea

测试获取建议操作
  • 由于jmeter中beanshell断言中书写代码没有提示(超不方便),不过可提前在IEDA工具中先调试获取结果再复制到beanshell中。
  • IDEA调试结果如下:

然后就只把把代码复制到beanshell中即可。在jmeter中可以打印下获取的库存余量,结果如下:

  • 附测试脚本(当back_periods库存值=0时,beanshell断言生效,可及时查看订单创建数量是否与库存数量一致)
  import org.json.*;
//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
JSONArray data = responseJson.getJSONObject("data").getJSONArray("ticket_periods");
JSONObject ticket_periods = (JSONObject)data.get(0);
JSONObject periods =(JSONObject)(ticket_periods.getJSONArray("periods").get(0));
Integer period_stock = periods.getInt("period_stock");
JSONObject back_periods=(JSONObject)(ticket_periods.getJSONArray("back_periods").get(0));
Integer period_stock_back = back_periods.getInt("period_stock");
log.info("==========获取库存开始===========");
log.info("periods内余量值:" + period_stock);
log.info("back_periods内余量值:" +period_stock_back);
log.info("==========获取库存结束===========");
//beanshell断言
if(period_stock == 0){
Failure = true;
FailureMessage = "period_stock的值:" + period_stock +"警告:已无库存,请注意查看"+ "||period_id的值为:"+period_stock_back+"警告:已无库存,请注意查看";
}
  • 获取所有数组内的参数值,这个需要进行遍历操作



    附遍历代码
public void testCase() throws IOException {
// //将返回值转换为json
// JSONObject responseJson = new JSONObject(str);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Map map = objectMapper.readValue(str, Map.class);
Map dataMap = (Map) map.get("data");
List<Map<String, Object>> list = (List<Map<String, Object>>) dataMap.get("ticket_periods");
list.stream().forEach(item ->{
List<Map<String, Object>> periodsList = (List<Map<String, Object>>) item.get("periods");
periodsList.stream().forEach(periods ->{
System.out.println("当前period_stock的值:"+periods.get("period_stock"));
});
});
}

  • 另外使用jmeter的beanshell功能经常会用到以下方式传递变量

    1、在beanshell中如果拿到响应结果的某个值,可以通过赋值方式传入,然后通过变量取值即可
vars.put赋值,格式为 vars.put("key","value")
vars.get 获取变量,vars.get("period_stock")

2、特别说明:如果想把Integer类型通过vars放入的话需要加上toString()方法,上面需要把Integer 类型period_stock作为变量传递,示例

 vars.put("period_stock",period_stock.toString());

其它接口可通过变量名取值:{"period_stock":"${period_stock}"}

传递结果

GET http://127.0.0.1:8080/test

GET data:
{"period_stock":"80"} [no cookies] Request Headers:
Connection: keep-alive
Content-Type: application/json
Content-Length: 21
Host: 127.0.0.1:8080
User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_181)
  • 常用变量总结:

    • vars: 实际引用Jmeter线程的局部变量, 连通Jmeter 和 beanshell

      vars.get(String key) //获取变量值

       vars.put(String key, String value) //存储value到变量key
    • log: 写入信息到日志中,log.info(""),括号放置需要的变量
    • prev:获取当前响应结果和响应状态;

       getResponseDataAsString()

       getResponseCode()
    • props:class java.util.Properties

      变量属性复制给变量props.put("some_variable",vars.get("some_variable"))

  • 更多测试技术分享、学习资源以及一些其他福利可关注公众号:【Coding测试】获取:

记录jmeter使用beanshell断言获取复杂的json字符串参数值的更多相关文章

  1. JMeter之BeanShell断言---获取时间戳

    1.创建线程组,创建一个BeanShell Sampler,在其中编写BeanShell脚本. 2.在Jmeter中,可以利用${__time(,)}时间戳函数来获取十位的时间戳,如: vars.pu ...

  2. jmeter之beanshell断言---数据处理

    在做接口测试时,对响应数据的校验是非常重要的部分:在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言.BeanShell断言等等,BeanShell断言可以自定义断言,自由灵 ...

  3. Jmeter之BeanShell断言使用

    1.Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:用来记录日志文件,写入到j ...

  4. 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解

    目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...

  5. JMeter中BeanShell断言使用一

    Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面 首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS ...

  6. jmeter之beanshell断言实例

    .首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果: import org.json. ...

  7. jmeter使用BeanShell断言

    1. 首先存储一个接口的响应结果,如在http请求的BeanShell PostProcessor: import java.io.UnsupportedEncodingException; Syst ...

  8. Jmeter之BeanShell 断言

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15436864.html 博客主页:https://www.cnblogs.com/testero ...

  9. Jmeter通过BeanShell Sampler获取Jmeter的Bin路径,并存入变量供后面的脚本调用

    Jmeter的Bin路径是其运行路径,当把自动化测试的脚本放在Bin目录下时,为了将存储CSV的数据文件以及脚本的路径都设置成相对路径,我们需要获取到Jmeter的运行路径: 通过BeanShell ...

随机推荐

  1. 外链专员怎么做提升自己的seo水平

    http://www.wocaoseo.com/thread-281-1-1.html 我是一个外链专员,想提升自身的seo水平该怎么做? 随着SEO的学习,已经有了一段时间,平时也在思考好多事情,现 ...

  2. Javascript常见数据类型API

    1 - 内置对象 1.1 内置对象 ​ JavaScript 中的对象分为3种:自定义对象 .内置对象. 浏览器对象 ​ 前面两种对象是JS 基础 内容,属于 ECMAScript: 第三个浏览器对象 ...

  3. ent orm笔记4---Code Generation

    在前面几篇文章中,我们经常使用的可能就是entc这个命令了,entc这个工具给带来了很多功能,这篇文章主要整理关于ent orm 中Code Generation 之前的例子中有个知识点少整理了,就是 ...

  4. CPU有个禁区,内核权限也无法进入!

    神秘项目 我是CPU一号车间的阿Q,是的,我又来了. 最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥. 前几天,我又去找他,还是没看到他人,却意外地在他桌上发现了 ...

  5. 喵的Unity游戏开发之路 - 游泳

    原文: https://mp.weixin.qq.com/s/-ERFNB1GRZ6UAkHOhP9UQw 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀 ...

  6. docker快速搭建php7.2-nginx开发环境

    1.输入命令: docker search -s 100 php 搜索出下面图中列表,选择webdevops/php-nginx. 2.通过docker拉取webdevops/php-nginx镜像, ...

  7. Photon PUN 一 介绍

    有句话说的好 , 官网永远是最好的学习地方 . 虽然国内的资料不多 , 但是官网的资料还是很充足 , 这就带着英汉词典就着作阅读理解的劲头去官网学习吧 https://doc.photonengine ...

  8. POJ-1273Drainage Ditches(网络流入门题,最大流)

    Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...

  9. 让document.write的广告无阻塞的加载

    广告代码分析 很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接. 1 <script type="text/javascr ...

  10. Tomcat配置SSL

    Tomcat配置SSL 查询网上资料配置如下: <Connector port="8443" protocol="HTTP/1.1" maxThreads ...