ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

聊一聊Jmeter用IF控制器处理接口依赖

2021-10-15 08:33:43  阅读:155  来源: 互联网

标签:下面 控制器 请求 接口 订单 聊一聊 Jmeter data


背景

上一篇关于 JMeter 的多接口测试,虽说可以把几个步骤的串联起来,但是会比较简单和单调。

还有许多业务场景,会根据上一个接口的返回,再决定要不要调用第二个接口或者是掉用其他接口。

还是拿大家常见的查询订单举个例,首先可以是查询订单列表,然后再查订单详情。

试想一下如果订单列表是空,还有必要再查询订单详情吗?

其实再查询订单详情其实意义已经不大了,毕竟真实的用户路径也不会有这一步。

对这种类型的场景,就需要借助 If 控制器 (If Controller) 来完成了。

顾名思义,这个 If 控制器几乎等价于我们写代码用的最多的 if 关键字。

它可以通过条件来控制是否运行其下面的测试元件(子元素)。

下面来看一个具体的例子来了解一下。

场景接口

在这里的话,老黄没有虚拟一个场景,用的是接口A,接口B和接口C来代替。

它们的流程大概如下:

  1. 调用接口 A,会返回一个 data 字段,是 2 的余数,取值 0 或 1
  2. 如果接口 A 返回的 data 是 0,会去调用接口 B
  3. 如果接口 A 返回的 data 是 1,会去调用接口 C

下面是各接口定义

接口 A

请求:

GET http://localhost:8532/If/a
Content-Type: application/json

响应:

{"code":0,"msg":"ok","data":0}

接口 B

请求:

GET http://localhost:8532/If/b?data=xxx
Content-Type: application/json

响应:

{"code":0,"msg":"ok","data":0}

接口 C

请求:

GET http://localhost:8532/If/c
Content-Type: application/json

响应:

{"code":0,"msg":"ok","data":"c"}

接口 A 处理

添加一个 HTTP 请求,进行相关的参数设定。

同时还要添加一个 JSON Extractor 的后置处理器

到这里的话,接口 A 就可以了。

下面就是用 If 控制器去区分调用 接口 B 和接口 C 了

IF 处理

在线程组直接添加一个 If 控制器。

比较重要的是填写里面的表达式。

可以看到上面有一个小小的感叹号,其实也就是提醒我们尽可能用 __jexl3__groovy 来判断 true 和 false。

然后就是 If 控制器下面的添加正常的 HTTP 请求了。

最后再加个断言

接口 C 就是同理了,变的就是 If 控制器里面的表达式。

为了演示接口 A 返回的 data 会出现 0 和 1 ,所以加一个循环控制器来进行多次请求。

到这里的话,所有 Jmeter 的内容已经完成了。

下面是测试计划最终的样子。

跑起来大概会像下面这样:

可以看到 A 请求后面的 B 和 C 是没有规律的,它们是依据 A 的返回结果变化而变化的。

写在最后

If 控制器可以很好的衔接多个有条件关系的接口测试。

老黄把 JMeter 系列的内容都放在 github 了,方便大家查阅和测试。

https://github.com/catcherwong/JmeterSample

标签:下面,控制器,请求,接口,订单,聊一聊,Jmeter,data
来源: https://www.cnblogs.com/catcher1994/p/15409414.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有