文章目录
一、异步请求业务逻辑
业务描述:
一个用户最多能同时发起三个异步请求,三个请求中有一个进行完后才允许发起下一个。
业务流程:
- 发一个异步请求,会返回一个jobid,后台job扫描到有异步请求后就会去处理
- 浏览器每5秒向服务器发送一次查询请求——查询job的处理情况,该查询请求reponse里面会包含三个异步请求的处理情况信息(最多三个),有jobId与对应的statusCd信息,然后根据对应的statusCd的值判断异步请求是否结束
- 查询job处理情况的请求 返回的报文如下
statusCd-A:job未处理
statusCd-P:job正在处理
statusCd-S:job处理成功
二、Jmeter脚本准备
1.思路
- 实现一个用户能最多同时发起三个异步请求,一个异步结束之后发起下一个:设置三个并行的线程组,一个线程组里放一个异步请求
- 如何判断异步请求是否结束:1)获取异步请求的jobid:json提取器 2)在查询job处理情况的请求中 根据jobid去获取对应的statusCd:json提取器+beanshell 3)while控制器判断statusCd的值,若statusCd != S,则让改请求一直循环
- 如何5秒发一次请求判断异步是否结束:while控制器+固定定时器
- 如何计入整个异步请求的响应时间:事务控制器 勾选Include duration of timer and pre-post processors in generated sample
2.脚本实现
脚本结构
json提取器
beanshell
//获取jobid对应的statusCd,声明为statusCd变量
String jobid = vars.get("jobid");
//String id1 = vars.get("id1-1");
//String id2 = vars.get("id1-2");
//String id3 = vars.get("id1-3");
String statusCd1 = vars.get("statusCd1-1");
String statusCd2 = vars.get("statusCd1-2");
String statusCd3 = vars.get("statusCd1-3");
if("${jobid}"=="${id1-1}"){
log.info("声明status变量");
vars.put("statusCd",statusCd1);
log.info("--------------statusCd1的值为:"+vars.get("statusCd1-1")+"--------------");
}
if("${jobid}"=="${id1-2}"){
log.info("声明status变量");
vars.put("statusCd",statusCd2);
log.info("--------------statusCd2的值为:"+vars.get("statusCd1-2")+"--------------");
}
if("${jobid}"=="${id1-3}"){
log.info("声明status变量");
vars.put("statusCd",statusCd3);
log.info("--------------statusCd3的值为:"+vars.get("statusCd1-3")+"--------------");
}
log.info("---------------"+vars.get("staffName")+" jobid="+jobid+"的statusCd变量值为:"+vars.get("statusCd")+"--------------");
while控制器:${__jexl3("${statusCd}"!="S")}
事务控制器:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。