头像
淇迹时刻
-- : -- : --
切换主题色
-- : -- : --

JMeter采样器详解

最后更新于:

JMeter采样器详解

一、采样器概述

1.1 什么是采样器

采样器(Samplers)是JMeter中发送请求的核心元件,负责向目标服务器发送请求并接收响应。每个采样器代表一个测试步骤。

1.2 采样器的作用

  • 发送请求:向目标服务器发送HTTP、JDBC、FTP等协议的请求
  • 记录响应:记录服务器返回的响应数据
  • 测量时间:测量从发送请求到接收响应的时间
  • 生成结果:生成采样结果供监听器分析

1.3 采样器执行顺序

1采样器在线程组中的执行顺序:
21. 配置元件 → 前置处理器 → 定时器 → 采样器 → 后置处理器 → 断言 → 监听器

二、HTTP请求采样器

2.1 添加HTTP请求

1右键点击线程组 → Add → Sampler → HTTP Request

2.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 Request

3.2 前置条件

在使用JDBC请求前,需要先添加JDBC连接配置:

1右键点击线程组 → Add → Config Element → JDBC Connection Configuration

JDBC连接配置

1变量名: db
2JDBC驱动类: com.mysql.cj.jdbc.Driver
3JDBC URL: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
4用户名: root
5密码: password

驱动类配置

数据库类型驱动类
MySQLcom.mysql.cj.jdbc.Driver
PostgreSQLorg.postgresql.Driver
Oracleoracle.jdbc.OracleDriver
SQL Servercom.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 Request

4.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 Sampler

5.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 Request

7.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接口

配置步骤

  1. 创建线程组(50线程,循环5次)

  2. 添加HTTP请求默认值:

1协议: http
2服务器名称或IP: localhost
3端口号: 8080
  1. 添加HTTP请求(创建用户):
1方法: POST
2路径: /api/users
3Body Data:
4    {
5        "username": "testuser",
6        "email": "test@example.com",
7        "password": "123456"
8    }
  1. 添加JSON提取器(提取用户ID):
1引用名称: user_id
2JSON路径表达式: $.data.id
  1. 添加HTTP请求(获取用户):
1方法: GET
2路径: /api/users/${user_id}
  1. 添加HTTP请求(更新用户):
1方法: PUT
2路径: /api/users/${user_id}
3Body Data:
4    {
5        "username": "updateduser",
6        "email": "updated@example.com"
7    }
  1. 添加HTTP请求(删除用户):
1方法: DELETE
2路径: /api/users/${user_id}
  1. 添加查看结果树和聚合报告

  2. 运行测试

8.2 案例2:数据库性能测试

需求:测试MySQL数据库的查询性能

配置步骤

  1. 创建线程组(100线程,循环10次)

  2. 添加JDBC连接配置:

1变量名: mysql_db
2JDBC驱动类: com.mysql.cj.jdbc.Driver
3JDBC URL: jdbc:mysql://localhost:3306/test
4用户名: root
5密码: password
  1. 添加JDBC请求(查询用户列表):
1变量名: mysql_db
2查询类型: Select Statement
3查询语句: SELECT * FROM users WHERE status = 1 ORDER BY created_at DESC LIMIT 20;
  1. 添加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;
  1. 添加JDBC请求(插入测试数据):
1变量名: mysql_db
2查询类型: Update Statement
3查询语句: INSERT INTO test_log (message, created_at) VALUES ('test', NOW());
  1. 添加聚合报告

  2. 运行测试

8.3 案例3:FTP文件上传下载测试

需求:测试FTP服务器的文件上传下载性能

配置步骤

  1. 创建线程组(20线程,循环5次)

  2. 添加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
  1. 添加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
  1. 添加聚合报告

  2. 运行测试

九、常见问题

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

最新文章

本页导航