Jmeter工具介绍
Apache Jmeter 是一款开源的基于Java的压力测试工具,它虽然没有像LR这样的企业级软件功能强大,但是Jmeter基本满足了测试人员在工作中的基本需要。
- 特点:
- 能够对HTTP、FTP服务器进行压力和性能测试,也能对任何数据库进行同样的测试(通过JDBC)
- 同时支持单线程和多线程并发的操作
- Jmeter具有很强的扩展性,可以配合多种开发工具或测试工具,因为是纯Java的,增强了其可移植性
Jmeter安装及环境配置
Jmeter的安装非常的便捷,解压包同时支持Windows和Linux的使用。安装之前首先需要你的环境中有JDK。
Jmeter的下载地址:http://jmeter.apache.org/download_jmeter.cgi
环境配置:Windows中,只需要在计算机的环境变量中增加[;%JMETER_HOME%\bin],即可。
Windows中只需运行压缩包中bin目录下的jmeter.bat
Linux中,运行压缩包中的jmeter.sh。 --that's it !
编写Jmeter脚本
本次列举的实例是在Linux服务器中进行相关的压力测试,但是我们需要在Windows中先创建好需要的脚本,然后导入到Linux服务器中。因为jmeter脚本无论在Windows还是Linux中都是互通的,能够直接运行。
- 屡一下本次测试工作的大体思路:
1.将Windows和Linux中的jmeter都安装配置好;
2.Windows下编写jmeter脚本;
3.Linux中运行脚本;
4.Windows中查看(导出的)结果;
5.记录、总结;
首先看一下本次示例的脚本中都涉及到什么,都要注意些什么问题:
请求中对应的解释:
1.域名和token是本次操作中添加的全局定量,域名也就是服务器名称/IP,也可以放在HTTP请求页面,端口号除特殊的之外可以不填;而token不是都会用到,本次因为涉及到token,所以添加了。
2.在HTTP请求中,因为上传操作使用的参数化,所以添加了相应的插件:CSV Data Set Config,这个我们下面再讲解。
3.jmeter常用的两个插件:查看结果树、聚合报告,这两个插件可以直观的看到请求的成功与否,以及请求操作的相关数据。
4.上传操作,因此使用post方式; 编码方式一般都会选择 utf-8。
5.这是本次示例使用到的接口路径,工作涉及的相关接口可自己把控。
6.这里就是本次需要上传的文件路径,将其参数化了。
关于参数化:
1.这里是填写的Linux环境下的路径,在Windows中测试脚本时,还需要填写对应的路径才行。
2.编码方式,这里就不再多说。
(注:参数化相应的文件数据格式,跳行编写就行了,即每条数据占一行。)
关于脚本队列:
这部分可以先设定一个初始值,在Linux下是能够进行修改的。
关于“查看结果树”:
这里需要注意一点,将“仅日志错误”给勾选上,这样导出的测试结果数据才不会特别大,不然打开时会很慢。
到这里,关于编写脚本的大体步骤和注意事项都列举出来了。接下来就是运行脚本,整理结果啦。
脚本导入Linux服务器
关于导入脚本至Linux服务器,这里需要注意一些事项:
1.导入的脚本只需要在压力机上有一份即可,但是参数化文件必须在每个测试机(包括压力机)上都存在。关于什么是压力机、测试机,这些在下文中会逐渐讲到。
2.导入的脚本所涉及的路径,一定和脚本中的路径相符合,不然在测试工作无法进行。
3.另外,测试的机器需要注意host的配置(有些会涉及),以及jmeter内存溢出这种问题的关注。
关于压测服务器:
本次选取了4台服务器用于压测,其中一台作为压力机,也就是控制其它几台机器一起运行脚本。所以这就需要配置jmeter的配置文件:jmeter.properties
在配置文件中找到如图所示的远程ip设置,添加相应的服务器ip即可。
关于host配置:
这部分的工作,其实是为了均衡服务器的承载量,避免大量的操作执行在单一的一台服务器上,造成服务器过载而挂掉。此部分配置只需要在Linux下的host中添加配置即可。
执行测试
在Linux中执行脚本就比较简单了,在相应的目录下执行脚本,并将所需的结果保存为指定的文件即可,参考命令:
./jmeter -n -t 脚本文件(.jmx) -r -l 结果文件(.jtl)
-r : 指的是运行所有机器,若不写,只会运行当前压力机;
(注:测试时有不同并发的场景,这些需要自己在脚本文件中进行修改;所以在结果文件的命名上,建议使用时间节点来命名,便于之后统计结果时区分。)
测试结果处理
当所有场景都测试完成之后,建议将结果文件统一放在一个文件夹中,然后一并打包,导出。
总结
这里就不再分析讲述本次的测试结果了,在实际情况中,还需要我们酌情去统计和分析测试结果。在聚合报告中,主要关注的项还应是:平均响应时间、90%的响应时间、错误率以及TPS(吞吐量)等。
————————
欢迎大家讨论并指正不合理之处!