线程同步类 CyclicBarrier 在性能测试集合点应用
在之前的性能测试方案设计中,如果是涉及到多用户的,我一般都是通过先登录用户,然后再将Base
对象传入多线程任务类,以此进行性能测试。
但是这种处理方式有个问题,就是在执行多线程任务类之前,可能会造成等待时间过多,因为需要串行登录用户,如果线程过多的话,等待的时间会稍等长一点。
为此我找到了一个解决办法,就是使用线程同步类CyclicBarrier
将用户登录过程在多线程中实现,然后所有用户登录完成之后再进行性能测试方法的执行,简单讲就是设置一个多线程集合点,所有线程都到达集合点之后,再一起执行具体的测试方法。
之前的文章又介绍过多线程同步类CountDownLatch
、CyclicBarrier
和Phaser
,以及在我之前的性能测试过程中的应用,文章列表如下:
需求
分两步:第一步记录一条数据(有唯一性验证);第二步更改该条记录的状态。
描述比较模糊,简单理解就是insert
之后update
,业务功能简单。
用例设计思路
虽然业务简单,但是实现比较麻烦,所以我采取了链路性能测试,确定唯一性标记,然后进行update
,避免了,单独测试造数据太麻烦的问题。
伪代码如下:
这里将orderNum
当做标记对象了,用于链路追踪和日志查询。
多线程类实现
我继续采取ThreadLimitTimesCount<Integer>
类作为模型类的内部静态类实现,定长线程和固定次数。
这里用到了cyclicBarrier.await()
方法,使得所有线程达到该集合点之后,才进行下一步的代码执行。
测试脚本
Common.notPrintResponse()
方法为了屏蔽测试过程中,打印响应结果,因为日志太多了,处理起来比较麻烦。最近在研究链路测试中对各个接口的数据处理,所以想到了这个方法。
控制台输出
最后因为测试请求,数据量太少了,所以屏蔽了画图功能,欲知图像如何,请参考:性能测试中图形化输出测试数据。
FunTester,腾讯云社区钦定年度作者,非著名测试开发 er,欢迎关注。
版权声明: 本文为 InfoQ 作者【FunTester】的原创文章。
原文链接:【http://xie.infoq.cn/article/12c09457ae42026aa11044073】。文章转载请联系作者。
评论