1. 概述
在本文中,我们将使用 Apache JMeter 来配置和执行性能测试。
2. 配置 JMeter
首先我们需要从官网下载 JMeter,并解压缩,进入 bin 文件夹下并双击可执行文件(Windows 中可执行文件为 .bat,Linux/Unix 中可执行文件为 .sh)。
接下来,我们只需要将 bin 添加到系统环境变量中,这样我们就可以从命令行访问。
截止目前,最稳定的版本是 5.5,点击这里查看最新版本。
3. 创建 JMeter 脚本
现在来编写第一个 JMeter 脚本(一个包含测试技术描述的文件)。
我们要测试的 API 是一个简单的 SpringBoot 应用程序提供的 REST API 服务。
先更新 Test Plan 的名称,然后添加一个 Thread Group。
Thread Group 可以通过模拟用户行为与应用程序交互,在 GUI 界面上右击的脚本名称,然后按照下图进行操作:
接着配置 Thread Group,指定同时向应用程序发出请求的用户数:
这里我们指定了如下参数配置:
- Name:Thread Group 的名称
- The number of Threads(users):并发用户数
- Ramp-up:从 0 到设置的并发数的时间
- Loop count:重复次数
添加一个 HTTP Request Sampler,模拟 5 个用户调用这个请求。
填入 API 的地址描述信息,如下图所示:
只需填写 URL 地址、端口和请求的 URI 即可。
接下来,点击 “Add>Listener” 菜单,添加 “View Result Tree”(如果返回结果是一个记列表,使用 View Results in Table),然后模拟用户请求。
点击顶部的绿色箭头按钮执行测试并查看响应数据:
我们可以在“采样器结果”选项卡上看到更详细的响应表示。
最后在 HTTP Sampler 中添加一个 Duration Assertion ,设置每个持续时间超过 5 毫秒的请求都将被认为是失败的测试:
在重新运行测试后,我们看到有一些(这里是1个)用户无法在 5 毫秒内获得响应:
将扩展名为.jmx的测试脚本保存在 API 应用程序(Spring Boot 应用)的 resources 文件夹中。
除了上面提到的组件之外,还有更多组件可用于配置我们的测试文件:
- JDBC Request:用于向数据库发送 JDBC 请求(SQL查询),在使用之前,我们需要设置一个JDBC连接配置(JDBC Connection Configuration)
- XML Assertion:测试响应数据是否是正确的 XML 文档
- Size Assertion:断言响应中包含正确的字节数
- JMS Publisher:按照 J2EE 消息传递规范将消息发布到给定的目标(主题/队列)
所有组件都在用户手册中作了详细介绍
4. 运行 JMeter 测试
运行JMeter测试有两种方法,一种是使用可用的 Maven 插件,另一种是非 GUI 模式下的 JMeter 应用程序。
无论哪一种方式,两者都需要配置 JMeter 脚本的访问路径。
4.1. JMeter Maven插件
JMeter Maven Plugin 是一个 Maven 插件,它将运行 JMeter 测试的功能作为构建的一部分;该插件的最新版本是3.6.1,与Apache JMeter 5.5兼容。
在 pom.xml 中添加 JMeter Maven Plugin:
<plugin> <groupId>com.lazerycode.jmeter</groupId> <artifactId>jmeter-maven-plugin</artifactId> <version>2.6.0</version> <executions> <execution> <id>jmeter-tests</id> <goals> <goal>jmeter</goal> </goals> </execution> </executions> <configuration> <testFilesDirectory>${project.basedir}/src/main/resources</testFilesDirectory> <resultsDirectory>${project.basedir}/src/main/resources</resultsDirectory> </configuration> </plugin> 复制代码
接着可以使用 mvn-verify 运行所有测试,或者只使用 JMeter 运行 mvn-jmeter:jmeter;以下是命令的控制台输出:
注意:这里我们指定了脚本所在的目录:
- 脚本默认目为:${project.basedir}/src/test/jmeter*。
- 结果存储默认目录为:${project.basedir}/target/jmeter/results。
插件文档可点击这里访问。
4.2. 非 GUI 模式
另一种方法是通过 JMeter 可执行文件,假设它可以通过命令行使用,我们可以这样做:
jmeter -Jjmeter.save.saveservice.output_format=xml -n -t src/main/resources/JMeter.jmx -l src/main/resources/JMeter.jtl 复制代码
我们将XML设置为输出格式,它填充了精确的测试文件和结果文件。
注意:建议不要将 GUI 模式用于测试执行,GUI 模式仅用于测试创建和调试。
5. 结论
在本文中,我们在通过配置 Apache JMeter 实现 SpringBoot 应用的性能测试,使用 Maven 插件运行性能测试,同时了解如何设计基本性能测试用例。