在 JMeter 中,测试计划由多个元件(Elements)组成,每个元件都有其特定的用途。了解和使用这些元件可以帮助你创建高效的测试计划。以下是 JMeter 中常用的测试计划元件及其用途的详细介绍。
一、线程组(Thread Group)
线程组是测试计划的基础,定义了虚拟用户的行为和数量。
- Number of Threads (users):设置虚拟用户的数量。
- Ramp-Up Period (seconds):设置启动所有用户所需的时间。
- Loop Count:设置循环次数。
示例:
Thread Group
Number of Threads: 10
Ramp-Up Period: 5
Loop Count: 2
此配置表示在 5 秒内启动 10 个虚拟用户,并循环执行 2 次。
二、配置元件(Config Element)
配置元件用于为采样器提供共享的配置数据。
常见配置元件:
- HTTP Request Defaults:设置 HTTP 请求的默认值。
- CSV Data Set Config:从 CSV 文件中读取数据,用于参数化测试。
- User Defined Variables:定义全局变量。
示例:
HTTP Request Defaults
Server Name or IP: www.example.com
Port Number: 80
此配置为所有 HTTP 请求设置默认的服务器地址和端口。
三、前置处理器(Pre-Processor)
前置处理器在采样器执行之前运行,用于修改请求。
常见前置处理器:
- HTTP URL Re-writing Modifier:重写 URL 中的参数。
- User Parameters:动态设置用户参数。
示例:
HTTP URL Re-writing Modifier
URL: http://www.example.com/${sessionId}
此配置将请求中的 ${sessionId}
替换为实际的会话 ID。
四、采样器(Sampler)
采样器是执行实际请求的元件。
常见采样器:
- HTTP Request:发送 HTTP 请求。
- JDBC Request:执行数据库查询。
- FTP Request:执行 FTP 操作。
示例:
HTTP Request
Name: Get Home Page
Path: /
Method: GET
此配置发送一个 GET 请求到根路径。
五、定时器(Timer)
定时器用于在请求之间添加延迟。
常见定时器:
- Constant Timer:设置固定的延迟时间。
- Uniform Random Timer:设置随机的延迟时间。
示例:
Constant Timer
Delay: 2000
此配置在每个请求之间添加 2 秒的延迟。
六、断言(Assertion)
断言用于验证响应数据是否符合预期。
常见断言:
- Response Assertion:验证响应文本、响应码等。
- Duration Assertion:验证响应时间。
- Size Assertion:验证响应大小。
示例:
Response Assertion
Field to Test: Text Response
Pattern Matching Rules: Contains
Patterns to Test: "Welcome"
此配置验证响应文本中是否包含“Welcome”。
七、后置处理器(Post-Processor)
后置处理器在采样器执行之后运行,用于处理响应数据。
常见后置处理器:
- Regular Expression Extractor:使用正则表达式提取响应数据。
- JSON Extractor:从 JSON 响应中提取数据。
示例:
Regular Expression Extractor
Reference Name: sessionId
Regular Expression: "sessionId=(\d+)"
Template: $1$
Match No.: 1
此配置从响应中提取会话 ID 并存储在变量 sessionId
中。
八、监听器(Listener)
监听器用于收集和显示测试结果。
常见监听器:
- View Results Tree:显示每个请求的详细信息。
- Summary Report:显示汇总的性能数据。
- Aggregate Report:显示聚合的性能数据。
示例:
Summary Report
此配置显示所有请求的汇总性能数据,包括吞吐量、平均响应时间和错误率。
九、逻辑控制器(Logic Controller)
逻辑控制器用于控制请求的执行顺序和逻辑。
常见逻辑控制器:
- Loop Controller:重复执行其包含的采样器。
- If Controller:根据条件执行其包含的采样器。
- Transaction Controller:将多个采样器视为一个事务。
示例:
If Controller
Condition: "${JMeterThread.last_sample_ok} == true"
Evaluate for all children: true
此配置在上一个请求成功时才执行包含的采样器。
十、使用示例
下面是一个简单的示例测试计划,包含了所有上述元件:
Test Plan
Thread Group
Number of Threads: 5
Ramp-Up Period: 10
Loop Count: 2
HTTP Request Defaults
Server Name or IP: www.example.com
Port Number: 80
CSV Data Set Config
Filename: users.csv
Variable Names: username,password
User Defined Variables
sessionId: ${__UUID()}
HTTP Request
Name: Get Home Page
Path: /
Method: GET
Constant Timer
Delay: 2000
Response Assertion
Field to Test: Text Response
Pattern Matching Rules: Contains
Patterns to Test: "Welcome"
Regular Expression Extractor
Reference Name: sessionId
Regular Expression: "sessionId=(\d+)"
Template: $1$
Match No.: 1
View Results Tree
Summary Report
总结
JMeter 的测试计划由多个元件组成,每个元件都有特定的功能和配置选项。通过组合使用这些元件,可以创建复杂而灵活的测试计划,以满足各种性能测试需求。了解和熟练使用这些元件是进行有效性能测试的关键。