1. jmeter工具介绍
jmeter即apache jmeter,是由apache组织基于java开发的压力测试工具。jmeter诞生的目的主要就是用于压力测试,但也可用于普通功能测试,通过创建带有断言的脚本,可验证应用程序接口返回的结果与预期结果是否符合。
由于jmeter是基于java开发的,因此在使用jmeter前需要先部署好java环境,包括安装jdk、配置环境变量。java环境部署好后,就可以从官网下载jmeter了,依据jmeter版本的不同,对jdk版本也是有相应要求的,这里需要注意。jmeter版本分为windows版本和linux版本,根据测试环境进行版本选择,windows版本通常在web类型的应用上压测使用较多,而后端服务的压测通常使用linux版本直接在服务器上进行压测。
2. jmeter性能压测
jmeter使用时可以使用gui模式,也可以使用命令行模式,二者原理是一样的,仅是使用场景不同。
2.1. jmeter gui模式
gui模式即图形界面模式,jmeter通过提供gui模式,可以更方便的进行操作,更直观的查看测试结果。gui模式通常在jmeter的bin目录下执行jmeter.bat即可打开,操作界面如下:
在左侧操作栏中可新建测试计划,测试计划用来描述一个性能测试(或功能测试,jmeter通常是用来进行性能测试的),测试计划就是一个管理单元,一个jmeter测试脚本对应一个测试计划。测试计划中可以包含本次测试的所有相关功能,可能包括线程组、取样器、监听器等,其中有一些功能是必须的,有一些是可选的,可根据需求进行组合选取。具体的功能使用将在实际应用场景一节中进行说明。
2.2. jmeter命令行模式
jmeter命令行模式通常在linux服务器中用的比较多,应用程序部署的服务器一般都是linux系统,可在与之连通的其它linux系统上搭建性能测试服务,通过jmeter进行性能测试。jmeter支持手动创建测试项,也支持通过导入的方式直接创建测试项,这就能够比较方便的用命令行创建并执行测试计划,需要修改测试内容时,直接修改配置文件即可。命令行jmeter的启动,通常是在jmeter的bin目录下执行./jmeter命令,后面指定要加载的配置文件。
2.3. 实际应用场景
下面以实际业务压测为例,说明jmeter在性能测试中的使用。这里为了比较直观的说明jmeter在实际业务中的应用,使用的是jmeter的gui模式。为了保证不关联到真实的业务,这里暂将所测试的业务命名为“业务A”。另外,由于jmeter本身功能比较强大,这里仅以业务压测中用到的功能进行说明,其它未涉及到的业务,可自行进行学习。
(1)在测试计划中创建“业务A测试线程组”。
(2)取样器错误后执行的动作选择“继续”,线程数选择10,Ramp-Up时间选择1(秒),循环次数选择10。即在1秒之内启动10个线程调用业务接口,如此循环10次,测试过程中若出现接口运行错误或异常,继续执行接下来的线程,不影响其它线程执行。根据压测情况,线程数、Ramp-Up时间、循环次数可依次调整,知道测出最大负载情况。
(3)在线程组下创建“HTTP请求”,设置要测试的应用程序所在的服务器、所使用的通信协议、请求端口号,请求方式、请求url、请求参数等。线程组中线程就是通过这些设置,在不同线程中调用应用程序接口的。
(4)在HTTP信息头管理器中设置请求头信息。
(5)在HTTP授权管理器中设置权限信息,若测试环境未设置权限信息,可不进行设置。
(6)设置CSV数据文件。性能测试通常要模拟短时间内不同用户同时对接口进行操作的场景,因此接口的入参通常是不同的,那么不同的入参数据就可以提前生成在文件中,jmeter直接从文件中读取参数来作为调用接口的入参。
(7)在响应断言中设置判断请求是否执行成功的判断,在业务A的测试中,设置断言字段为“响应文本”,模式匹配规则为“包括”,测试模式为“code”:1。即断言的内容为响应数据,若响应数据中包含了“code”:1的内容,则认为接口执行是成功的,否则认为是失败的。
(8)上述设置均设置完成后,可以点击运行按钮开始执行测试计划了。测试结果可在聚合报告中进行查看,性能测试比较关心的数据一般包括异常率、吞吐量等,若涉及到对报文的处理,还会关心每秒接收、发送的数据量。
(9)聚合报告展示了综合的性能测试情况,若想要查看测试过程中每个线程调用接口的情况,可查看结果树。结果数据展示了本次性能测试中每个接口的具体调用情况,包括取样器结果、请求数据、响应数据等,也能从结果列表中比较直观的看出哪些接口调用成功了,哪些接口调用失败了。
(10)性能测试除了关心吞吐量外,对资源使用情况通常也比较关注,如cpu、内存、io等,jmeter支持通过PerfMon Metrics Collector插件监控资源使用情况。
3. 总结
本文内容介绍了jmeter的不同模式,并结合实际性能测试讲解了jmeter在性能测试中的应用。jmeter本身功能很强大,特别是对性能测试的支持很完善,本文仅针对普通的性能测试举例进行了讲解,没有完全覆盖jmeter的所有功能,需要的同学可继续探索。