作者:石俊娟
摘要:
压力性能测试是软件测试当中非常重要的一部分,也是比较复杂,耗时的一个测试类型。如何提高测试效率,减少人工出错的可能性是本文想要解决的问题。该解决方案利用了数理统计的方法,巧妙的解决了性能测试数据分析的问题,并且提供了一套完整的持续集成方案。
性能测试是服务器端应用软件质量的重要指标。
在我们的项目中,经常需要做性能压力测试以收集性能数据,判断服务器端应用的性能是否维持原有的标准。我们会对应用施以不同的压力,收集不同压力下的各项性能指标,如response time, CPU, memory等数据。测试结束后,我们要把这些数据跟我们的基线进行比较,来得到性能是否有变化的结论。
性能压力测试通常都需要持续一定的时间,另外由于测试数据的波动性,通常要做好几轮的测试。测试结束后,人工的比较数据不仅耗费时间,也容易出错。所以经常一次lnp testing做下来都要至少半天时间。如果发现了问题,还需要troubleshooting,修改了之后继续进行多轮的测试。所以整个周期是比较长的。
在软件迭代如此快速的今天,我们通过把功能测试自动化,已经做到了持续性的测试,可以快速反馈软件的功能问题。那我们是否可以通过自动化整个lnp testing的流程,提高效率,减少人工的差错呢?也就是说,是否能够实现持续性的性能压力测试,尽快反馈软件的性能问题呢?
要实现持续性能压力测试,需要满足三个目标:1)自动获取最新的代码构建,部署应用,并进行压测。2)自动获取压测期间的各项性能数据。3)把收集到的测试数据与性能基线自动地进行比较分析,得出性能是否有变化的结论。
基本的构想是通过Jenkins来构建,部署,触发测试。把测试结果发到一个中央的service,把结果保存到数据库。然后再自动进行数据的比较,再把最后的比较结果通过email发送给用户。
因为数据的波动性,我们没有办法通过绝对值的不同或者某种比例来判断性能的异常,因为这样无法适应不同应用,不同压力下的数据情况。所以我们要找到一种更加科学的方法来进行数据的比较。这里我们就可以利用数据分析,来找到合适的数据模型,然后用数理统计的方法来进行比较。
下面介绍以下具体的实现方式:
1)自动获取最新的代码构建,部署应用,并进行压测。
为了实现自动获取和构建,使用Jenkins的