性能基准测试是一项系统性能测量工作,根据目前的项目实际,在这里做了一些新的定义。基准测试在项目中与一般性能测试工作的主要区别在于其更短的回归周期与直观的趋势分析,并同时为混合业务性能场景的脚本线程配比计算提供依据。一般的性能测试往往只在版本计划中或遭遇系统性能问题时进行,而基准测试在日常中进行,特别是在发生重大变更事件(例如:系统配置、环境发生变更)之前与之后的测试,让测试结果数据与一般的性能测试结果数据更有实质上的参考意义。因为,当为系统创建性能基准后,基准数据作为性能指标的参照物,可用于判断任意一项变更为系统带来的具体影响。例如:某项配置优化后能够为系统带来的性能提升是多少、系统某项操作历史数据的增长与性能响应的关系、系统环境的变更对系统性能产生的影响。而且实施该项工作并不复杂。

基准测试数据的实际用途

1)         了解系统性能基准作为参照物(性能问题发生后的测试很难了解系统性能基准)

2)         识别系统或环境的配置变更对性能响应带来的影响

3)         为系统优化前后的性能提升/下降提供参考指标

4)         观察系统的整体性能趋势与拐点发生,及早识别系统性能风险

性能基准自动化测试与一般性能测试的主要区别

1)         测试周期:基准测试每天定时自动化执行,性能测试需要事件驱动执行。

2)         测试脚本:基准测试的性能测试脚本仅仅包含所关注业务的必须的HTTP请求,不进行用户行为模拟;性能测试的测试脚本包含关键业务的所有上下文请求,并进行用户行为的模拟。

3)         测试策略:基准测试策略固定,几乎不允许修改(否则将与过去所有历史数据发生断层);性能测试需要根据不断变化的性能需求进行修改。

4)         脚本维护:基准测试的测试脚本仅在访问链接发生变更时维护,或者POST请求参数发生变更时维护,GET请求几乎不需要维护;性能测试脚本在每轮测试中一般都需要重新开发。

5)         结果用途:基准测试结果数据仅用于作为系统性能下降/提升的衡量指标,性能测试结果脚本可用于预测用户性能体验、系统性能风险。

性能基准测试自动化测试的实施

1)         性能基准数据的获取

利用Apache的开源项目Jmeter测试工具,使用Jmeter针对关注的系统性能点进行脚本开发,如下图,线程在事务控制器“用户登录”内进行系统登录,循环控制器内装载了各个性能关注点的HTTP请求:

性能基准自动化测试_jmeter

在测试计划中维护性能基准测试环境信息与测试策略,包括:主机、端口、线程数、加载速度、迭代次数等。并采用50线程执行性能测试脚本,每条线程执行10次迭代,每个性能关注点取得500个响应样本,从而性能响应数据,包括:平均值、标准差、事务通过情况、错误内容。

性能基准自动化测试_自动化_02

2)         计划任务的定时执行

利用Apache开源项目Ant每日中午定时执行基准测试,自动保存性能测试结果,生成当日的性能基准测试结果数据,每日基准测试报告如下图:

性能基准自动化测试_性能测试_03

假定性能关注点为5个,采用以上测试策略,在系统性能响应理想的情况下,整个测试过程时间可在3分钟内完成,最后生成一定数量的结果文件,最好有30天以上

性能基准自动化测试_小强测试品牌_04

3)         数据的整合与趋势分析

当取得足够量的基准测试结果以后(例如:30天、60天、90天),即可对第二节中所提到的每天的测试结果数据进行整合,生成报表的形式,直观的了解过去时间内,系统的性能拐点发生日期,对拐点发生当日的变更事件进行跟踪。报表所体现的内容在使用summary中的平均响应时间、事务通过率作为系统整体性能响应考量指标。不把每个事务都展现到报表中,除非:

  a)       系统整体事务通过率无法达到95%;

  b)       系统整体响应时间平均值大于2秒,最高值大于10秒;

下面是用perl写了个程序对html文件进行分析的输出,每个基准测试时间后对应了系统整体性能状况(事务的通过率,以及响应时间的平均、最快、最大值),最后根据预定义的阈值给出结果,为了更好的说明问题,这里把“平均响应时间大于5秒”判断为性能下降,最后一列的“↘”表示了3月31日出现了性能拐点。

性能基准自动化测试_小强测试品牌_05

性能基准自动化测试_测试帮日记_06