1. 概述
使用JMeter时,我们可以将测试场景分组并通过不同方式运行,以模拟真实世界的流量。
本教程将学习如何以及何时使用多个线程组来复制真实场景,并通过一个简单的测试计划演示如何按顺序或并行运行它们。
2. 创建多个线程组
线程组是JMeter的核心组件,用于控制执行测试的线程数量。
JMeter测试计划中的每个线程组都模拟特定的真实应用场景。大多数服务器应用通常包含多个场景,因此为每个用例创建独立的线程组能让我们在测试中更灵活地分配负载。
运行多个线程组有两种方式:顺序执行或并行执行。
3. 顺序运行线程组
当需要按顺序执行应用场景时特别有用,尤其是当不同场景间存在依赖关系时。
3.1. 使用场景
假设有一个电商应用,用户可以浏览商品、将喜欢的商品加入购物车,最后结账并下单。
对于这类应用,当需要模拟用户旅程时,我们希望脚本按特定顺序执行。例如:脚本先执行浏览商品,然后添加商品到购物车,最后完成下单。
3.2. 配置方法
在测试计划中勾选"Run Thread Groups consecutively (i.e. one at a time)"选项即可实现此行为:
4. 并行运行线程组
当不同场景间没有依赖关系时特别有用。
测试操作会并发执行,模拟被测系统的混合负载。
4.1. 使用场景
以新闻网站为例,新闻分为科技、财经、体育等类别。该网站首页始终展示所有类别的最新头条。
对于这类应用,我们可以创建多个线程组来模拟不同页面的用户负载分布。由于这些场景相互独立,可以同时执行。
4.2. 配置方法
JMeter测试计划默认配置为并行运行多个线程组,因此无需勾选"Run Thread Groups consecutively"选项:
5. 测试用例设置
要尝试测试计划,我们需要一个API。这里使用JSON Placeholder提供的测试API。
我们将使用两个场景:
- 场景1:读取特定文章
- 场景2:创建新文章
由于大多数用户更倾向于阅读文章而非创建文章,我们将它们放在两个独立的线程组中。
6. 向测试计划添加线程组
6.1. 创建基础测试计划
启动JMeter后,默认会创建名为"Test Plan"的测试计划。我们将其重命名为"My Test Plan":
6.2. 添加多个线程组
右键点击"Test Plan",选择"Add -> Threads (Users) -> Thread Group"创建线程组:
创建两个线程组,首先是GET请求线程组:
该线程组用于读取特定文章。关键参数配置:
- 名称:GET Request Thread Group
- 线程数:5(模拟的虚拟用户数)
- Ramp-Up时间:10秒(启动所有线程所需时间)
- 循环次数:1(执行场景的次数)
接着创建POST请求线程组:
该线程组用于创建新文章。配置参数:
- 名称:POST Request Thread Group
- 线程数:5
- Ramp-Up时间:10秒
- 循环次数:1
6.3. 添加请求
为每个线程组添加HTTP请求。右键点击线程组,选择"Add -> Sampler -> HTTP Request":
在GET请求线程组下创建请求:
配置参数:
- 名称:Read Post
- 注释:读取ID=1的文章
- 服务器/IP:my-json-server.typicode.com
- 请求方法:GET
- 路径:/typicode/demo/posts
- 参数:id=1(用于获取特定文章)
在POST请求线程组下创建请求:
配置参数:
- 名称:Create Post
- 注释:创建ID=p1的新文章
- 服务器/IP:my-json-server.typicode.com
- 路径:/typicode/demo/posts
- 参数:id=p1&title=测试文章(创建文章所需属性)
6.4. 添加汇总报告
右键点击"Test Plan",选择"Add -> Listener -> View Results in Table"添加结果监听器:
6.5. 运行测试(并行模式)
点击工具栏的"Run"按钮(Ctrl+R)启动测试。实时结果如下:
结果显示"Read Post"和"Create Post"请求并行执行。这是测试计划的默认设置(未勾选顺序执行选项):
6.6. 运行测试(顺序模式)
勾选测试计划中的"Run Thread Groups consecutively"选项:
再次点击"Run"按钮运行测试。实时结果如下:
结果显示所有"Read Post"线程先执行,然后才执行"Create Post"线程。
7. 总结
本教程演示了如何创建多个线程组来模拟真实应用的用户负载,并学习了如何配置线程组的顺序执行或并行执行模式。掌握这些技巧能帮助我们更精准地模拟复杂场景,避免踩坑。