当前位置: 首页 > 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.lryc.cn/news/599190.html

相关文章:

  • JMeter每次压测前清除全部以确保异常率准确(以黑马点评为例、详细图解)
  • Pytorch中register_buffer和torch.nn.Parameter的异同
  • npm init vite-app runoob-vue3-test2 ,npm init vue@latest,指令区别
  • LIMA:大语言模型对齐的“少即是多”革命——原理、实验与范式重构
  • VR 技术在污水处理领域的创新性应用探索​
  • 华为云DRS实现Oracle到GaussDB数据库迁移的全流程技术方案
  • GTSuite许可与网络安全
  • Android Studio 自带的官方模拟器,ABI这一列是x86_64,xABI这一列是arm64-v8a
  • Apache Ranger 权限管理
  • Android Studio 2024 内嵌 Unity 3D 开发示例
  • Android studio自带的Android模拟器都是x86架构的吗,需要把arm架构的app翻译成x86指令?
  • Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
  • 弹性网:基于神经网络的多组分磁共振弹性成像波反演与不确定性量化|文献速递-医学影像算法文献分享
  • LeetCode 127:单词接龙
  • Hive-vscode-snippets
  • Hive【Hive架构及工作原理】
  • Oracle MCP本地部署测试
  • js实现宫格布局图片放大交互动画
  • [python][flask]flask接受get或者post参数
  • 【调试Bug】网络在训练中输出NaN
  • 关于网络模型
  • 基于深度学习的图像分类:使用DenseNet实现高效分类
  • Lua(数据库访问)
  • 全新轻量化PHP网盘搜索引擎系统源码
  • SAP在未启用负库存的情况下,库存却出现了负数-补充S4 1709 BUG
  • NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
  • Day31| 56. 合并区间、738.单调递增的数字、968.监控二叉树
  • Chromadb 1.0.15 索引全解析:从原理到实战的向量检索优化指南
  • 规则分配脚本
  • Django集成Swagger全指南:两种实现方案详解