1、概念:
性能测试是通过自动化的测试工具模拟多种正常峰值及负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是当负载逐渐增加时,测试系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获取系统能提供的最大服务级别的测试。如下图所示为一个典型的性能测试曲线:
![](http://www.softtest.com/uploadfile/2018/0626/20180626050855852.jpg)
2、目的:
性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件,最后起到优化系统的目的。性能测试包括以下几个方面:
A、评估系统的能力:测试中得到的负荷和响应时长数据可以被用于验证所计划的模型的能力,并帮助做出决策;
B、识别体系中的弱点:受控的负荷可以被增加到一个极端的水平并突破它,从而修复体系的瓶颈或薄弱的地方;
C、系统调优:重复运行测试,验证调整系统的活动是否得到了预期的结果,从而改进性能;
D、检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中隐含的问题或冲突;
E、验证稳定性(Resilience)、可靠性(Reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
3、常见分类:
性能测试包括负载测试、强度测试和容量测试等。
A、负载测试(load testing):是指通过测试系统在资源负荷情况下的表现,来发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。目标是确认并确保系统在超出最大预期工作量的情况下仍可以正常运行。此外,负载测试还要评估性能特征,如响应时长、事务处理速率和其他与时间相关的性能指标。
B、压力测试(stress testing):通过确认一个系统的瓶颈或者不能接收的性能点,来获取系统能提供的最大服务级别的测试。
C、容量测试(volume testing):容量测试确认系统可处理同时在线的最大用户数。
4、常见指标:
对于B/S(brower/server)架构的软件,一般会关注如下web服务器性能指标:
![](http://www.softtest.com/uploadfile/2018/0626/20180626050929716.jpg)
对于C/S(client/server)架构的程序,由于软件后台通常为数据库,所以更注重数据库的性能指标。
A、User Connections:用户连接数,也就是数据库的连接数量
B、Number of Deadlocks:数据库死锁
C、Butter Cache Hit:数据库Cache的命中情况
注意:在实际的测试中,不仅仅限于以上的点,还要根据实际情况选择,例如cpu占用率、数据库连接池等。
5、基本流程:
A、明确性能测试需求:需求应该明确测试涉及的功能点。
B、制定性能测试方案:性能测试方案应该详尽地描述如何进行性能测试,其中应该至少包括:测试背景、测试目的、测试范围、测试进入条件、测试退出条件、测试指标要求、测试策略、测试时机、测试风险和测试资源。
C、编写测试用例
D、执行性能测试案例
E、分析测试结果
F、生成性能测试报告:一份性能测试报告,至少包含如下内容:
(1)测试基本信息:包含测试目的、报告目标读者、术语定义、参考资料
(2)测试环境描述:包含服务器软/硬件环境、网络环境、测试工具、测试人员
(3)性能测试案例执行分析:需要详细描述每个测试案例的执行情况,以及对应的测试结果分析
(4)测试结果综合分析及建议:对本次性能测试做综合分析,并给出测试结论和改进建议
(5)测试经验总结
6、开源web性能测试
是否应该选择开源性能测试工具?首先要明确所在组织的测试策略,其次还要考虑组织的实现情况。回答以下的几个问题,有助于做出正确的判断:
A、测试部门是否拥有非常充足的预算来购置商业性能测试工具?
B、测试人员是否拥有基础的编程经验?
C、测试人员是否有良好的英语阅读能力?
7、开源性能测试的优势:
A、更少的IT投入;
B、更灵活的定制工具;
C、更快、更便捷的服务支持;
D、更灵活的测试框架,避免绑定IT服务供应商