Jmeter—对异步请求的性能测试


一、异步请求业务逻辑

业务描述:
一个用户最多能同时发起三个异步请求,三个请求中有一个进行完后才允许发起下一个

业务流程:

  1. 一个异步请求,会返回一个jobid,后台job扫描到有异步请求后就会去处理
  2. 浏览器每5秒向服务器发送一次查询请求——查询job的处理情况,该查询请求reponse里面会包含三个异步请求的处理情况信息(最多三个),有jobId与对应的statusCd信息,然后根据对应的statusCd的值判断异步请求是否结束
  3. 查询job处理情况的请求 返回的报文如下
    statusCd-A:job未处理
    statusCd-P:job正在处理
    statusCd-S:job处理成功

    在这里插入图片描述

二、Jmeter脚本准备

1.思路

  1. 实现一个用户能最多同时发起三个异步请求,一个异步结束之后发起下一个:设置三个并行的线程组一个线程组里放一个异步请求
  2. 如何判断异步请求是否结束:1)获取异步请求的jobid:json提取器 2)在查询job处理情况的请求中 根据jobid去获取对应的statusCd:json提取器+beanshell 3)while控制器判断statusCd的值,若statusCd != S,则让改请求一直循环
  3. 如何5秒发一次请求判断异步是否结束:while控制器+固定定时器
  4. 如何计入整个异步请求的响应时间:事务控制器 勾选Include duration of timer and pre-post processors in generated sample

2.脚本实现

脚本结构

脚本结构1


脚本结构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")}


事务控制器:

在这里插入图片描述

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...