学习笔记—性能测试—分布式Jmeter搭建与使用
Jmeter
总所周知,Jmeter是可以用于接口测试和性能测试的一个工具。随着现在技术的发展,对性能测试的要求是日益提升的,因此,Jmeter的性能测试是极为重要的。
然后,Jmeter是基于Java开发的,每创建一个线程或者说一个虚拟用户的时候,JVM就会默认为每个线程分配1M的堆栈内存空间,由于配置限制,Jmeter在一个单机的情况下,是很难实现过高的并发的。
因此,可以通过Jmeter的分布式部署,来整合多台主机的硬件资源,以此达到对被测接口进行压力测试的目的。
在分布式的Jmeter测试环境中,有两个非常重要的角色,分别为master和slaves。
master:也可以叫做主节点,主要就是负责发送测试脚本到slaves节点上,并且,在master上可以启动、停止、监控测试。最后,slaves通过将测试结果返回到master并由master进行汇总分析。
slaves:也可以叫做是从节点,主要负责从master节点来接收测试脚本,并执行压测,最后返回测试结果给master节点。
通过Jmeter的分布式部署使用,可以达到较高的可扩展性、并能高效利用多台机器的资源进行压力测试,且更接近于实际上的高并发场景,评估会更加全面。
当然,采用Jmeter的坏处就是对环境的一致性要求比较高,且网络因素可能会造成一定的影响。因此,在具体的部署使用过程中,要注意:带宽要够,主从节点的时间要同步,防火墙要确保不会阻拦。
单机Jmeter搭建
首先,对于一个单机的普通的Jmeter搭建来说,可以直接访问https://jmeter.apache.org/download_jmeter.cgi
并下载适合版本的包(主要需要安装的机器上有Java的),例如,于此选择apache-jmeter-5.6.3.zip
下载后,将其解压到本地没有空格和中文路径的文件夹中,注意不要出现两层同名文件夹。
将bin目录配置进入环境变量:
1 |
|
可以通过如下命令查看:
1 |
|
命令行输入Jmeter,出现以下内容:
基于Docker的分布式Jmeter搭建及测试
这里采用Docker作为分布式Jmeter搭建的工具。
首先,需要pull对应的master和slave镜像,镜像的选择比较多样,这里采用:
1 |
|
接着创建docker虚拟网络,来保证网络隔离和容器间的通信。
这里创建一个jmeter的网络:
1 |
|
而后,以三个容器作为Jmeter的slave节点创建从服务:
1 |
|
接着通过logs查看每个slaves的ip地址:
1 |
|
此处显示如下:
1 |
|
1 |
|
1 |
|
可以看到三个容器的地址分别为:
1 |
|
在此基础上,先创建一个测试脚本(可通过本地的jmeter进行创建),创建gagaduck.jmx一个简单的测试脚本,并放在~/jmx_file_dir下面。启动master节点执行测试:
1 |
|
同时,于此,可以查看slave的日志:
1 |
|
每一个slave都有执行test的日志输出。
对于这样一条命令,首先result=date +”%Y%m%d%H%M%S”这个是获取当前的日期时间并许以特定的格式。
docker run –rm表示运行一个 Docker 容器,–rm 表示容器在执行结束后自动删除。
-v /root/jmx_file_dir:/data是进行卷挂载,将本地的 /root/jmx_file_dir 目录映射到容器内的 /data 目录,由此进行测试。
jmeter -n -t /data/gagaduck.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.23.0.2,172.23.0.3,172.23.0.4这样的一个部分呢,适用于容器内的具体操作。这里使用 jmeter 工具进行相关测试,指定了测试计划文件、结果文件、日志文件等,并指定了要报告到的 IP 地址(Slaves节点的IP地址)。
在该命令启动后,master首先会将本地的jmx文件拷贝并分发到指定jmeter网络的所有slave节点上。
拿到了测试脚本之后,slave就会以命令行的模式执行脚本。执行过程中,slave会将执行获得的数据结果传回到master节点上,由master节点来汇总。也就是上面图片所展示的内容。
最后,回到挂在的目录下面,会有一个文件夹,这个文件夹以当前时间为名字进行命名。
进去后,打开index.html,便是当前这个测试的测试报告了。