性能测试模拟真实负载是比较困难的。性能测试与真实环境的对比,通常有这样一些点:

  1.客户端展现。如果是Web应用,客户端使用浏览器展现的,则一些的压力测试工具都不具备展现的功能,也是说,只是模拟发送http请求到接收请求,而浏览器对html内容进行渲染的时间,是无法模拟的,这很可能是真实环境体验现测试结果不相同的地方。客户端展现要与真实环境相同,必须单独进行前端性能的分析。

  2.网络速率。性能测试时通常在局域网环境中,而真实的网络用户来自于甚至世界各地,其网络情况不一致,而且有很大的偶然性。除了对压测工具所在的机器进行一些网络限速之外,很难完全模拟到真实的网络负载情况。

  3.软硬件配置。软件配置比较容易做到与真实环境一致,但硬件配置通常比较难做到。像线上使用的一些负载均衡机器或者路由设备比较昂贵,不可能在测试环境采用完全一样的拓扑和集群,当然这些对测试结果影响通常可以分析到,不会有很大偏差,但这是一个无法完全与线上保持相同的点。

  4.数据分布。数据分布要做到与线上一致有3个难点,1是对新应用而言,根本没有线上数据,因此无从模拟,只能手动造数据,所以无法跟线上一致;2是即使是老的功能,线上数据因为商业机密等原因也未必能直接拿来作为测试数据;3是用户的访问路径,这点很难与线上做到一致。功能测试尚不能覆盖掉所有的用户操作路径,何况性能测试?

  以上四点,都是问题。因此性能测试很多情况下只能作为参考,用来发现明显的性能问题。如果要做到100的准确,还是要做线上的即时监控才行。

  一般性能测试我会考虑4个方面,1、系统本身性能,2、网络条件,3、软件环境 4、硬件条件。

  设计性能测试方案时,首先确认,你这个方案主要的目标是什么,然后会有根据的进行测试设计了。

  例如, 有个性能需求是:测试系统某个功能的大数据量(数据量级别)的查询速度<3s,或者多用户(100用户)同时查询时的查询速度<3s。 其实这个需求的条件是不明确的。 这个只有条件1, 对于2、3、4条件都没有明确的规定。 那么这个需要你去补齐这些条件数据。

  条件4:服务器硬件条件,这个在购买服务器时,对于硬件指标能达到什么级别,都会有一个比较明确的范围的。如:硬件内存可以满足多少事务处理,处理事务的速度等等

  条件3:服务器软件环境,如中间件,数据库等,是否有连接限制,数据库本身性能能否满足足够的大数据量存储等。

  条件2:服务器的网络上下行速率如何,客户端的网络上下行速率又如何,网络条件是很能影响测试结果的一个条件。

  那么,对于上面的性能需求,因为你需要验证的是系统本身的性能是否达到要求。那么条件2、3、4是可变的。

  简单的一个方案是:

          条件2     条件3   条件4
  1        A        C        E
  2        B        D        F
  3        A        D        F
  4        B        C        E
  5        A        D        E
  6        B        C        F

  满足上面的一行条件,然后去验证 上面的性能需求是否达到要求,并且还要延伸做的是,在该条件下,能该性能指标能大能达到什么数值。

  然后对结果进行对比分析, 其实性能测试的方案设计及过程并不难,难的是结果的对比分析,这个需要靠经验和对性能指标的敏感度才能很好的体现。

  以此类推,对于其他单个条件的,多个条件的性能测试,同样可以按照这个尝试。

  当然,性能本身是一个受很多因素影响的,简单的分类肯定不能满足实际的复杂程度,

  但是个人觉得,我们把实际复杂的场景合理的简单化,其实对系统的发展是有帮助的