性能测试-jmeter实战6
课程:B站大学
记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师
性能测试-jmeter元件操作
- Jmeter响应乱码的解决方法
- Jmeter的参数化
- 一、最常用参数化方式
- 1、CSV Data Set Config(CSV数据文件读取)
- 2、用户定义的变量(User Defined Variables)
- 3、 函数动态生成参数(__Random、__time等)
- 4、计数器(Counter)
- 业务实战组合技巧
- 1、混合使用CSV+函数:
- 2、参数化与关联结合:
- 3、数据准备建议:
- Jmeter断言
- 1.2 JMeter中常用断言
- 响应断言
- JSON断言
- 持续时间断言(Duration Assertion)
- 实践是检验真理的唯一标准
Jmeter响应乱码的解决方法
在jmeter文件中找到jmeter.properties文件,打开文件找到
修改encoding编码为utf-8,在linux中也会进行修改
jmeter中响应显示为中文,常用于接口自动化测试和性能测试编码
今日总结:
Jmeter的参数化
实际场景:模拟100个用户登录,并使用不同的测试金额数据访问支付接口?
步骤:
1、定义csc数据文件,存放1000个不同的用户账号密码
2、添加线程组,将线程组的线程数设置为1000
3、添加csv数据文件设置,读取csv数据文件中的用户账号密码
4、添加http请求(用户登录的请求),在请求中引用csv数据文件设置中的用户账号、密码的参数
5、添加http请求(支付请求),使用counter函数作为支付金额的参数
6、添加查看结果数,观察结果
一、最常用参数化方式
1、CSV Data Set Config(CSV数据文件读取)
适用场景:模拟多用户登录、订单提交等需要不同参数值的业务(如不同用户名/密码、商品ID/数量)。
优势:支持外部文件管理数据,易于维护,适合大规模数据驱动测试。
示例:电商用户登录性能测试
业务场景:模拟100个用户并发登录,每个用户使用独立的用户名和密码。
CSV文件内容(users.csv):
username,password
user1,pass123
user2,pass456
user3,pass789
...(可扩展至100行)
在http请求中引用变量名即可
用户名:${username}
密码:${password}
2、用户定义的变量(User Defined Variables)
适用场景:测试环境的基础配置(如服务器地址、端口、公共参数),或少量固定参数(如地区/渠道ID)。
优势:全局共享,适合不变量(如生产环境URL)。
示例:接口基础配置参数化
业务场景:所有接口请求都需要相同的base_url和app_version。
JMeter配置:
添加组件:测试计划 或 线程组 → 右键添加 配置元件 → 用户定义的变量
参数设置:
变量名 | 值 | 说明 |
---|---|---|
base_url | https://api.example.com | 接口基础地址 |
app_version | v2.1 | 应用版本号 |
channel | official | 渠道标识(官方/第三方) |
请求中使用参数:
在HTTP请求的服务器名称或IP中填写 ${base_url},路径中引用其他变量:
请求路径:/app/${app_version}/user/info?channel=${channel}
3、 函数动态生成参数(__Random、__time等)
适用场景:需要动态值的业务(如随机订单金额、时间戳参数、唯一ID)。
优势:无需外部文件,灵活生成实时数据。
常用函数及示例:
示例:订单提交性能测试
业务场景:模拟用户提交订单,订单金额随机(10-1000元),订单ID唯一。
JMeter配置:
HTTP请求参数:
函数/变量 | 说明 | 应用场景 | 示例代码 |
---|---|---|---|
_Random(min, max) | 生成 [min, max] 范围的随机整数 | 模拟商品购买数量(1-10件) | ${__Random(1,10)} |
__RandomString(length, chars) | 生成指定长度的随机字符串 | 生成随机备注信息 | ${__RandomString(10, abcdef123456)} |
__time() | 获取当前时间戳(毫秒) | 记录请求发起时间 | ${__time()} |
__time(format) | 格式化时间(如订单时间) | 生成 yyyy-MM-dd HH:mm:ss 格式的时间 | ${__time(yyyy-MM-dd HH:mm:ss)} |
__UUID | 生成唯一标识符 | 模拟订单ID/会话ID | ${__UUID} |
订单ID:${__UUID}
订单金额:${__Random(10,1000)}
下单时间:${__time(yyyy-MM-dd HH:mm:ss)}
4、计数器(Counter)
适用场景:需要严格递增的唯一序号(如用户ID、流水号)。
优势:保证数值连续性,适合数据库主键模拟。
示例:用户注册性能测试
业务场景:模拟批量用户注册,用户ID从10001开始递增。
JMeter配置:
添加组件:线程组 → 右键添加 配置元件 → 计数器
参数设置:
名称 | 值 | 说明 |
---|---|---|
计数器变量名 | user_id | 后续引用用 ${user_id} (如 ${user_id} ) |
起始值 | 10001 | 起始数字 |
递增步长 | 1 | 每次请求 +1 |
引用名称 | user_id | 其他元件中通过 ${user_id} 获取当前值 |
数字格式 | 00000 | 可选(如生成5位数字,不足补零,如 01001 ) |
请求中使用参数: | ||
在注册接口的用户ID字段中填写 ${user_id},每次请求自动递增。 |
业务实战组合技巧
1、混合使用CSV+函数:
- 从CSV读取基础参数(如用户ID),用函数生成动态值(如订单金额=${__Random(10,1000)})。
- 示例:电商下单测试中,CSV提供商品ID和用户账号,函数生成随机购买数量和备注。
2、参数化与关联结合:
- 先通过CSV读取用户ID,在登录接口获取token,后续请求引用${token}(关联提取)。
3、数据准备建议:
- CSV文件数据需覆盖边界值(如最小/最大金额、极端用户名长度)。
- 敏感数据(如真实密码)建议脱敏或使用测试环境专用账号。
Jmeter断言
断言:让程序判断预期结果和实际结果是否一致。
提示: JMeter断 言是在请求的返回层面增加- - 层判断机制;因为请求成功了,并不代表结果- -定正确,因此需要检测机制提高测试准确性。
1.2 JMeter中常用断言
响应断言
- 实验tips:
- Main sample and sub - samples:表示断言将应用于主样本以及所有子样本
- Main sample only:意味着断言仅应用于主样本。
- Sub - samples only:即断言仅应用于子样本。
- JMeter Variable Name to use:允许指定一个JMeter变量名,断言将应用于该变量所引用的样本。
JSON断言
该组件用来对JSON文档进行验证,验证步骤如下:
- 首先解析JSON数据,如果数据不是JSON,则验证失败。
- 使用Jayway JsonPath 1.2.0中的语法搜索指定的路径。如果找不到路径,就会失败。
- 如果在文档中找到JSON路径,并且要求对期望值进行验证,那么它将执行验证操作。
添加方式:测试计划 --> 线程组 --> HTTP请求 --> (右键添加) 断言 --> JSON断言
持续时间断言(Duration Assertion)
该元件用于验证请求的响应时间是否在预期范围内。
工作原理
- 1.触发时机:当JMeter发送请求并收到响应后,会计算从请求发出到完整接收响应的总耗时(即“持续时间”)。
- 2.断言判断:将实际持续时间与用户在“持续时间(毫秒)”中设置的阈值比较: 实际时间 ≤ 设定阈值 → 断言通过(标记为绿色✓,不报错)。 实际时间 > 设定阈值 → 断言失败(标记为红色✗,在测试结果中显示错误)。
- 3.结果影响:断言失败不会中断测试执行,但会在聚合报告、查看结果树等监听器中高亮显示,帮助分析性能问题。
单位敏感:必须输入毫秒值(非秒!),例如“5秒”需填“5000”。
接下来,怎么看实践中接口之间有关联,那么就需要对请求参数,响应参数等进行提取
那么,大家知道有哪些提取器呢??