前言
我们在做性能测试的时候,大多数时候不仅仅是对一两个接口单独的测试,而是需要在一个尽可能体现真实应用场景的情况下,了解到各个接口的响应和各服务器的负载情况。这时候,场景的设计就变得尤为重要。模拟出更真实的使用场景,能使得测试结果更加可信。本文以在线考试系统作为被测系统,Jmeter作为测试工具为例,来谈进行场景设计时需要考虑的问题和解决方案。
流程梳理
一个完整的场景,一般包含好几个步骤,比如在线考试,主要的操作流程有登录系统、进入考试页面、开始答题、保存答案和提交试卷。确保测试脚本中包含场景的各个步骤。
思考时间
对于真实的用户而言,他们在进行各种操作时,操作与操作之间肯定会有一些停顿。所以,在测试脚本设计时,我们也应该在一些请求之间加入一些停顿时间,我们通常称为思考时间(think time)。每个用户的停顿时间通常不是一模一样的,比如,用户在作答题目时,每完成一道题目,到答下一道题的时间肯定是不同的。因此,我们可以将思考时间随机化,以此来达到最真实的效果。在Jmeter中可以使用高斯随机定时器(Gaussian Random Timer)来实现思考时间随机化,可以让思考时间分布在一定范围之内。
非必要和可重复性操作的随意性
在一些测试场景中,不是每个步骤都是必须执行的,执行的次数和时间间隔也是不一定的。比如考试中的保存答案这个步骤,有的用户在考试过程中,可能不会用到保存答案的功能,直接作答完提交试卷即可。而有些更谨慎的人,可能每答几道题就要去点一下保存按钮。对于这种场景,Jmeter的随机控制器(Random Controller)可以实现,在该控制器下的请求将被随机地执行。
用户数和并发时间
用户数和并发时间往往是根据测试需求来设定。比如测试场景是在5分钟内,2000个考生陆续登录线上考试系统开始考试,那么,用户数和并发时间就可以设定为2000和300s。但是整个流程中的不同步骤,可能的并发时间是不同的,比如登录请求是在5分钟内并发,但是最后的提交试卷的并发时间要短得多,因为在非常重要的考试里,用户可能都会拖到最后的时间才会交卷,还有就是很多考试系统都有到时间后自动交卷的功能,因此,最后的并发时间可能只有几秒。遇到这种情况,可以使用Jmeter的同步计时器(Synchronizing Timer)来实现这种集合点的功能。只要设置一个数值,运行到在这个计时器下的请求会等待积攒到设定数值的数量后,再一起向服务器发起请求。这样便准确模拟了一定数量用户一起交卷的情况。
结语
本文给出了性能测试场景设计中的几个常见问题,并简略介绍了Jmeter的几个组件(高斯随机定时器、随机控制器和同步计时器)来实现相应场景,如需更多信息,请查阅Jmeter官方使用手册。
参考文献:
http://jmeter.apache.org/usermanual/component_reference.html#Gaussian_Random_Timer
http://jmeter.apache.org/usermanual/component_reference.html#Random_Controller
http://jmeter.apache.org/usermanual/component_reference.html#Synchronizing_Timer