并发用户

  很多使用“并发用户”这个词的人,并没有从服务器视角进行考虑。他们想的是坐在电脑前使用这个系统、对系统产生压力的人的个数。基于这个原因,我很少使用这个容易让人误解的词汇,而是进行了更细的划分。主要有这么几个:系统用户数(注册用户数)、在线用户数(相对并发用户数)、并发用户数。

  上面几个例子中所说的“并发用户”,实际是在线用户数。其实我更喜欢叫做相对并发用户数,因为这个词更容易让人感受到“压力”。相对并发用户数指的是,在一个时间段内,与服务器进行了交互、对服务器产生了压力的用户的数量。这个时间段,可以是,也可以是一个小时。而需求人员必须要描述的,也正是这个内容。

  而并发用户,主要是针对某一个操作进行测试,即多个用户同一时刻发起相同请求。可以用来验证是否存在并发逻辑上的处理问题,如线程不安全、死锁等问题;也可提供一些性能上的参考信息,比如1个用户需要1秒,而10个用户并发却需要30秒,那很可能会有问题,需要进行关注,因为10个用户请求排队处理也应该只需要10秒啊。但这种并发的测试,同实际压力下的用户体验关系不大。

  再回到相对并发这个概念上来,它与服务器的压力到底是什么关系呢?如果你理解了前面的所有内容,那么会知道这两者其实没有直接联系(当然了,同一个测试用例中,肯定是用户数越多压力越大)。也是说,你得到的这种性能需求,是无法知道服务器到底要承受多大压力的。

  那么如何开展性能测试?

  如何模拟压力

  既然我们知道了所谓的压力其实是从服务器视角来讲的,服务器要处理的事务才是压力,那么我们从这出发,来探寻一下性能测试需要的信息。依然用之前的小论坛为例,我们需要测试活跃用户为500人时,系统的性能是否能还能提供良好的用户感受。

  假设现在的活跃用户有50个人(或者通过另一个类似的系统来推算也行),平均每天总的发帖量是50条、浏览帖子500次,也是每人每天发一个帖子、浏览十个帖子(为了方便讲解,假设论坛只有这两个基本功能)。那么我们可以推算,活跃用户达到500时,每天的业务量也会成比例的增长,也是平均每天会产生500个新帖子、浏览帖子5000次。

  进一步分析数据,又发现。用户使用论坛的时间段非常集中,基本集中在中午11点到1点和晚上18点到20点。也是说每天的这些业务,实际是分布在4个小时中完成的。

  那我们的测试场景,是要用500个用户在4小时内完成“每人发一个帖子、浏览十个帖子”的工作量。

  注意上面的两处,“平均每天……”、“分布在4个小时……”。敏感的测试人员应该能发现,这个场景测的是平均压力,也是一个系统平常的使用压力,我喜欢称之为日常压力。

  显然,除了日常压力,系统还会有压力更大的使用场景,比如某天发生了一件重要的事情,那么用户会更加热烈的进行讨论。这个压力,我习惯叫做高峰期压力,需要专门设计一个测试场景。

  这个场景,需要哪些数据呢,我们依然可以从现有的数据进行分析。比如上面提到的是“平均每天总的发帖量……”,那么这次我们要查到过去高一日的业务量。“分布在4个小时”也需要进行相应的修改,比如查查历史分布图是否有更为集中的分布,或者用更简单通用的80-20原则,80%的工作在20%的时间内完成。根据这些数据可以再做适当的调整,设计出高峰期的测试场景。

  实际工作中可能还需要更多的测试场景,比如峰值压力场景。什么是峰值压力呢,比如一个银行网站,可能会由于发布一条重磅消息使访问量骤增,这个突发的压力也是性能测试人员需要考虑的。

  需要注意高峰期压力和峰值压力的区别,高峰期压力是指系统正常的、预期内压力的一个高峰。而峰值压力是指那些不在正常预期内的压力,可能几年才出现一次。

  这里只是举了个简单的例子,实际工作远比这复杂的多。需要哪些数据、如何获取,很可能要取得这些数据要花费很大的功夫。这其实涉及到了一个很重要的内容,用户模型和压力模型的建立,以后会有专门的文章进行讲述。

  为什么要花这么大的精力来收集这些信息呢?是因为只有通过这些有效的数据,才能准确的去模拟用户场景,准确的模拟压力,获取到更加真实的用户体验。只有这样,“不同的测试人员,测出相同的结果”才会有可能实现,而且结果都是准确有效的。

  要点回顾

  ● 后通过几个小问题来总结回顾一下:

  ● 你真的理解“并发用户”的意义么?

  ● 什么是用户视角和服务器视角?

  ● 什么是压力?

  ● 如何模拟预期压力?