jmeter 基础知识

这篇博客详细介绍了JMeter的使用,包括用户自定义变量与用户变量的区别、HTTP信息头管理器的作用域、调试采样器的使用、线程并发设置、断言配置、JSON提取器和正则表达式的应用、压力测试的理解和实践。内容涵盖幼儿园系统接口测试、数据库操作以及JDBC请求结果作为参数的方法,还解决了JMeter在实际操作中遇到的问题,如连接数据库错误和报错处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐阅读链接: 小菠萝测试笔记 - 博客园 (cnblogs.com)

接口测试 - 知乎

参考文件:jmeter 组件学习_jmeter 内容类型-优快云博客

csv文件的读取方式

线程组设置

jmeter中常用的函数

1. 变量与参数化函数

  • __V(动态变量解析)

    用途:解析嵌套变量(JMeter 默认不支持 ${${var}} 这种写法)。
    语法${__V(variableName)}
    示例

    // 假设:
    // - varName = "token"
    // - token = "abc123"
    
    // 错误写法(JMeter 不支持嵌套变量)
    ${${varName}} → 无效
    
    // 正确写法(使用 __V)
    ${__V(${varName})} → 返回 "abc123"

  • __setProperty 函数的语法如下:
 

plaintext

${__setProperty(property_name,property_value,default_value)}
 
  • property_name:要设置的属性名称。
  • property_value:要设置的属性值。
  • default_value(可选):若 property_value 为空,就会使用这个默认值

__Random

  • 生成随机数(整数)。

    ${__Random(1,100,varName)}  // 生成1-100的随机数,存储到变量varName
  • __RandomString
    生成随机字符串。

    ${__RandomString(10,abcdef12345)}  // 从指定字符中生成10位随机字符串
  • __CSVRead
    从CSV文件读取数据(需配合 CSV Data Set Config 使用更灵活)。

    ${__CSVRead(data.csv,0)}  // 读取data.csv第一列的数据
  • __Property
    读取JMeter属性(全局变量)。

    ${__property(user.dir)}  // 获取JMeter启动目录

2. 字符串处理函数

  • __split
    分割字符串为数组。

    ${__split(apple,banana,orange,fruits)}  // 分割后通过${fruits_1}访问banana
  • __substring
    截取子字符串。

    ${__substring(Hello World,6,11,result)}  // 截取"World"
  • __replace
    替换字符串中的内容。

    ${__replace(123-456,-,)}  // 输出"123456"
  • __eval
    执行变量或表达式。

    ${__eval(${var1}_${var2})}  // 拼接变量var1和var2

3. 时间与日期函数

  • __time
    获取当前时间戳(可格式化)。

    ${__time(yyyy-MM-dd HH:mm:ss,)}  // 输出"2023-10-01 14:30:00"
  • __timeShift
    时间戳加减(支持时区)。

    ${__timeShift(yyyy-MM-dd,,P1D,,)}  // 当前日期加1天

4. 数学运算函数

  • __counter
    计数器(全局或局部递增)。

    ${__counter(FALSE,count)}  // 全局计数器,从1开始递增
  • __intSum
    整数求和。

    ${__intSum(1,2,3,sum)}  // 输出6
  • __RandomDate
    生成随机日期。

    ${__RandomDate(yyyy-MM-dd,2023-01-01,2023-12-31,)} 

5. 逻辑控制函数

  • __if
    条件判断。

    ${__if(${var}==1,value1,value2)}  // 若var=1返回value1,否则value2
  • __jexl3 / __groovy
    执行脚本逻辑(支持复杂表达式)。

    ${__jexl3(${var} > 10 ? "high" : "low")}

6. 特殊用途函数

  • __UUID
    生成唯一UUID。

    ${__UUID()}  // 输出如"550e8400-e29b-41d4-a716-446655440000"
  • __threadNum
    获取当前线程编号(从1开始)。

    ${__threadNum}  // 用于区分不同线程的数据
  • __TestPlanName
    获取当前测试计划名称。

    ${__TestPlanName}

高斯随机定时器

斯随机定时器(Gaussian Random Timer) 是一种用于模拟真实用户操作间隔的定时器

典型应用场景

  • 模拟用户阅读页面内容的思考时间。

  • 在连续操作之间添加随机间隔(如点击按钮、提交表单)。

  • 避免所有线程在同一时间点发送请求,减少服务器瞬时压力

定时器的作用范围: 

若放在线程组下面:该线程组内的所有采样器在执行前都会受到此定时器影响

若放在某个采样器下:只有该采样器在执行前会受到此定时器影响

  • 名称(Name):定时器的名称,可自定义,方便你识别。
  • 注释(Comment):对该定时器功能的简要说明,可选。
  • 平均延迟(Mean Delay):设定暂停时间的平均值,单位是毫秒。例如,若设为 1000,则平均暂停时间为 1 秒。
  • 标准差(Standard Deviation):它决定了延迟时间相对于平均值的分散程度。较大的标准差会使延迟时间更分散,较小的标准差则会让延迟时间更接近平均值

定时器

同步定时器

同步定时器用于将多个线程同步,让它们在同一时刻发起请求 

设置较多的线程数较短的 Ramp - Up Period 和合适的同步定时器分组线程数,能够模拟瞬间高并发的场景,用于测试系统的峰值处理能力

跨线程组传值 

方式1 :setproperty  

备注: 试过不可用

jmeter跨线程组保持登录(多线程共享cookie);两种方式 - 星空6 - 博客园

方式2:使用Property实现变量传递  

第一步: 是在一个线程组中设置全局变量

在JMeter中,使用Beanshell 后置处理器设置Property


//获取本地变量值
 
String path = vars.get("path1");
 
log.info("path1 = " + path);
 
// 在第一个线程组中设置Property变量
 
props.put("globalPath", path); 
 
log.info("globalPath = " + props.get("globalPath"));
 

解释:

  • • vars.get("path1")用于获取当前线程组中的变量。

  • • props.put("globalPath", path)将局部变量path1的值设置为全局变量globalPath,该变量可以被其他线程组访问

第二步:获取全局变量 (Property)

可以直接在http请求中使用: ${__P(globalPath)}

csv数据文件读取

在线程下添加csv data set config

- 注意创建文件的时候,文件的类型要是: csv,不要创建成了 txt格式的

-注意引用的时候,不要忘记  '' " 

关联接口的方式

后置处理器-xpath提取器

正则提取器

引用名称:为提取到的数据设置一个变量名,后续可在其他采样器中通过 ${变量名} 引用该数据。例如,设置为 “user_id”,后续使用 ${user_id} 就能获取提取到的值

正则表达式 : <tag>(.*?)</tag> : (.*?)表示匹配任意字符,?为匹配非贪婪模式,尽可能少的匹配字符

模板:用于指定提取结果的格式,通常使用 $1$ 表示提取到的第一个分组的数据。若正则表达式中有多个分组,可使用 $2$$3$ 等依次表示

模板参数值的含义

  • $1$$2$ 等形式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值