本文介绍: 我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。总结:BeanShell代码和Java代码非常相似,有Java编程基础的同学可以快速的上手,通过编码方式可以很好的扩展我们需要功能,也是Jmeter进阶使用的必学必会知识之一 ~每一行我都加了相应的注释,方便理解该行代码作用应该已经非常好理解了。

一、背景

我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作:比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。举个最常用的例子

实现以上的需求,有多种方式比如

本文主要给大家讲解如何通过BeanShell编码实现,该方法扩展性强。掌握之后,你会发现很多场景可以通过编写相应的编码来实现,一通百通。

二、BeanShell生成不重复的电话号码

Sampler前面一个前置处理器BeanShellPreProcessor

BeanShell PreProcessor的内容为:

代码内容

//获取指定范围111-199间的随机数作为电话号码前缀
long phoneTitle=${__Random(111,199,)};
String phoneTitleValue=phoneTitle.toString();
log.info(phoneTitleValue.toString());

//当前时间戳,比如:1649038001761,除100000,得到一个8位的时间数字long num1 = ${__time(/100000,)};
log.info(num1.toString());

//取1个[1,100000]的随机数字,有极低的概率重复
long num2 = ${__Random(1,100000,)};
log.info(num2.toString());

//num1+num2生成1个新的8位的数值
long num = num1+num2;

//通过时间戳值的变化+随机数字生成新的随机值、前面拼接随机的电话号码前缀
//生成一个不会重复的电话号码
String phoneValue=phoneTitleValue+num.toString();

//存为变量phone,供后面的接口使用
vars.put("phone",phoneValue);

一行我都加了相应的注释,方便理解该行代码作用应该已经非常好理解了。

接口请求使用定义好的变量phone

查看接口效果

现在我也找了很多测试的朋友,做了一个分享技术交流群,共享了很多我们收集技术文档视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

三、BeanShell 从响应结果中提取内容

先在接口Sampler上右键添加后置处理器BeanShell Post Processor:

假设接口返回内容为:
{“code”:“0000”,“msg”:“”,“data”:{“userId”:111111,“phone”:“12011111111”,“cardNo”:“8000000000”}}

{
    "code":"0000",
    "msg":"",
    "data":{
        "userId":111111,
        "phone":"12011111111",
        "cardNo":"8000000000"
    }
}

BeanShell Post Processor脚本代码内容

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

//获取响应内容
vars.put("reponseContent",prev.getResponseDataAsString());
//获取响应code
vars.put("reponseCode",prev.getResponseCode());

//获取响应内容,String类型存储
String resjson=prev.getResponseDataAsString();
log.info(resjson);

//转为Json对象
JSONObject jso=JSONObject.parseObject(resjson);

//从对象获取code的值
String codeValue=jso.getString("code");
log.info(codeValue);

//从对象中获取子的Json对象data
JSONObject data=jso.getJSONObject("data");
log.info(data.toString());

//获取子的Json对象data中的userId的值
String useridValue=data.getString("userId");
log.info(useridValue);

//将获取到的userId的值存为变量userid,供后面的接口使用
vars.put("userid",useridValue);

一行我都加了相应的注释,方便理解该行代码作用,应该已经非常好理解了。

运行请求,Jmeter运行日志可以看到各个值都成功获取到了:

后面的接口使用BeanShell Post Processor脚本定义好的变量userid:

总结:BeanShell代码和Java代码非常相似,有Java编程基础的同学可以快速的上手,通过编码的方式可以很好的扩展我们需要的功能,也是Jmeter进阶使用的必学必会知识之一 ~

===================================================================
以上就是本次的全部内容,喜欢的宝子们,麻烦点个赞+收藏+关注一键三连啦~

END点赞关注不迷路!

原文地址:https://blog.csdn.net/m0_47485438/article/details/134734995

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27754.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注