Jmeter对异步接口进行压测,第一个接口返回后,第二个接口取第一个接口的结果重复请求直到正确响应

本文描述了一个关于接口业务场景的压测过程,涉及while控制器实现重复请求直到结果,事务控制器记录总耗时。遇到的问题在于用户定义变量影响了后续循环,通过修改为BeanShell预处理程序解决了这个问题。最后,文章强调了输出报告中使用事务控制器的重要性以获取准确的业务流程统计。
摘要由CSDN通过智能技术生成

我是小白,我很菜

这次压测的接口有个业务:获取局部区域的用户详单,先调用创建任务接口创建任务返回任务ID,后台创建任务后开始计算,再调用获取详情接口发送任务ID请求,若任务未有结果则返回计算中,任务完成计算后,返回详单数据

这种业务场景使用while控制器事务控制器

while控制器用于实现获取到结果就跳出循环的重复请求

事务控制器用来统计任务创建开始到获取到结果为止的总体时间(后台真正的计算时间)

1、实现第一个接口调用,这个很简单,添加Json提取器,提取每次接口返回的taskId

2、实现第二个接口的调用,主要是获取1的taskId并实现循环请求

(1)获取上个接口的任务ID,上一步json提取器已经实现了taskId的参数化,下面${taskId}就能拿到

(2)实现第二个接口的重复请求就要while控制器了,并设置终止条件,将第二个接口放在while控制器下,提取接口的code的值


这里判断条件为第二个接口的code==0退出,code != 0执行while里的循环

 添加用户定义的变量(此处大错特错,后面说

(3)到这里执行测试计划,设置3个线程,循环1次,(创建3个任务,获取3次详情)成功!

再改变循环为2次,理论应该有6次sample(创建6个任务,获取6次详情),结果每次线程组只有第一次执行了while,后面的循环没有执行,只创建了任务没有获取详情(创建了6个任务,获取了3次详情???)

查阅发现,第二个接口的json提取器获取到第一个返回值后(code==0),就一直被UDV保存了code=0,变量影响了后面的循环,因为变量的作用域是线程组,所以无论该线程无论循环多少次都不会执行while了

笔记:

如果用户参数、预处理器或正则表达式提取器定义了与 UDV 变量之一同名的变量,则 JMeter 将替换 UDV 下定义的初始值,线程中的所有其他测试元素将看到更新后的值。

如果有多个线程组,建议为不同的值使用不同的名称,因为 UDV 在线程组之间共享。

如果有多个线程组,则可以在测试计划下定义引用变量并使其全局化。因为变量在元素被处理一次之后才可用。

去掉用户定义的变量,改为BeanShell 预处理程序,给个默认值code为1,放在while控制器之前

跑起来了,每个线程的每一次循环都会执行while了

3、实现输出报告的统计

每次重复请求时,设置一个固定定时器,因为我的接口每次去查询都会将日志写入数据库,为了防止太过频繁导致数据库那边先瓶颈了,需要等待一下

程序从创建任务后到获取任务结果才是真正的计算时间,输出报告时每个接口都有自己的统计数据,不能表现业务流程的统计,那就用到事务控制器了,把接口一、二都添加到事务控制器里,勾选上这两个,非GUI执行就能输出体面的测试报告啦!!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接口测试,修改数据请求有两种方式:临时修改和永久修改。临时修改是指只对当前请求有效,而永久修改是指通过urlreplace命令实现。 对于临时修改,你可以按照以下步骤进行操作: 1. 在左侧列表请求数据。 2. 点击右侧Inspectors->WebForms,可以看到请求携带的参数。 3. 在这里你可以修改参数值或添加携带参数。 4. 修改完请求参数后,点击下方的【Run to Completion】,即可发送修改后的请求。 对于永久修改,你可以按照以下步骤进行操作: 1. 在左侧列表选择请求(拦截的请求会出现向下箭头标志)。 2. 在右侧Inspectors->TextView栏修改返回数据。 3. 修改完返回数据后,点击【Run to Completion】,即可发送修改后的请求。 需要注意的是,永久修改可以通过urlreplace命令实现,这样修改后的请求将会一直生效。而临时修改只对当前请求有效,不会对其他请求产生影响。 #### 引用[.reference_title] - *1* *3* [软件测试-Fiddler拦截接口请求并篡改数据](https://blog.csdn.net/qq_74184107/article/details/128899089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [2022全网最全最细的jmeter接口测试教程以及接口测试流程详解— 使用JMeter发送一个请求](https://blog.csdn.net/m0_59868866/article/details/125332864)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值