五、jmeter脚本参数化

news2025/6/10 12:14:27

目录

1、脚本参数化

1.1 用户定义的变量

1.1.1 添加及引用方式

1.1.2 测试得出用户定义变量的特点

1.2 用户参数

1.2.1 概念

1.2.2 位置不同效果不同

1.2.3、用户参数的勾选框 - 每次迭代更新一次

总结用户定义的变量、用户参数

1.3 csv数据文件参数化

1、脚本参数化

        在编写Jmeter脚本的时候,很多数据是不能写死固定的,比如注册的手机号码,那些做了唯一性检查的参数。此时我们就需要进行参数化,这样的值就可以动态发生变化。

        重复调用的数据也建议参数化:避免修改的时候多次修改。

        参数化: 先不写具体的值,然后使用变量先代替。

        定义参数的方法有四种:

                用户定义的变量

                用户参数

                csv数据文件参数化

                属性:后边我们讲到函数的时候再着重说

1.1 用户定义的变量

1.1.1 添加及引用方式

 添加方式1:在测试计划中直接创建

 添加方式2:配置元件 -> 用户定义的变量

        

引用方式:${变量名}   变量名命名包含数字字母下划线

我们可以使用调试取样器查看变量的引用结果, 按照下图添加

运行后我们可以看到,引用的参数已经被替换成具体的值

1.1.2 测试得出用户定义变量的特点

首先我们替换刚刚的值为一个随机数(具体的生成会在函数中讲,这里大家先用这个)

替换我们在测试计划中创建的user_id     

# 在000-999之间随机生成3位数 

${__Random(000,999,)}     

替换我们在线程组中创建的user_name     

# 在“你好我是小黄鸭”中随机生成3个字
${__RandomString(3,你好我是小黄鸭)} 

场景一:单个用户功能测试

运行后得到结果:我们只得到一个值,如果是用户注册,则每次都是新的数据,每次都可以成功获取。

场景二:并发用户(多线程)测试

运行后结果:多个并发用户数一次运行的结果都是一样的,如果是用户注册那只会有第一个用户是成功的,后边的用户都hu失败,因为用户已经存在了

场景三:多个线程组

场景:我们新建线程组2,但是不定义用户定义的变量,直接在调试取样器中调用user_name

 运行后结果:线程组1、线程组2得到的结果是一样的。 线程组2在没有定义“user_name”的情况下,直接引用也得到了值

通过上述测试得出用户定义变量的特点总结:

        1、每次启动值都会变一次,运行过程中不会改变值;所以在性能测试中很少用,因为不符合性能需求,一个用户不可能在系统中同一时间既登录有下单的,

        2、用户定义的变量可以跨线程组使用,一次定义全局使用。

1.2 用户参数

1.2.1 概念

        作为前置处理器,每次接口请求之前都会调用执行这个用户参数;在性能测试时多个并发用户数同时运行请求,用户参数的值针对每个并发用户会动态变化。

1.2.2 位置不同效果不同

        注:大家可以自己动手使用登录注册接口实操一下

1、如果用户参数放在线程组下,里面所有的请求都会每次去调用:作用域是整个线程组,下面的取样器都可以使用,那么每个取样器每次都会拿到新的值。

        引入问题: 注册新用户可以成功  但是登录也是新的用户没注册过就会报错;

2、如果放在某个接口下面,作用域就是这个接口,只有这个接口执行前会调用,其他接口执行之前不会调用执行这个前置;

      因为前置处理器在注册之前会调用,生成值保存在变量里;登录没有这个用户参数,就不会调用生成新数据,可以直接调用之前存的变量的值

1.2.3、用户参数的勾选框 - 每次迭代更新一次

迭代:线程组下所有的取样器执行一次,算一次迭代完成。

默认:为不勾选,每个请求都会执行一次用户参数。(如:下边4次请求,执行了四次用户参数)

勾选:一次迭代只执行一次用户参数,下次迭代时再执行第二次。(如下两次迭代)

总结用户定义的变量、用户参数

1、用户定义的变量:可以跨线程组被引用;用户参数不能夸线程组、只能作用于当前线程组

2、用户定义的变量,在每次启动运行的时候会获取一次值,在运行过程中值永远不会变。【循环和用户并发都不会变】;用户参数在每次运行时,都会动态获取值,每次调用的时候就会改变值;如果希望不要变化,就勾选每次迭代更新一次;或者放在第一个取样器下面就会调用一次。

3、重点掌握用户参数的时候用 因为性能里用户定义变量用很少。

4、用到的大部分的变量 - 后置处理器等都是用户参数类型变量不能跨线程使用。-- 后面通过属性实现

1.3 csv数据文件参数化

注:配置元件中添加,配置元件执行优先级最高,如果出错了后边不会运行,可能看不到查看结果数的结果(可以在工具日志里看到报错信息)

1.3.1 基础概念

 使用场景:批量执行并需要构造真实数据的时候,可以从数据库里导出数据到CSV文件中,接口通过CSV文件批量进行操作。

元件的每个配置解释:

        文件名:可以写绝对路径(浏览选择文件),也可以写相对路径(相对的起始点是jmx文件的位置)

1、相对路径: 相对的起始点是jmx脚本的位置 | 或者jmeter的bin文件目录两个都可以,所以写的文件名会默认去这两个目录下找这个csv文件;

2、推荐使用相对路径

3、如果写绝对路径,会自动适配/ 和\路径盘符,因为适配各个平台【win和mac】路径 【但是换台机器容易找不到文件】-- D:/apache-jmeter-5.2.1/bin/testdata.txt
4、文件是支持多种格式: txt 、csv 等

        文件编码:由选择的文件自身编码来选择

1、csv文件,字符集编码不一定是utf8。如果csv文件自身不是utf8编码的,而jmeter中csv选的字符集选择了utf8,可能出现中文字符集不同而导致乱码;

2、如果我们用数据的文件是 csv,数据又有中文,Jmeter获取数据的时候已经出现乱码了,用notepad++把csv文件打开,切换字符编码为utf8或者重新保存的时候选择编码为utf8。
3、使用csv文件容易产生乱码现象。所以我们一般建议文件选择用 txt;默认就是utf8编码

        变量名称:自己定义变量名,多个时候用英语的逗号隔开,这个逗号是固定的,与文件种的列分隔符没有关系

1、如果第一个变量接受第一列,第二个变量接受第三列,中间写逗号 + 空格【name,  ,pid
2、这个变量名就可以被后续的接口调用 ${name} ,拿到 csv 文件里对应列的值。

        忽略首行:True不要第一行,False要第一行(表头去掉的时候选True)

        分隔符:就要看你读取的文件的列与列的分隔符号(tab就是制表符\t;空格,默认csv文件是英文逗号)

        是否允许带引号:这个只能是txt文本操作,csv文件不会生效

1、False: 不允许带引号, 如果有引号就会当做数据的整体组成部分 “1344555555”

2、True :允许带引号 , 如果有引号就会自动去掉引号。

        遇到文件结束符再次循环吗?

1、True: 是的,继续循环,继续循环取文件中值。当文件内容从头到尾,全部都取了1次值之后,再从头开始取值。

2、False: 不,不再循环取值,如果还要用值,就是一个空值。 如果遇到数据是EOF数据 要检查这个地方配置数据库行数 +检查文本之后是否有空行。

        遇到文件结束符停止线程吗?

1、True: 是,停止线程,jmeter就会 停止运行。

2、False :不,继续运行, jmeter 还会继续跑
3、如果上面的两个配置冲突了  以上面的配置为准。后面配置失效。

以下是默认配置 

 

线程共享模式:

        所有现场(所有线程):所有线程共享,不管jmeter有多个线程组,总共有多少个线程,所有的线程都共用一份文件

1、所有的线程,在使用这个文件的时候, 排队使用文件中的数据。【第一个线程使用第一行,依次排列取值】

2、当2个线程组共享这个CSV文件: csv放测试计划下共享,否则不能跨线程组。

3、两个线程组执行: 几乎同时执行

         当前线程组:这个线程组的所有线程,共用一份数据。有多个线程时,有n个线程组那么内存中就有n份相同的数据。

单独线程组里单独读取自己内存的数据。不会混用。每个线程组都从头开始取。

        当前线程:每个线程(用户)私有一份,有n个线程,在内存中就有n份数据,运行中取值时都取自己的那一份,都是从头开始的。

如果设置循环,那么单个线程就会取第二行的值

 注:以上三种情况,最后一个【当前线程】选项占用内存最多。所以比较少用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:

RabbitMQ 各类交换机

为什么要用交换机? 交换机用来路由消息。如果直发队列,这个消息就被处理消失了,那别的队列也需要这个消息怎么办?那就要用到交换机 交换机类型 1,fanout:广播 特点 广播所有消息​​:将消息…

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…

未授权访问事件频发,我们应当如何应对?

在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的API…

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…