88个seo网站优化基础知识点,wordpress发不了博文,网站建设好后为什么要维护,卖花网站模板一、背景
我们使用Jmeter做压力测试或者接口测试时#xff0c;除了最简单的直接对接口发起请求#xff0c;很多时候需要对接口进行一些前置操作#xff1a;比如提前生成测试数据#xff0c;以及一些后置操作#xff1a;比如提取接口响应内容中的某个字段的值。举个最常用…一、背景
我们使用Jmeter做压力测试或者接口测试时除了最简单的直接对接口发起请求很多时候需要对接口进行一些前置操作比如提前生成测试数据以及一些后置操作比如提取接口响应内容中的某个字段的值。举个最常用的例子
会员注册接口需要使用电话号码作为入参电话号码不能重复注册接口需要添加前置操作生成不重复的电话号码。
注册成功后需要从接口返回的内容中提取注册生成的用户ID的值作为后续其他接口操作的入参。
要实现以上的需求有多种方式比如
函数助手生成随机数
手动在excel表中准备好足够多的号码通过添加配置元件CSV data set config来获取不推荐
正则表达式提取值
通过BeanShell编码实现
本文主要给大家讲解如何通过BeanShell编码实现该方法可扩展性强。掌握之后你会发现很多场景都可以通过编写相应的编码来实现一通百通。
二、BeanShell生成不重复的电话号码
Sampler前面加一个前置处理器BeanShellPreProcessor BeanShell PreProcessor的内容为 代码内容
//获取指定范围111-199间的随机数作为电话号码的前缀
long phoneTitle${__Random(111,199,)};
String phoneTitleValuephoneTitle.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());
//num1num2生成1个新的8位的数值
long num num1num2;//通过时间戳值的变化随机数字生成新的随机值、前面再拼接随机的电话号码前缀
//生成一个不会重复的电话号码
String phoneValuephoneTitleValuenum.toString();
//存为变量phone供后面的接口使用
vars.put(phone,phoneValue);
每一行我都加了相应的注释方便理解该行代码的作用应该已经非常好理解了。
接口请求中使用定义好的变量phone 查看接口效果
三、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 resjsonprev.getResponseDataAsString();
log.info(resjson);
//转为Json对象
JSONObject jsoJSONObject.parseObject(resjson);
//从对象中获取code的值
String codeValuejso.getString(code);
log.info(codeValue);
//从对象中获取子的Json对象data
JSONObject datajso.getJSONObject(data);
log.info(data.toString());
//获取子的Json对象data中的userId的值
String useridValuedata.getString(userId);
log.info(useridValue);
//将获取到的userId的值存为变量userid供后面的接口使用
vars.put(userid,useridValue);
每一行我都加了相应的注释方便理解该行代码的作用应该已经非常好理解了。
运行请求Jmeter运行日志中可以看到各个值都成功获取到了 后面的接口使用BeanShell Post Processor脚本中定义好的变量userid:
总结BeanShell代码和Java代码非常相似有Java编程基础的同学可以快速的上手通过编码的方式可以很好的扩展我们需要的功能也是Jmeter进阶使用的必学必会知识之一 ~
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走【文末领取】 【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图全套资料】 一、Python编程入门到精通
二、接口自动化项目实战 三、Web自动化项目实战
四、App自动化项目实战 五、一线大厂简历
六、测试开发DevOps体系 七、常用自动化测试工具
八、JMeter性能测试 九、软件测试全套资料 十、总结文末尾部小惊喜
生命不息奋斗不止。每一份努力都不会被辜负只要坚持不懈终究会有回报。珍惜时间追求梦想。不忘初心砥砺前行。你的未来由你掌握
生命短暂时间宝贵我们无法预知未来会发生什么但我们可以掌握当下。珍惜每一天努力奋斗让自己变得更加强大和优秀。坚定信念执着追求成功终将属于你
只有不断地挑战自己才能不断地超越自己。坚持追求梦想勇敢前行你就会发现奋斗的过程是如此美好而值得。相信自己你一定可以做到