首页 > 其他分享 >JMeter 动态参数赋值实践

JMeter 动态参数赋值实践

时间:2024-10-20 10:47:22浏览次数:9  
标签:HTTP +-- userId 用户 取样器 参数 JMeter 赋值

目录

前言

单线程 + 用户参数

场景说明

实战结果

配置明细

单线程 + CSV Data Set Config

场景说明

实践结果

配置明细

多线程循环单次执行

场景说明

实践结果

配置明细

单线程 + 控制器 + 用户自定义变量 + 用户参数

场景说明

实战结果

配置明细

多并发 + 多接口 + 同步定时器

场景说明

实践结果

配置明细

总结


前言

日常接口测试/性能测试使用 jmeter 实现动态参数赋值,常规用法都是配置 csv 文件,然后接口直接从 csv 文件里面去获取,但是这种方式有一个弊端,就是脚本文件迁移的时候,必须一起带上 csv 才行,不然脚本位置变了,里面 csv 的文件路径没有同步更新,脚本执行就会受影响了。但是除去 csv 的方式,尤其是小数据量的情况下,是可以通过用户自定义变量或者用户参数来实现的,接下来使用他们来做演示,看各自不同组合配置产生的结果如何。

单线程 + 用户参数

场景说明

测试计划 (顺序执行: true)
|
+-- 线程组 (并发用户数: 1, 循环次数: 10)
    |
    +-- 用户参数(user parameter)
      | 变量用户id对应的不同用户值: userId_1, ..., userId_n)
      | 每次迭代更新一次:false/true,结果一样
    |
    +-- HTTP 取样器 (调用接口,并在入参处引用 ${userId})
    |
    +-- HTTP 取样器 2(后续接口调用...)
    |
    ...
    |
    +-- HTTP 取样器 N (整个链路的最后一环)

实战结果

循环 10 次,每次的接口入参值都相同,且值为 userId_1

配置明细

图片图片图片图片图片

单线程 + CSV Data Set Config

场景说明

测试计划 (顺序执行: true)
|
+-- 线程组 (并发用户数: 1, 循环次数: 10)
    |
    +-- CSV Data Set Config(变量为 userId)
    |
    +-- HTTP 取样器 (调用接口,并在入参处引用 ${userId})
    |
    +-- HTTP 取样器 2(后续接口调用...)
    |
    ...
    |
    +-- HTTP 取样器 N (整个链路的最后一环)

实践结果

单线程 N 次循环 结合 CSV 外部参数化配置,可实现动态取参,且值不重复

配置明细

图片图片图片图片

多线程循环单次执行

场景说明

测试计划 (顺序执行: true)
|
+-- 线程组 (并发用户数: 10, 循环次数: 1)
    |
    +-- 用户参数(user parameter)
      | 变量用户id对应的不同用户值: userId_1, ..., userId_n)
      | 每次迭代更新一次:false/true,结果一样
    |
    +-- HTTP 取样器 (调用接口,并在入参处引用 ${userId})
    |
    +-- HTTP 取样器 2(后续接口调用...)
    |
    ...
    |
    +-- HTTP 取样器 N (整个链路的最后一环)

实践结果

线程并发数为 n,用户参数里面的用户个数为 m

若 n <= m, 则只执行 n 次的用户请求,此时结果入参值动态获取

若 n > m, 则会执行 n 次的用户请求,超出 m 会重新开始读取用户参数

这种做法存在一个问题:看到的执行结果是乱的,因为并发执行的时候,本身就是无序的,没办法做到第一个用户执行完毕后第二个用户执行。

配置明细

图片图片图片图片图片

单线程 + 控制器 + 用户自定义变量 + 用户参数

场景说明

测试计划 (顺序执行: true)
|
+-- 线程组 (并发用户数: 1, 循环次数: 1)
    |
    +-- ForEach Controller(确定变量,及值的格式如:e=a_1)
        |
        +-- 用户对应的变量 (如:a_1 = 1, a_2 = 2)
        |
        +-- IF Controller(如环境 A, ${e} == 1)
            |
            +-- 用户参数(user parameter 环境 A)
                |   (userId_1)
                | 每次迭代更新一次:false/true,结果不同
        |
        +-- IF Controller(如环境 B, ${e} == 2)
            |
            +-- 用户参数(user parameter 环境 B)
                |   (userId_2)
                | 每次迭代更新一次:false/true,结果不同
        |
        +-- 事务控制器
            |
            +-- HTTP 取样器 (调用接口,并在入参处引用 ${userId})
            |
            +-- HTTP 取样器 2(后续接口调用...)
            |
            ...
            |
            +-- HTTP 取样器 N (整个链路的最后一环)

实战结果

上述配置方式,相当于是循环里面通过判断获取对应目标用户参数,通过这种方式来控制先执行那个用户参数后执行那个用户参数,看到的执行记录是有序的

配置明细

图片图片图片图片图片图片图片图片图片图片

多并发 + 多接口 + 同步定时器

场景说明

测试计划 (顺序执行: true)
|
+-- 线程组 (并发用户数: 8, 循环次数: 1)
    |
    +-- 用户参数(user parameter 环境 A)
      |   (userId_1)
      | 每次迭代更新一次:false/true,结果不同
    +-- 事务控制器
      |-- 同步定时器
      |
      +-- HTTP 取样器 (调用接口,并在入参处引用 ${userId})
      |
      +-- HTTP 取样器 2(后续接口调用...)
      |
      ...
      |
      +-- HTTP 取样器 N (整个链路的最后一环)

实践结果

未增加定时器,不同用户执行同一接口无序

增加定时器后,不同用户可同时执行同一接口

配置明细

图片图片

总结

  1. 单线程 + CSV 参数化配置,可实现参数动态赋值;

  2. 单线程 + 循环控制器 + 用户参数,可实现不同参数赋值;

  3. 多线程 + 用户参数,可实现不同参数赋值;

  4. 多并发 + 多接口 + 同步定时器,可实现高并发下接口顺序执行;

标签:HTTP,+--,userId,用户,取样器,参数,JMeter,赋值
From: https://blog.csdn.net/streamlong/article/details/142983257

相关文章

  • 关于Jmeter聚合报告Aggregate Report的认识偏差
    目光凝视远方的同时,也请夯实脚下土地。一般我们说起接口的性能指标如何,都离不开rt,但是你真的清楚jmeter相关报告里面关于rt的解释?往往一个小小的指标解读偏差,会带来一场风暴。AggregateReport(聚合报告)这份聚合报告,相信很多同学都不陌生,单纯看这个结果,相信不同的人......
  • 使用Python爬取某车网参数详情并解析数据
    前言在本文中,我们将介绍如何使用Python来获取某汽车网站的参数详情,并将有用的数据提取出来保存到本地。我们将使用requests库来发送网络请求,同时利用随机User-Agent和代理IP来模拟真实用户的访问行为,以避免被服务器封禁。目标网站1.准备工作首先,我们需要安装一些必要......
  • Day19--可变参数
    Day19--可变参数从JDK1.5开始,Java支持传递同类型的可变参数给一个方法。在方法声明中,在指定参数类型后加一个省略号(...)。一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。有时候,代码里面的方法重载有很多,看着很繁琐,这就需要......
  • 帝国网站后台css怎么修改?修改网站后台参数?
    修改帝国网站后台的CSS样式可以通过以下几种方法实现:直接修改源文件:找到帝国CMS安装目录下的后台样式文件,通常位于e/admin/style目录下。使用文本编辑器打开对应的CSS文件(如style.css)进行编辑。修改完成后保存文件,刷新后台页面查看效果。通过自定义CSS文件:在后台模板......
  • Day18--命令行传递参数
    Day18--命令行传递参数命令行传参有时候你希望运行一个程序的时候再传递给它消息。这要靠传送命令行参数给main()函数实现。publicclassCommandLine{publicstaticvoidmain(Stringargs[]){for(inti=0;i<args.length;i++){System.out.println("......
  • 三周精通FastAPI:2 路径参数以及声明路径参数的类型
    路径参数¶FastAPI支持使用Python字符串格式化语法声明路径参数(变量):fromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_item(item_id):return{"item_id":item_id}这段代码把路径参数 item_id 的值传递给路径函数的......
  • Linux内核调优参数配置
    在Linux中,内核调优涉及到对系统内核的各种参数进行优化,以适应不同的工作负载和场景。这些参数主要存储在两个地方:一个是运行时动态可调的/proc/sys目录下的文件,另一个是持久化的配置文件/etc/sysctl.conf。1.内核调优配置文件/etc/sysctl.conf:这是最常用的内核参数配置文件,用......
  • Gin框架,body参数只能读取一次
     typeValidateDatastruct{ model.User Namestring`json:"name"validate:"required"`//非空 Ageuint8`json:"age"validate:"gte=0,lte=100"`//0<=type<=100 Email......
  • 交错数组 二维数组 参数
    internalclassProgram{staticvoidMain(string[]args){int[,]arr=CreateArr();//int[,]arr1={{1,2},{2,3}};二维数组中不能使用new关键字//int[][]arr2={newint[]{}};交错数组......
  • C++缺省参数
    1.缺省参数是什么?在定义函数时给的参数设置默认值,如果在函数调用时没有传入具体的参数,就使用这个默认值。2.为什么要设置缺省参数?方便给函数参数设置默认值,调用函数的代价更小。3.怎么使用缺省参数?在定义函数时,从右往左设置缺省参数,中间不能有间隔。调用函数时,从左往右传入参......