性能测试连载 (14)-负载测试如何保证业务连贯性
https://pan.baidu.com/s/1df1HDkFzChYNAbsSazizpw 提取码:hhn7
jmeter 全系列文档资料
https://pan.baidu.com/s/1rD3H9EGbu0u11E8ofpAl3A 提取码:8q65
性能测试初级到高级系列资料
概述
什么是业务连贯性呢?比如下面这个业务流程:
登录 - 业务 A-业务 B-业务 C
首先登录是必须的,没有登录则后续流程都不可能执行。
其次,必须业务 A 执行之后才能执行业务 B,业务 B 执行之后才能执行业务 C。
如果跨流程去执行后续业务,那么系统可能会针对业务状态做相应的拦截和校验
很多测试同学在用 jmeter 做负载测试的时候,往往会发现原本希望正确的流程在负载中很快就乱了。
比如登录 - 业务 A-业务 B-业务 C 变成 登录 - 业务 C-业务 B-业务 A
或者登录 - 业务 A-业务 B-业务 C 变成 业务 A-业务 B-登录 - 业务 C
或者噼里啪啦执行一堆登录,然后再执行后续的业务,如下图
很多人为此伤透了脑筋。因为这样的业务顺序不能使流程贯通,也就不能得出正确的性能测试数据,所以测试的也就没有意义。
为什么会出现这种情况呢?那是因为多线程竞争的原因。多线程执行并发操作,肯定是谁跑得快谁就先执行,线程才不会傻乎乎的的排队。
那么我们应该怎么办?其实方法很简单。jmeter 自带了一个锁控制器。
锁控制器
官方把它定义为线程锁控制器 (Critical Section Controller)
注释:
在这个控制器下面的请求,在相同的时间点只会有一个线程去执行它
也就意味着这个锁下面的事物在相同的时间点会给每个线程分配一个,不会产生竞争。
此时我再用 200 线程去做并发,观察结果发现所有的事物都在按照既定顺序并发执行