09丨关联和断言:一动一静,核心都是在取数据

对每一个性能测试工具来说,关联和断言都是应该具备的基本功能。

但是有很多新手对关联的逻辑并不是十分理解,甚至有人觉得关联和参数化是一样的,因为它们用的都是动态的数据,并且关联过来的数据也可以用到参数化中,但不一样的点是,关联的数据后续脚本中会用到,参数化则不会。断言倒是比较容易理解,就是做判断。

那么到底该怎样理解关联和断言呢?下面我们通过两个例子来思考一下。

关联

现在做性能测试的,有很多都是单纯的接口级测试,这样一来,关联就用得更少了。因为接口级的测试是一发一收就结束了,不需要将数据保存下来再发送出去。

那么什么样的数据需要关联呢?满足如下条件的数据都是需要关联的:

数据是由服务器端生成的;

数据在每一次请求时都是动态变化的;

数据在后续的请求中需要再发送出去。

示意图如下:

img

其实我们可以把关联的功能理解为取服务端返回的某个值。在这样的前提之下,我们可以把它用在很多场景之下。

举个例子,我们常见的 Session ID 就是一个典型的需要关联的数据。它需要在交互过程中标识一个客户端身份,这个身份要在后续的交互中一直存在,否则服务端就不认识这个客户端了。

再比如,我们现在用微服务已经非常多了,在 Spring Boot 中有一个 spring-boot-starter-security,默认会提供一个基于 HTTP Basic 认证的安全防护策略。它在登录时会产生一个 CSRF(Cross-Site Request Forgery)值,这个值典型地处于动态变化中。

下面我们来看一下这个值如何处理。

首先,录制登录、退出的脚本。操作如下:

img

录出的脚本如下所示:

img

这时直接回放会得到如下结果:

img

这回你会看到提示了,Unauthorized,没权限。

在回放的脚本中,我们看到了如下的登录返回信息。

img

同时,在脚本中,我们可以看到登录时会使用到这个值。

img

下面我们就把它关联了。

首先添加 Cookies Manage。JMeter 在处理 CSRF 时,需要添加一个 Cookies manager。如下:

img

这里的 Cookie Policy 一定要选择 compatibility,以兼容不同的 cookie 策略。

然后取动态值,在返回 CSRF 值的地方加一个正则表达式提取器来做关联。当然还有更多的提取器,我将在后面提及。

img

这里的,就是要取出这个动态的变化值,保存到变量 csrfNumber 中去。

然后,发送动态值出去,将发送时的 CSRF 值替换成变量。

img

最后,再回放,就会得到如下结果。

img

这样我们就能看到可以正常访问了。

这就是一个典型的关联过程。

上面是用的正则提取器,在 JMeter 中,还有其他的提取器,如下图所示:

img

使用什么样的提取器取决于业务的需要,比如说如果你返回的是 JSON 格式,就可以使用上图中的 JSON Extractor。

我们在很多的业务中,都可以看到大量的动态数据。所以做关联一定要有耐心,不然就会找得很混乱。

断言

在第 8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值