性能测试-JMeter分布式测试及其详细步骤
性能测试概要
性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。
性能测试种类非常多,有些概念也很相近:
- Load Testing
- Baseline Testing
- Smoke Testing
- Stress Testing
- Soak Testing
- Endurance Testing
- Capacity Testing
- Longevity Testing
- Peak Testing
- Spike Testing
- Volume Testing
- Capacity Tests
- Reliability Testing
- Scalability Testing
性能测试的工具
同样,性能测试的工具也非常多:
- Apache JMeter
- HP LoadRunner
- Gatling
- Blazemeter
- k6
- NeoLoad
- TestComplete
- Silk Performer
- Rational Performance Tester
- Apica LoadView
- AppDynamics
- Dynatrace
- New Relic
很难说哪个工具是最好的,这取决于你的需求和预算。如果你想要开源易用的,那JMeter是一个不错的选择。如果你想要一个商用的工具,不妨试试LoadRunner和NeoLoad。重要的一点是,没有任何一款工具可以应对所有性能测试,很多时候我们需要组合使用。
JMeter的分布式测试
我将在本文详细介绍JMeter的分布式测试,我们经常会通过它来做性能测试。
在分布式测试角色中,我们需要一个控制节点Controller,还有多个工作节点Workers。如果你想你的请求增加,那可以通过不断增加工作节点来实现。Controller控制Workers,但它不跑具体的测试案例。Workers是连接目标系统来做具体测试的。
整个系统架构大概如下:
Worker可以在不同的服务器上,所以叫分布式,也因此可以利用多台电脑的资源来模拟足够的请求。
详细步骤
我将一步步介绍如何使用JMeter分布式测试来做性能测试,大致架构如下:
Controller我放在Mac上跑,Workers我是通过两台Ubuntu服务器来跑,要注意它们的IP是在同一内网上的。目标系统为了省事,我直接请求 Bing, stackoverflow, QQ。
Step 1: 安装JDK
Apache JMeter是用Java写的,运行它需要Java运行环境。在Ubuntu安装如下:
Stpe 2: 下载Apache JMeter
去官网的 download page 下载最新的JMeter包apache-jmeter-5.5.zip,然后解压:
所有节点都需要下载安装。
Controller的位置如下:
Workers的位置如下:
你不必位置和我一样,我列出来是为了与后面的命令对应上。
Step 3: 准备测试的JMX文件
JMeter把所有的测试信息都存放在jmx
文件中,打开工具写测试案例如下:
然后定义整个测试怎么跑,这里定义的是使用8个线程,60秒的热身和120秒的持续时长:
文件我放在这:
我的案例只是Controller需要这个jmx
文件,Worker是不需要的。它们可以通过RMI来交互。
Step 4: 启动Workers
要先启动Workers,以服务器模式来启动,启动后不会执行什么测试,它会等待与它连接的Controller和指令:
- Worker 1:
- Worker 2:
注意: 可能会遇到java.rmi.RemoteException,如果你没指定参数:
java.rmi.server.hostname
.
Step 5: 启动Controller
所有Workers就位后,就等主帅一声令下。启动时要指定jmx文件,报告生成的位置,还有Worker的IP,如下:
更多信息可以查看 jmeter.log:
Worker收到指令也会开始工作并打印一些简单的日志:
Step 6: 结果和报告
整个测试跑完后,可以找到对应的结果:
在Reports目录下直接打开 index.html:
其它提示
改变Worker的端口
Worker的默认端口是1099,但它是可以改变的,有些时候也必须改变,如设置的防火墙,或者需要在同一台Server启动多个Worker。具体命令如下:
当然,Controller也要同步调整自己的命令:
使用nohup来跑测试
性能测试有时需要跑很长时间,建议使用nohup模式来运行:
指定结果时添加时间
这样很清晰知道是什么时候开始跑的,也避免目录存在报错。
不过这样也要注意定期清理不需要的结果,以免占用硬盘空间。
总结
性能测试是非常重要的,而Apache JMeter开源又好用,可以在项目中使用起来。
代码请参考: LarryDpk/pkslow-samples
References:
awesome-jmeter
JMeter distributed testing
How to install ssh on Ubuntu Linux using apt-get
API Performance Testing for Success