apache jMeter 是一个开源的工具,用于量度应用程序的性能。它本来是用于测试web 应用程序的,但是由于jMeter的扩展的功能,于是就能够支持其他测试功能啦。
Apache jMeter 可以测试静态资源,动态资源,动态web应用的性能。
它可以模拟高负载的一个服务器,服务器集群,大量的用户,网络等等,用于测试应用的强度;通过不同加载类型,全面分析软件性能。
特点如下
原文链接:http://jmeter.apache.org/index.html
1.0 Overview
当你使用jMeter时,通常都会遵循如下处理过程。
1.0.1 构建测试计划
你可以在GUI Mode下运行jMeter。然后从浏览器或原生应用中录制应用,步骤:file -> Template... ->record
当然你也可以手动的创建,但是需要确保你知道测试计划要素的每一个概念
1.0.2 测试运行
准备好你的测试计划后,你就可以开始负载测试了。第一步就需要配置jmeter运行的injectors(在其他的负载测试工具里面也是需要配置这些的):
如果你准备好了这些就可以在命令行模式(Non-GUI Mode)里开始负载测试啦
注意:负载测试是不能运行在GUI Mode下的
使用Non GUI Mode你可以生成一个CVS或XML文件,让jMeter在负载测试的最后生成一个HTML报告。jMeter默认情况下会提供一个负载测试的总结。当然你可以使用Backend Listener来获取一个实时动态的结果。
1.0.3 测试分析
负载测试完成后,你可以使用一个html报告来分析你的负载测试。
1.0.4 开始使用
安装
如果你想要做数据库测试(JDBC testing),那么你需要配置JDBC驱动。jMeter并不自带JDBC驱动。
jMeter包含了JMS API的jar包,但是并不包含JMS客户端的执行,如果你想要做JMS测试,你需要从JMS供应商那里下载相应的jar包。
建立测试计划
jmeter版本需要与对应的java版本一致,具体可参考原文。
原文链接:http://jmeter.apache.org/usermanual/get-started.html
1.2 可选项
用于扩展jMeter。
1.2.1 java编译器
如果你是想要扩展jMeter或者是开发jMeter插件,那么你需要完整的JDK 8 或者更高。
1.2.2 SAX XML解析器
jMeter自带Apache的Xerces XML解析器。你可以通过这个可选项自行配置不同的XML解析器,但是这就需要你在jMeter的classpath路径里面加入第三方的解析器,并更新jMeter.properties文件。
1.2.3 支持邮箱
jMeter可以扩展邮箱,用来发送测试结果。它具有POP3(S)/IMAP(S)实例和SMTP(S)实例。
1.2.4 SSL加密
使用SSL加密(https)来测试web服务器,需要给jMeter提供SSL,所需要的java版本也需要在1.4以上。如果你的java版本不支持SSL,那么你可以加入外部工具来执行,包括引入加密包,该加package需要jMeter的classpath路径上。当然你还需要更新system.properties,用于注册SSL供应商。
jMeter HTTP 默认是在协议层TLS。这个是可以在jMeter的属性(jmeter.properties或者user.properties里面的https.default.protocol)里面配置的。
jMeter的http实例接受所有的证书,不管证书是否受信任,是否过期等。
如果服务器需要一个客户端的证书,......
你也可以使用SSL Manager来更好的控制认证。
这部分详见原文吧。
1.2.5 JDBC driver
如果你想要做JDBC测试的话,你需要增加你的数据库驱动到jMeter的classpath里面。需要确保文件是jar包而不是zip包。
1.2.6 JMS driver
jMeter目前包含了Apache Gernoimo的JMS API,所以你需要从JMS供应商那里增加相应的JMS客户端执行jar包
1.2.7 ActiveMQ JMS库
你需要增加activemq-all -X.X.X.jar 到你的classpath里面。详情参考原文。
1.3 安装
1.4 运行
windows系统,点击bin目录下的jMeter.bat,Unix系统点击jMeter文件,jMeter的GUI模式就会出现。
GUI模式只能被用在创建测试脚本,负载测试必须使用非GUI模式。
bin目录下的一些额外脚本(windows脚本文件需要运行在win2000以上):
LAST关键字是用在jmeter-n.cmd,jmeter-t.cmd和jmeter-n-r.cmd中,意思是已经运行的上一个测试计划。
环境变量JVM_ARG可以用来重写jmeter.bat的JVM设置的。例如:
工作在Linux和Unix系统上的文件参考原文。 1.4.1 jMeter的classpath
jMeter会自动的从以下工作路径的jar包中找到一些类:
如果你想开发新的jMeter元件,那么你应该将他们打包成jar包并且复制到lib/ext目录下。jMeter会自动找到该目录下的原件。不要将公共jar包和与插件有关的依赖jar包放到该目录下,它只能用来放jMeter的元件和插件。
如果你不想要放置jMeter插件包到lib/ext目录下那么你可以在jmeter.properties中定义search_paths.
工具和依赖包等等这些文件可以放在lib目录下。并且在user.classpath或者jmeter.properties中的plugin_dependency_paths中定义一下。
其它的jar包(像JDBC,JMS implementation和其他的支持库)应该放置在lib目录下而不是lib/ext目录下,或者增加一个user.classpath.
注意,jmeter只能找得到.jar文件,而不是.zip文件。
你可以在$JAVA_HOME/jre/lib/ext下安装utility工具,或者你可以在jmeter.properties中设置user.classpath。
注意,设置的classpath环境变量可能会没有用,因为jMeter是由java-jar启动的,java命令默认是忽略classpath变量的,这个时候你需要在-jar后面加上 -classpath或者-cp。这个是所有的java程序都会发生的,而不仅仅是JMeter。
1.4.2 从模板中创建测试计划
你可以从已有的模板去创建一个新的测试计划。
…………
1.4.3 开启了代理后,如何使用jMeter
如果你正在测试具有防火墙或者代理服务器的项目,你可能需要提供防火墙/代理的主机名端口号给jMeter。具体的做法是运行jmeter.bat用命令行来设置一些参数,如下
注意,你的设置可能对系统中的其他人可见。
proxy host 和 port提供后,jmeter将会把值设置在下面的系统属性中:
如果一个非代理主机被提供的话,那么jMeter将值设置到以下系统属性中:
如果你不希望同时设置http和https代理的话,你可以再system.properties中定义相关属性,而不是使用命令行模式。
代理是指可以定义在一个测试计划中,使用http request default配置,或者http request实例元素中。
注意:JMeter也有它自己的内置的代理服务器(HTTP(S) Test Script Recorder)。这个只用在HTTP或者HTTPS浏览器对话中。
1.4.4 命令行模式
1.4.5 服务器模式
对于分布式的测试,服务器模式下,可以远程节点上运行jMeter,并从GUI图形界面控制jMeter。你也可以使用非GUI模式去运行远程测试。在每一个服务器主机上运行jmeter-sever.bat,就可以开启服务器端。
运行脚本时也可以自行定义防火墙/服务器代理端口的信息,如下:
如果你想在某个的测试结束后就退出服务器,那么你可以定义jMeter的属性server.exitaftertest = true.
在非GUI模式下从客户端运行测试,使用如下命令:
如果属性 jmeterengine.remote.system.exit被设置为true(默认是false),那么jMeter将会在测试运行到最后停止RMI时运行System.exit(0)。
1.4.6 通过命令行重写属性
java系统属性和jMeter属性可以通过命令行直接重写(不是通过修改jmeter.properties). 参考如下可选项:
命令行属性会在启动之前,打印系统开始之后生效。
1.4.7 打印日志和报错信息
3.2版本后,jMeter的打印并不是通过属性(例如:jmeter.properties)配置。它并是通过Apache Log4j 2配置文件来设置的(log4j2.xml) jMeter和一些插件都必须使用SLF4J库。
一个log4j2.xml的例子,见原文……
1.4.8 命令行的可选项
见原文……
1.4.9 关闭非GUI模式
2.5.1版本之前,jMeter使用System.exit()来退出命令行模式的测试。但是这个会导致一些问题,jMeter正常完成测试时,就不再触发System.exit()。并且一些严重错误也会触发System.exit()。