JMeter4.0的单机压测和集群压测简介

1 简介
JMeter是Apache旗下纯java开发的免费轻量级性能测试工具,其最新的4.0版本支持java8和java9,有图形化界面和命令行两种压测方式,此两种方式都基于jmx脚本(XML格式)进行,由于jmeter界面本身消耗的资源比较大,通常采用GUI可视化的方式创建jmx脚本文件后,再使用命令行的方式执行压测。

2 单机压测方式
2.1 安装Jmeter4.0
Mac下Jmeter4.0的安装:
1)下载JMeter4.0: http://mirrors.hust.edu.cn/apache//jmeter/binaries/apache-jmeter-4.0.zip 在文件夹中解压缩
2)进入bin文件夹,执行 ./jmeter 启动GUI界面, 启动后如图所示:


2.2 创建JMX压测脚本
1)在当前默认页面会在内存中自动创建一个Test Plan, 修改其名字为 stresstest1,点击保存按钮,存为stresstest1.jmx文件,如下图所示

2)增加一个线程组
右键点击左侧边栏中的stresstest1, 在弹出菜单中选择Add->Threads(Users)->Thread Group, 创建一个线程组,如下图所示:
在右边栏的线程组详情页,修改以下四个属性:
Number of Threads(Users): 并发线程(用户)数,设置为3个
Loop Count:循环测试次数,勾选Forever,无限循环
Scheduler: 定时器,勾选
Duration(seconds):定时器的持续时间,设置为60秒。
这样就设定了压测的基本参数:3个用户并发测试60秒,次数不限。

3)增加一个Http取样器
右键点击左侧边栏的Thread Group,在弹出菜单中选择Add->Sampler->Http Request, 创建一个Http取样器:
设置Http取样器的属性,如下图所示:
填写一个远程测试的Http URL, 包括协议、域名、端口号、Http方法、 路径、内容编码方式等六个属性,此处填写一个简单的GET方法做测试,jmeter将会向该http方法发送数包。

4) 添加一个结果验证断言
右键点击左侧边栏的Thread Group,在弹出菜单中选择Add->Assertions->Response Assertion, 如下图所示:
设置对每次Http测试返回结果的断言验证配置:
配置每次测试需要验证的地方,
Field to Test 选择 Response Code(Http的应答码)
Patern Matching Results 选择 Contains(包含)
Patterns to Test 添加一个项(下面点击Add按钮),填写需要验证的http应答码为200。

5)添加一个测试结果汇总监听器
右键点击左侧边栏的Thread Group,在弹出菜单中选择Add->Listener->Summary Report
Summary Report 负责汇总测试的数据,包括总测试次数,当前并发数、错误率、当前字节数等等。

2.3 命令控制单机压测
在jmx脚本创建好以后,实际上就可以使用GUI界面进行压测,但由于在压测的时候需要占用大量的CPU资源,GUI有时候会陷入假死状态,因此推荐采用命令行的方式执行jmx脚本进行压力测试。控制命令如下:
jmeter -n -t stresstest1.jmx -l test1_result.cvs -j test1_log.log
命令解释:
-n 已命令行形式运行jmeter
-t jmx文件路径,不写全路径的时候表示在当前文件夹下,
-l 测试结果导入的文件,在测试时会将每一个测试结果写入该文件,不写全路径的时候表示在当前文件夹下
-j 测试日志,测试过程中某些打印信息都会写入此文件中,不写全路径的时候表示在当前文件夹下。

运行命令,得到结果如下:

2 JMeter集群测试架构
JMeter支持以集群的方式进行压力测试。一台机器资源有限,如果可以在多台机器上同时发出测试请求,则压测并发量可以增加很多,不用局限于一台机器的限制。JMeter采用控制机(Controller,或Master)-代理机(Agent,或Slave)的模式组成集群测试架构。控制机与代理机是一对多的关系,控制机上配置代理机的地址列表,以JMeter客户端的方式运行,将脚本远程发送给代理机执行,代理机上JMeter以Server的方式运行,代替控制机执行脚本,发送压测请求给测试机。如果压测脚本上ThreadGroup的并发用户数是10,那么在有三个JMeter代理机的集群中,最后压到测试机上的并发用户数将是30,以此类推,如果压测脚本中规定并发量是100qps,那么最终压到测试机上的并发请求将是300qps。代理机上执行测试请求之后,会将统计信息回传给控制机,由控制机在界面或者终端统一显示当前的测试汇总。



3 测试集群部署
本章主要介绍如何在Linux机器上配置测试集群,并以命令行的方式启动压测。
3.1 JMeter Controller(Master)部署
1) 将JMeter4.0的包拷贝到控制机上面,随后编辑bin文件夹中的jmeter.properties配置文件,修改remote_hosts项,配置代理机的路由,如下图所示:
配置多个代理机的时候,以逗号分隔开,代理机的端口默认都是1099。
2)HTTPS的访问方式配置
JMeter4.0默认Controller与Agent之间是以HTTPS的方式进行通信,因此需要配置一下HTTPS的jks证书文件。在bin文件夹下执行:./create-rmi-keystore.sh, 填写一些信息以后,会在当前文件夹下生成一个证书文件rmi_keystore.jks。

注意点 “
a)生成该文件以后,需要 将该文件上传到JMeter Agent代理服务机的bin文件夹下,执行远程命令时否则会出现https连接拒绝的错误。
b)如果jmeter命令没有在bin文件夹下执行,需要将rmi_keystore.jks文件拷贝到当前文件夹下才能成功运行jmeter远程命令。
3) 非SSL的方式运行jmeter脚本。如果觉得SSL方式配置很麻烦,也可以关闭SSL通道,让Controller和Agent之间以普通的HTTP协议通信,只需要在jmeter.properties配置文件中设置 server.rmi.ssl.disable=true(控制机和代理机都设置),这样两者就能以HTTP的方式交互了。
4)执行测试脚本格式如下:
jmeter -n -r -t ~/work/perftest/testscript1.jmx -l test1_result.jtl -j test1_log.log
其中比之前多了一个-r, 意思就是以远程模式在代理机上执行测试脚本。

3.2 JMeter Agent(Slave)部署
1) 将JMeter4.0的包拷贝到控制机上面,随后编辑bin文件夹中的jmeter.properties配置文件,注意配置的是server_port=1099,
2) 随后,如果在代理机上配置了防火墙,将防火墙关闭:
systemctl stop firewalld
由于控制机还会访问除1099以外的端口,如果防火墙只开放1099端口,在控制机上远程运行脚本时会碰到路由找不到的异常。



3)如果是HTTPS与控制机通信,需要有控制机上生成的rmi_keystore.jks证书文件,如果采用HTTP方式,则直接在配置文件中将server.rmi.ssl.disable置为true即可。
4)在bin文件夹下以jmeter server方式启动:
jmeter-server -Djava.rmi.server.hostname=10.1.3.8
此处-Djava.rmi.server.hostname配置控制机配置文件中配置的远程代理机地址,防止启动了别的地址导致控制机找不到。


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值