作者: Yu, Qingguo Shen, Vivien Wu,Biyun
背景
性能测试用来保证产品发布后系统的性能满足用户需求,在软件质量保证中起着重要作用。Jmeter是一款广泛使用的性能测试工具,然而,在执行测试前,用户往往需要花费很多额外的精力和时间配置测试环境。同时在进行测试时,使用单台服务器模拟数以千计的用户对目标服务器产生负载,受限于服务器的性能可能无法满足需求,这就需要一个多台服务器的分布式的并发的测试环境。因此我们决定开发一个基于Jmeter和Jenkins的自动化性能测试的一站式解决方案ELP(Easy Load and Performance Testing, 简单的负载性能测试)来解决以上问题。
Jmeter是一款纯java开发并且开源的性能测试工具,其启动方式可以是GUI方式或者nonGUI方式,ELP中使用nonGUI方式启动Jmeter并执行分布式测试,启动命令为:jmeter -n -t testplan.jmx –R slave1,slave2。关于Jmeter的详细信息,请参阅附录[3]。
持续集成(CI,Continuous Integration)作为敏捷编程的基石现在已经被绝大多数的开发团队所广泛采用,自动化的持续集成测试也越来越受欢迎。我们目前使用的持续集成工具是Jenkins,我们的方案和Jenkins 服务器作了无缝的集成。关于Jenkins的详细信息,请参阅附录[1]和[2]。
概述
我们开发了一个Jenkins插件来完成整个性能测试过程,其中Jmeter Master启动在CI服务器上,负责分配和调度Jmeter Slave(启动在Traffic Server上)执行测试任务。关于如何开发Jenkins的插件,请参阅附录[5]。关于如何使用Jmeter进行分布式测试,请参阅附录[4]。ELP的设计需求如下:
1) 简洁的用户界面。
2) 自动完成测试环境的配置。
3) 支持通用的性能测试需求。
4) 调用Jmeter进行分布式测试。
5) 收集目标服务器的性能指标。
6) 根据性能指标数据生成图表报告。
除了以上功能需求,我们尽可能使用已有的资源,我们使用了已有的Jenkins插件Performance Plugin来展示测试结果。目前,这个方案能支持所有通用的性能测试,比如web应用测试,数据库测试等。
下图是ELP的用户界面,用户只需要填写相关配置信息。因为需要解决防火墙问题,因此需要用户输入登录远程服务器的用户名和密码来建立SSH隧道,其中密码经过加密后存储到磁盘。
Figure 1
下图是ELP执行测试后收集到目标服务器性能指标的图形化报告。