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

Jmeter的元件使用介绍:(四)前置处理器详解

Jmeter的前置处理器可以用来在取样器执行前做一些数据准备操作,也需要注意使用的作用域问题。常用的前置处理器有:用户参数、BeanShell预处理器、JDBC预处理器。

一、用户参数
【用户参数】与前面介绍过的【用户定义的变量】有相似之处,先来介绍下用户参数的使用方法再去区分两者的异同。
1、注意作用域的问题,(1)如果是放在测试计划下,则整个测试计划都可以引用该处定义的变量
(2)如果是放在线程组下,则只能在所放的线程组下引用
(3)如果是在请求下,则只能在具体请求下引用

2、用户参数有名称,用户_N的定义,下面进行实例讲解。
实例1:只定义一个用户,则在引用变量的时候,永远都是这个用户的值。如图:

 

 

执行结果:

实例2:定义多个用户,则在引用变量的时候,会进行顺序循环取对应用户的值。如图:

 

执行结果:

 

3、【用户参数】与【用户自定义的变量】的区别:
(1)【用户参数】可以给每个参数赋多个值,而【用户自定义的变量】只能赋一个值。

 

此处引发了一个思考,如果【用户参数】与【用户定义的变量】的变量名称重复的时候,会引用哪个值呢?答案是会引用到【用户参数】的值,此处是就近原则,离取样器执行前最近的一次赋值为准。如此案例中,【用户参数】与【用户定义的变量】都含有name变量,则在执行的时候,会引用了【用户参数】的值。
执行结果:

(2)【用户参数】会在每次取样器执行之前都运行一次,而【用户自定义的变量】只会运行一次,这里使用在两个元件中都使用time函数举例

 

 

 

执行结果:

 

 

可以观察到,用户参数time1的变量值每次执行请求前都会变化一次,而用户定义的变量time2的变量值都不会变。

二:Beanshell前置处理器
该元件功能十分强大,可以编写Java代码进行一些数据准备等操作。
1、先介绍下Jmeter里Beanshell的内置变量操作
(1)vars变量:用来操作Jmeter的变量值得,常用的方法有:
(1.1)vars.get("key"):从Jmeter变量中获取指定键的值
(1.2)vars.put("key","value"):向Jmeter变量设置变量键值对
例子:


附上代码:
String name=vars.get("name"); //此处获取Jmeter的变量值转换成Java的变量
log.info("获取到的变量值为:="+name);//打印一下获取的变量值

vars.put("phone","13211111111"); //向Jmeter变量中设置一个phone变量
log.info("设置phone的变量值为:="+vars.get("phone")); //打印一下设置的phone值
通过此变量可以对Jmeter变量进行设置或者获取操作。点击下右上角的三角形即可查看日志。
日志信息为:

 

(2)ctx变量:用来获取当前线程的上下文信息,常用方法:
(2.1)ctx.getVariables().get("key"):等价于vars.get("key"),从Jmeter变量中获取指定键的值
(2.2)ctx.getProperties().getProperty("key"):获取Jmeter的属性,这里可以获取Jmeter.properties配置文件下的属性。
(2.3)ctx.getThreadNum():获取当前线程组编号
例子:

附上代码:
log.info("=通过ctx形式获取一下Jmeter存储的变量:="+ctx.getVariables().get("name"));
log.info("=通过ctx形式获取一下Jmeter属性:="+ctx.getProperties().getProperty("sampleresult.default.encoding")); //此处验证下获取我们先前配置的编码属性
log.info("=====通过ctx形式获取一下当前线程编号:="+ctx.getThreadNum());

日志展示:

(3)log变量:用来记录日志,会写进jmeter.log文件中,常用方法:
(3.1)log.info():打印普通日志
(3.2)log.warn():打印警告日志
(3.3)log.error():打印错误日志
例子:

(4)props变量:用来操作jmeter的属性的,常用方法有:
(4.1)props.get("propName"):获取Jmeter的指定属性信息
(4.2)props.put("propName","propValue"):给Jmeter设置属性
(4.3)props.containsKey("key"):判断Jmeter是否存在指定key的属性
(4.4)props.contains("values"):判断Jmeter是否存在指定value的属性
例子:


附上代码:
log.info("通过props变量获取下Jmeter的编码属性:"+props.get("sampleresult.default.encoding"));
log.info("通过props变量判断下Jmeter的编码属性是否存在:"+props.containsKey("sampleresult.default.encoding"));

2、再来介绍下Beanshell的自带数组传参的使用
先看图:


Beanshell是支持将变量值传入到这里的数组的,多个值用“空格”隔开,下面举个例子:

 

3、还有更高级的功能,比如:通过导入外部Jar包,调用外部Jar包的方法,完成自定义的功能,后续介绍到高级部分再进行补充

4、下面进行实际使用
(1)、在取样器执行前,准备一些必要的参数,如时间参数

通过这个前置处理器提供了这个time变量参数,就可以在取样器中使用该变量了

执行结果:

三:JDBC预处理器
用于在执行JDBC请求前,进行一些数据准备等操作,比如脚本在执行前,需要在数据库新建一些记录等数据。
例子:通过JDBC预处理器向数据库中插入一些数据。

(1)执行JDBC预处理器前的表数据:

(2)编写JDBC预处理器

(3)执行后,查看数据库,数据新增成功了

(4)对上述例子可以改进下,有时候我们造数据的时候,可能是需要随机生成一些测试数据的,那么我们就可以通过随机变量传进去。

 

 

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

相关文章:

  • 告别静态文档!Oracle交互式技术架构图让数据库学习“活“起来
  • 多步相移小记
  • epoll_event数据结构及使用案例详解
  • springboot(3.4.8)整合mybatis
  • 分布式方案 一 分布式锁的四大实现方式
  • android app适配Android 15可以在Android studio自带的模拟器上进行吗,还是说必须在真机上进行
  • HashMap底层实现原理与核心设计解析
  • AI同传领域,字节跳动与科大讯飞激战进行时
  • 【Linux系统】基础IO(下)
  • 深度学习篇---图像数据采集
  • classgraph:Java轻量级类和包扫描器
  • 深度学习篇---深度学习中的卡尔曼滤波
  • Vmware VSAN主机停机维护流程
  • RAG、Function Call、MCP技术笔记
  • Java中给List<String>去重的4种方式
  • 数据结构:对角矩阵(Diagonal Matrix)
  • Android UI 组件系列(八):ListView 基础用法与适配器详解
  • python语法笔记
  • 《剑指offer》-数据结构篇-链表
  • GDB调试命令学习
  • spring boot项目使用Spring Security加密
  • k8s开启审计日志
  • 【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验
  • Fluent遇上AI:深度学习重塑计算流体动力学的未来
  • 【记录】C++生产者 / 消费者 案例
  • 刷题日记0725
  • 篇五 网络通信硬件之PHY,MAC, RJ45
  • PytorchLightning最佳实践基础篇
  • 谷歌母公司Alphabet发布超预期业绩,提高全年资本支出至850亿美元
  • 从 Elastic 到 ClickHouse:日志系统性能与成本优化之路