JMeter采样器详解
JMeter采样器详解
一、采样器概述
1.1 什么是采样器
采样器(Samplers)是JMeter中发送请求的核心元件,负责向目标服务器发送请求并接收响应。每个采样器代表一个测试步骤。
1.2 采样器的作用
- 发送请求:向目标服务器发送HTTP、JDBC、FTP等协议的请求
- 记录响应:记录服务器返回的响应数据
- 测量时间:测量从发送请求到接收响应的时间
- 生成结果:生成采样结果供监听器分析
1.3 采样器执行顺序
1采样器在线程组中的执行顺序:
21. 配置元件 → 前置处理器 → 定时器 → 采样器 → 后置处理器 → 断言 → 监听器二、HTTP请求采样器
2.1 添加HTTP请求
1右键点击线程组 → Add → Sampler → HTTP Request2.2 基本配置
名称(Name)
1名称: 获取用户列表接口注释(Comments)
1注释: 测试GET /api/users接口协议(Protocol)
1协议: http 或 https选项:
- http:HTTP协议(默认)
- https:HTTPS协议(需要SSL配置)
服务器名称或IP(Server Name or IP)
1服务器名称或IP: localhost 或 192.168.1.100 或 api.example.com说明:目标服务器的域名或IP地址。
端口号(Port Number)
1端口号: 8080说明:目标服务器的端口号。HTTP默认80,HTTPS默认443。
方法(Method)
1方法: GET选项:
- GET:获取资源
- POST:提交数据
- PUT:更新资源
- DELETE:删除资源
- HEAD:获取响应头
- OPTIONS:获取可用方法
- TRACE:追踪请求路径
- PATCH:部分更新
路径(Path)
1路径: /api/users说明:请求的路径部分。
2.3 参数配置
自动重定向(Follow Redirects)
1勾选: 自动重定向说明:如果服务器返回3xx重定向响应,自动跟随重定向。
使用KeepAlive(Use KeepAlive)
1勾选: 使用KeepAlive说明:使用HTTP KeepAlive连接,减少TCP连接建立开销。
多部分表单数据(Send Parameters With the Request)
1勾选: 多部分表单数据说明:以multipart/form-data格式发送参数,适用于上传文件。
同请求一起发送参数(Send Parameters With the Request)
1勾选: 同请求一起发送参数说明:将参数附加到请求中发送。
2.4 参数表格
添加参数
1名称: page
2值: 1
3编码: UTF-8参数说明:
| 字段 | 说明 |
|---|---|
| 名称 | 参数名 |
| 值 | 参数值 |
| 编码 | 参数编码(UTF-8/GBK等) |
| 是否编码 | 是否对参数值进行URL编码 |
| Content-Type | 参数的Content-Type |
2.5 Body Data(请求体)
1{
2 "username": "test",
3 "password": "123456"
4}说明:当请求方法为POST、PUT等时,可以在这里输入请求体内容。
适用场景:
- JSON格式的请求体
- XML格式的请求体
- 其他自定义格式的请求体
2.6 Files Upload(文件上传)
1文件路径: C:\test\image.jpg
2参数名称: file
3MIME类型: image/jpeg参数说明:
| 字段 | 说明 |
|---|---|
| 文件路径 | 要上传的文件路径 |
| 参数名称 | 文件字段的参数名 |
| MIME类型 | 文件的MIME类型 |
| 变量名称 | 可选,用于引用文件内容 |
2.7 高级配置
连接超时(Connect Timeout)
1连接超时: 10000(毫秒)说明:建立TCP连接的超时时间。
响应超时(Response Timeout)
1响应超时: 30000(毫秒)说明:等待服务器响应的超时时间。
请求编码(Request Encoding)
1请求编码: UTF-8说明:请求内容的编码格式。
三、JDBC请求采样器
3.1 添加JDBC请求
1右键点击线程组 → Add → Sampler → JDBC Request3.2 前置条件
在使用JDBC请求前,需要先添加JDBC连接配置:
1右键点击线程组 → Add → Config Element → JDBC Connection ConfigurationJDBC连接配置
1变量名: db
2JDBC驱动类: com.mysql.cj.jdbc.Driver
3JDBC URL: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
4用户名: root
5密码: password驱动类配置:
| 数据库类型 | 驱动类 |
|---|---|
| MySQL | com.mysql.cj.jdbc.Driver |
| PostgreSQL | org.postgresql.Driver |
| Oracle | oracle.jdbc.OracleDriver |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
3.3 JDBC请求配置
变量名(Variable Name of Pool)
1变量名: db说明:引用JDBC连接配置中设置的变量名。
查询类型(Query Type)
1查询类型: Select Statement选项:
- Select Statement:SELECT查询(返回结果集)
- Update Statement:INSERT/UPDATE/DELETE(不返回结果集)
- Callable Statement:存储过程调用
- Prepared Select Statement:预编译SELECT查询
- Prepared Update Statement:预编译INSERT/UPDATE/DELETE
- Commit:提交事务
- Rollback:回滚事务
查询语句(Query)
1SELECT * FROM users WHERE status = 1 LIMIT 10;说明:要执行的SQL语句。
参数值(Parameter values)
11, active说明:SQL语句中的参数值,用逗号分隔。
参数类型(Parameter types)
1INTEGER, VARCHAR说明:参数类型,与参数值一一对应。
支持的类型:
- INTEGER
- VARCHAR
- DATE
- TIMESTAMP
- FLOAT
- DOUBLE
3.4 结果处理
结果变量名(Result variable name)
1结果变量名: result说明:将查询结果存储到变量中,后续可通过${result}引用。
查询超时(Query timeout (seconds))
1查询超时: 60说明:SQL查询的超时时间(秒)。
四、FTP请求采样器
4.1 添加FTP请求
1右键点击线程组 → Add → Sampler → FTP Request4.2 配置
服务器名称或IP(Server Name or IP)
1服务器名称或IP: ftp.example.com端口号(Port Number)
1端口号: 21说明:FTP默认端口21。
用户名(Username)
1用户名: ftpuser密码(Password)
1密码: password远程文件名(Remote File)
1远程文件名: /uploads/test.txt本地文件名(Local File)
1本地文件名: C:\test\test.txt操作类型(Operation)
1操作类型: RETR(下载)选项:
- RETR:下载文件
- STOR:上传文件
- DELE:删除文件
- LIST:列出文件列表
五、TCP请求采样器
5.1 添加TCP请求
1右键点击线程组 → Add → Sampler → TCP Sampler5.2 配置
服务器名称或IP(Server Name or IP)
1服务器名称或IP: 192.168.1.100端口号(Port Number)
1端口号: 8888文本数据(Text to Send)
1文本数据: HELLO_SERVER换行符(End of line (EOL) byte value)
1换行符: 10(LF)说明:设置发送数据的结束符。
常见值:
- 10:LF(换行符)
- 13:CR(回车符)
- 13,10:CRLF(回车换行)
六、脚本采样器
6.1 BeanShell采样器
1右键点击线程组 → Add → Sampler → BeanShell Sampler脚本语言(Language)
1脚本语言: beanshell脚本(Script)
1// 获取变量
2String username = vars.get("username");
3
4// 执行逻辑
5String result = "Hello, " + username;
6
7// 设置变量
8vars.put("greeting", result);
9
10// 打印日志
11log.info("Greeting: " + result);6.2 JSR223采样器
1右键点击线程组 → Add → Sampler → JSR223 Sampler脚本语言(Language)
1脚本语言: groovy脚本(Script)
1// 获取变量
2def username = vars.get("username")
3
4// 执行逻辑
5def result = "Hello, ${username}"
6
7// 设置变量
8vars.put("greeting", result)
9
10// 打印日志
11log.info("Greeting: ${result}")注意:推荐使用Groovy语言,性能比BeanShell好。
七、Java请求采样器
7.1 添加Java请求
1右键点击线程组 → Add → Sampler → Java Request7.2 配置
类名称(Classname)
1类名称: com.example.MySampler说明:自定义的Java采样器类,需要实现Sampler接口。
7.3 自定义Java采样器
1package com.example;
2
3import org.apache.jmeter.samplers.SampleResult;
4import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
5import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
6
7public class MySampler extends AbstractJavaSamplerClient {
8
9 @Override
10 public SampleResult runTest(JavaSamplerContext context) {
11 SampleResult result = new SampleResult();
12 result.sampleStart();
13
14 try {
15 // 执行测试逻辑
16 Thread.sleep(100);
17
18 result.setResponseCode("200");
19 result.setResponseMessage("OK");
20 result.setSuccessful(true);
21 result.setResponseData("Hello, World!".getBytes());
22 } catch (Exception e) {
23 result.setSuccessful(false);
24 result.setResponseMessage(e.getMessage());
25 }
26
27 result.sampleEnd();
28 return result;
29 }
30}八、实战案例
8.1 案例1:完整的HTTP接口测试
需求:测试用户管理系统的CRUD接口
配置步骤:
创建线程组(50线程,循环5次)
添加HTTP请求默认值:
1协议: http
2服务器名称或IP: localhost
3端口号: 8080- 添加HTTP请求(创建用户):
1方法: POST
2路径: /api/users
3Body Data:
4 {
5 "username": "testuser",
6 "email": "test@example.com",
7 "password": "123456"
8 }- 添加JSON提取器(提取用户ID):
1引用名称: user_id
2JSON路径表达式: $.data.id- 添加HTTP请求(获取用户):
1方法: GET
2路径: /api/users/${user_id}- 添加HTTP请求(更新用户):
1方法: PUT
2路径: /api/users/${user_id}
3Body Data:
4 {
5 "username": "updateduser",
6 "email": "updated@example.com"
7 }- 添加HTTP请求(删除用户):
1方法: DELETE
2路径: /api/users/${user_id}添加查看结果树和聚合报告
运行测试
8.2 案例2:数据库性能测试
需求:测试MySQL数据库的查询性能
配置步骤:
创建线程组(100线程,循环10次)
添加JDBC连接配置:
1变量名: mysql_db
2JDBC驱动类: com.mysql.cj.jdbc.Driver
3JDBC URL: jdbc:mysql://localhost:3306/test
4用户名: root
5密码: password- 添加JDBC请求(查询用户列表):
1变量名: mysql_db
2查询类型: Select Statement
3查询语句: SELECT * FROM users WHERE status = 1 ORDER BY created_at DESC LIMIT 20;- 添加JDBC请求(查询订单详情):
1变量名: mysql_db
2查询类型: Select Statement
3查询语句: SELECT o.*, u.name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.id = 1;- 添加JDBC请求(插入测试数据):
1变量名: mysql_db
2查询类型: Update Statement
3查询语句: INSERT INTO test_log (message, created_at) VALUES ('test', NOW());添加聚合报告
运行测试
8.3 案例3:FTP文件上传下载测试
需求:测试FTP服务器的文件上传下载性能
配置步骤:
创建线程组(20线程,循环5次)
添加FTP请求(上传文件):
1服务器名称或IP: ftp.example.com
2端口号: 21
3用户名: ftpuser
4密码: password
5操作类型: STOR
6本地文件名: C:\test\test.txt
7远程文件名: /uploads/test_${__Random(1,1000)}.txt- 添加FTP请求(下载文件):
1服务器名称或IP: ftp.example.com
2端口号: 21
3用户名: ftpuser
4密码: password
5操作类型: RETR
6远程文件名: /uploads/test.txt
7本地文件名: C:\test\download_${__Random(1,1000)}.txt添加聚合报告
运行测试
九、常见问题
9.1 HTTP请求中文乱码
回答:
- 在HTTP请求中设置请求编码为UTF-8
- 在HTTP信息头管理器中添加Content-Type: application/json; charset=UTF-8
9.2 JDBC连接失败
回答:
- 检查JDBC驱动是否已添加到lib目录
- 检查JDBC URL是否正确
- 检查数据库用户名和密码是否正确
- 检查数据库服务是否正常运行
9.3 FTP连接失败
回答:
- 检查FTP服务器地址和端口是否正确
- 检查用户名和密码是否正确
- 检查FTP服务器是否允许匿名访问
- 检查防火墙是否阻止了FTP连接
9.4 脚本采样器性能问题
回答:
- 推荐使用JSR223采样器(Groovy语言)
- 避免在脚本中执行耗时操作
- 避免在脚本中创建大量对象
下一章:04-控制器详解.md
- 01JMeter界面详解 2026-07-11
- 02性能测试学习路线 2026-07-11
- 03JMeter线程组配置详解 2026-07-11