4.3制定量化指标

  在性能测试报告中,系统性能状况会体现为一堆测试指标及对应的数值。被测目标不同,指标集合也不同,针对本文测试模型,可以制定以下简单的指标(更加细化的指标可参阅相关文档)。

  功能层:事务平均响应时间、每秒完成的事务数、成功的事务数、失败的事务数。

  中间件:JVM内存使用情况、中间件队列、线程池利用率。

  数据库:队列长度、占资源的SQL、等待时间、共享池内存使用率。

  操作系统:CPU平均利用率、CPU队列、内存利用率、磁盘IO。

  有了指标,我们还需要根据测试目标,设定其对应的数值范围。例如根据产品经理要求,在并发一千人访问的情况下,系统平均一次事务响应时间不超过5秒,则可以设定响应时间的数值范围是小于5秒成功,大于5秒失败。还可以指定CPU利用率、JVM内存利用率等性能指标的数值范围(表3),需要说明的是,不同测试工具支持的指标集是不同的,可利用多个测试工具进行协同收集。

  表3 性能指标数值范围

  指标项目 测试场景 合理指标值

  平均CPU利用率 并发一千用户 < 85%

  平均JVM利用率 并发一千用户 < 80%

  量化的性能指标能够给系统带来优化的目标,当我们说性能符合预期,指的是所有指标的值都在理想范围以内,那么如何制定正确的数值范围呢,这个必须靠经验和系统历史数据来进行分析。前者是类比同类型系统的性能指标,后者需要挖掘运维数据,包括用户访问峰值,每秒高事务处理数等。
  4.4制定测试用例与场景

  性能测试用例是对整理过的业务流程进行再分解,描述其成为可测试的功能点,结合性能指标转换为测试执行代码。本文测试模型中,用户登录的用例简要描写如下(省略掉用例前置条件,例如系统配置和部署信息):

  表4 测试用例1

  登录测试用例

  1:用户打开网站首页,页面应该正常展现,超过60秒则算失败。

  2:用户输入账号和密码,点击登录按钮,等待系统提示成功或失败,如果等待超过60秒,则算登录失败。

  测试用例1中,用户与系统有两次交互(打开网址和点击登录按钮),需分别统计每一次交互的等待时间。考虑到用户实际操作的话,会有一定的停顿,我们可在脚本中添加思考时间来模拟(固定或随机等待时间)。不要小看这个设置,在用户量大的情况下,对系统施加的压力是完全不同的,然后在在统计的时候,去掉这部分思考时间。

  性能测试用例执行需对应的场景,用于模拟系统实际运行状况。全面的系统测试在理论上是不可行的,所以设计测试场景的时候,主要定位是用户典型的应用场景。可粗略划分为两类:功能点测试场景和复杂业务测试场景。前者的目标主要是检验系统某个功能点的并发能力,后者更加贴近系统实际运行情况。对于测试模型的用户登录功能,设计功能点测试场景1如下:

  表5 测试场景1

  并发用户数:总共300,起始数量100,每1秒钟增加10个用户。

  运行方式:每一个并发用户循环执行登录测试用例,持续15分钟。

  考虑到业务流程可以交叉进行,例如测试模型中数据库批处理与用户操作混搭,我们设计一个复杂的测试场景如表6所示:

  表6 测试场景2

  并发用户数:总共300,起始数量100,每1秒钟增加10个用户。

  运行方式:数据库启动批处理清算,同时并发200个用户进行循环登录,另外100个用户随机浏览商品。