文章底部配有演示视频

什么是业务连贯性呢?比如下面这个业务流程:

登录-业务A-业务B-业务C

 

首先登录是必须的,没有登录则后续流程都不可能执行。

其次,必须业务A执行之后才能执行业务B,业务B执行之后才能执行业务C。

如果跨流程去执行后续业务,那么系统可能会针对业务状态做相应的拦截和校验

 

很多测试同学在用jmeter做负载测试的时候,往往会发现原本希望正确的流程在负载中很快就乱套了。

比如登录-业务A-业务B-业务C  变成 登录-业务C-业务B-业务A

或者登录-业务A-业务B-业务C  变成 业务A-业务B-登录-业务C

 

或者噼里啪啦执行一堆登录,然后再执行后续的业务,如下图

 

性能测试连载(15)-混合业务的负载场景保证业务连贯性_多线程

 

很多人为此伤透了脑筋。因为这样的业务顺序不能使流程贯通,也就不能得出正确的性能测试数据,所以测试的也就没有意义。

 

为什么会出现这种情况呢?那是因为多线程竞争的原因。多线程执行并发操作,肯定是谁跑得快谁就先执行,线程才不会傻乎乎的的排队。

 

那么我们应该怎么办?其实方法很简单。jmeter自带了一个事物锁控制器。

官方把它定义为线程锁控制器(Critical Section Controller)

意思就是这个锁下面的请求,在相同的时间点只会有一个线程去执行它

也就意味着这个锁下面的事物在相同的时间点会给每个线程分配一个,不会产生竞争。

 

性能测试连载(15)-混合业务的负载场景保证业务连贯性_测试数据_02

 

此时我再用200线程去做并发,观察结果发现所有的事物都在按照既定顺序并发执行

性能测试连载(15)-混合业务的负载场景保证业务连贯性_多线程_03