当前位置: 首页 > news >正文

性能测试-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_urlhttps://api.example.com接口基础地址
app_versionv2.1应用版本号
channelofficial渠道标识(官方/第三方)

​请求中使用参数​​:
在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:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. Main sample and sub - samples:表示断言将应用于主样本以及所有子样本
  2. Main sample only:意味着断言仅应用于主样本。
  3. Sub - samples only:即断言仅应用于子样本。
  4. JMeter Variable Name to use:允许指定一个JMeter变量名,断言将应用于该变量所引用的样本。

JSON断言

该组件用来对JSON文档进行验证,验证步骤如下:

  1. 首先解析JSON数据,如果数据不是JSON,则验证失败。
  2. 使用Jayway JsonPath 1.2.0中的语法搜索指定的路径。如果找不到路径,就会失败。
  3. 如果在文档中找到JSON路径,并且要求对期望值进行验证,那么它将执行验证操作。

添加方式:测试计划 --> 线程组 --> HTTP请求 --> (右键添加) 断言 --> JSON断言
在这里插入图片描述

持续时间断言(Duration Assertion)

在这里插入图片描述
该元件用于验证​​请求的响应时间是否在预期范围内​​。
工作原理​​

  • 1.触发时机​​:当JMeter发送请求并收到响应后,会计算从请求发出到完整接收响应的总耗时(即“持续时间”)。
  • 2.断言判断​​:将实际持续时间与用户在“持续时间(毫秒)”中设置的阈值比较: 实际时间 ≤ 设定阈值​​ → 断言通过(标记为绿色✓,不报错)。 实际时间 > 设定阈值​​ → 断言失败(标记为红色✗,在测试结果中显示错误)。
  • 3.​​结果影响​​:断言失败不会中断测试执行,但会在聚合报告、查看结果树等监听器中高亮显示,帮助分析性能问题。
    单位敏感​​:必须输入​​毫秒值​​(非秒!),例如“5秒”需填“5000”。
    在这里插入图片描述
    接下来,怎么看实践中接口之间有关联,那么就需要对请求参数,响应参数等进行提取
    那么,大家知道有哪些提取器呢??

实践是检验真理的唯一标准

http://www.dtcms.com/a/353019.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(21):文法+单词第7回3
  • 学习嵌入式的第二十八天——线程
  • 趣味学Rust基础篇(变量与可变性)
  • RCLAMP0504M.TBT电子元器件Semtech 低电容、四通道TVS二极管阵
  • Web漏洞
  • More Effective C++条款12:理解抛出一个异常与传递一个参数或调用一个虚函数间的差异
  • 火焰传感器讲解
  • 函数指针的简化
  • 毕业项目推荐:27-基于yolov8/yolov5/yolo11的电塔缺陷检测识别系统(Python+卷积神经网络)
  • MCP模型库深度解析:AI智能体工具调用生态的多元化与规模化发展
  • SciPy科学计算与应用:SciPy图像处理入门-掌握scipy.ndimage模块
  • 1 vs 10000:如何用AI智能体与自动化系统,重构传统销售客户管理上限?
  • 从高层 PyTorch 到中层 CUDA Kernel 到底层硬件 Tensor Core
  • fortran notes[2]
  • More Effective C++ 条款11:禁止异常流出析构函数之外
  • 自学嵌入式第二十九天:Linux系统编程-线程
  • 零后端、零配置:用 AI 编程工具「Cursor」15 分钟上线「Vue3 留言墙」
  • 从“找不到”到“秒上手”:金仓文档系统重构记
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Linux系统使用ADB同时连接多个Android设备
  • 一、Mac(M1)本地通过docker安装Dify
  • 【Day 35】Linux-主从复制的维护
  • C语言中的static vs C++中的static:相同关键字,不同境界
  • golang13 单元测试
  • KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
  • uniapp中 ios端 scroll-view 组件内部子元素z-index失效问题
  • 大数据毕业设计选题推荐-基于大数据的城市空气污染数据分析系统-Spark-Hadoop-Bigdata
  • Elasticsearch三大属性详解:enabled、index与store
  • 【问题思考】为什么SVM中的w和超平面是垂直的?【SVM】【gemini生成】
  • Web转uni-app