在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活。

Jmeter中关于BeanShell的有:

 

  1.BeanShell Sampler 取样器:完成Beanshell请求组件中定义的脚本功能;

  2.BeanShell PostProcessor 后置处理器:可通过编程方式获取对应请求的响应结果;  

  3.BeanShell PreProcessor 前置处理器:可通过编程方式在发起请求以前做预处理,比如编码或者加密;

  4.Beanshell 断言:可通过编程方式实现复杂的断言逻辑;

  5.Beanshell 计时器:编码实现条件定时功能;

  6.BeanShell Listener 监听器:监听Beanshell运行结果。

目前我使用较多的是前三种元件。使用过程中,就会使用一些内置变量,所以这也是今天的主要内容。

vars

vars 在 JMeter 内部,映射 org.apache.jmeter.threads 的 JMeterVariables 类,官方文档:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html

注意点:

  • vars 提供了对当前线程变量的读写能力
  • 所有的 JMeter 变量都是 java字符串
  • 把数据存放到一个 JMeter 变量中,需要先将它转换成字符串

getThreadName

方法声明

public String getThreadName()

功能

获取当前运行线程名

String threadName = vars.getThreadName();

log.info("threadName:"  + threadName);

getIteration

方法声明

public int getIteration()

功能

获取线程当前的迭代号

int itNum = vars.getIteration();
String num = String.valueOf(itNum);
log.info("itNum:" + num);

这里有个注意点,就是在开始时候提到的,数据放到变量中,需要将数据转换成String类型。

put

方法声明

public void put(String key, String value)

Parameters:

key - the variable name

value - the variable value

功能

创建或更新字符串变量

创建变量

vars.put("name","温一壶清酒");
vars.put("age","5"); String varsName = vars.get("name");
log.info("varsName:"+ varsName);
String varsAge = vars.get("age");
log.info("varsAge:"+ varsAge);

注意点:age字段值5,需要是字符串类型,否则会报错。

Error in method invocation: Method put( java.lang.String, int ) not found in class'org.apache.jmeter.threads.JMeterVariables'

修改变量

vars.put("name","温一壶清酒 博客园");
String varsName = vars.get("name");
log.info("varsName:"+ varsName);

get

方法声明

public String get(String key)

功能

获取变量的值并将其转换为字符串,若变量存在则将值转换为字符串,否则返回 null

String varsSex = vars.get("sex");
log.info("varsSex:"+ varsSex);

在put方法中,已经使用了get的方法,这里列举个获取不到变量的情况,返回null

putObject

方法声明

public void putObject(String key,Object value)

Parameters:

key - the variable name

value - the variable value

功能

创建或更新一个非字符串变量。

vars.putObject("number",8);
vars.putObject("list",[2,4,6,8,10]);
vars.putObject("array",[1,3,5,7,9,11] as int[]);
vars.putObject("map",["name":"温一壶清酒","source":"博客园"]);
log.info("number:"+ vars.getObject("number").toString());
log.info("list:"+ vars.getObject("list").size());
log.info("array:"+ vars.getObject("array").length);
log.info("map:"+ vars.getObject("map").get("name"));

getObject

方法声明

public Object getObject(String key)

功能

获取变量的值(不转换为字符串)。若变量不存在则返回null

remove

方法声明

public Object remove(String key)

功能

删除一个变量,并返回变量的值,若变量不存在则返回 null

vars.put("name","温一壶清酒 博客园");
vName = vars.remove("name");
log.info("vName:"+ vName); vSex = vars.remove("sex");
log.info("vSex:"+ vSex);

props

props 映射 java.util 的 Properties 类。java.util.Properties 这个类是线程安全的;多个线程可以共享一个 Properties 对象

vars跟props的区别

  • vars 是对变量进行读写操作, 而 props 主要是对属性进行读写操作
  • vars 只能在当前线程组内使用,props 可以跨线程组使用 ,因为属性可以跨线程组但是变量不行
  • vars 只能保存 String 或者 Object,props 可以是 Hashtable 或者 Object

getProperty

方法声明

public String getProperty(String key)

public String getProperty(String key, String defaultValue):当 key 不存在则返回默认值

功能

用指定的key在此属性列表中搜索属性,如果在此属性列表中未找到该key,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回 null

timeFormat = props.getProperty("jmeter.save.saveservice.timestamp_format");
log.info("timeFormat:"+ timeFormat); propsTest = props.getProperty("jmeter.save.saveservice.timestamp");
log.info("propsTest:"+ propsTest); propsTest = props.getProperty("jmeter.save.saveservice.timestamp","温一壶清酒 博客园");
log.info("propsTest:"+ propsTest);

get

方法声明

public synchronized V get(Object key)

功能

获取属性值,跟 getProperty 类似

pTimeFormat = props.get("jmeter.save.saveservice.timestamp_format");
log.info("pTimeFormat:"+ pTimeFormat); pPropsTest = props.get("jmeter.save.saveservice.timestamp");
log.info("pPropsTest:"+ pPropsTest);

setProperty

方法声明

public Object setProperty(String key,String value)

功能

设置属性值

props.setProperty("pName","温一壶清酒");
propsName = props.getProperty("pName");
log.info("propsName:"+ propsName);

put

方法声明

public synchronized V put(Object key)

功能

设置属性值,跟 setProperty 类似

props.put("pName","温一壶清酒");
pPropsName = props.get("pName");
log.info("pPropsName:"+ pPropsName);

propertyNames

方法声明

public Enumeration<?> propertyNames()

功能

返回属性列表中所有key的枚举,如果在主属性列表中未找到同名的key,则包括默认属性列表中不同的key

propsNames = props.propertyNames();
propsNames.each{
log.info(it)
}

size

方法声明

public int size()

功能

返回有多少个属性

pPropsCount = props.size();
log.info("pPropsCount:"+ pPropsCount);

remove

方法声明

public synchronized V remove(Object key)

功能

删除一个变量,并返回变量的值,若变量不存在则返回 null

props.put("pName","温一壶清酒");
rName = props.remove("pName");
log.info("rName:"+ rName); rSex = props.remove("sex");
log.info("rSex:"+ rSex);

prev

prev 提供对当前取样器结果的访问能力,映射 org.apache.jmeter.samplers 的 SampleResult 类

官方文档: https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

getResponseCode

方法声明

public String getResponseCode()

功能

获取响应状态码

responseCode = prev.getResponseCode() ;
log.info("responseCode:" + responseCode); 2022-10-04 15:34:29,057 INFO o.a.j.u.BeanShellTestElement: responseCode:200

isResponseCodeOK

方法声明

public boolean isResponseCodeOK()

功能

判断响应状态码是否为OK对应的状态码(200),结果只有true和false

responseCodeBoolean = prev.isResponseCodeOK();
log.info("responseCodeBoolean:" + responseCodeBoolean); 2022-10-04 15:36:35,077 INFO o.a.j.u.BeanShellTestElement: responseCodeBoolean:true

getThreadName

方法声明

public String getThreadName()

功能

获取线程名


prevThreadName = prev.getThreadName();
log.info("prevThreadName:" + prevThreadName); 2022-10-04 15:39:17,955 INFO o.a.j.u.BeanShellTestElement: prevThreadName:prevThreadName

getResponseDataAsString

方法声明

public String getResponseDataAsString()

功能

获取String类型的响应结果

prevResponse = prev.getResponseDataAsString();
log.info("prevResponse:" + prevResponse);

getStartTime

获取请求开始时间

getEndTime

获取请求结束时间

getSamplerData

获取请求内容

好了,以上就是平时经常用到的一些内置变量的方法,还有其他的方法,可以参考源码或官方文档。

Jmeter——BeanShell 内置变量vars、props、prev的使用的更多相关文章

  1. jmeter 常用内置变量

    1. vars   API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html vars.get(& ...

  2. Python每日一练------内置函数+内置变量+内置模块

    1.内置函数 Python所有的内置函数     Built-in Functions     abs() divmod() input() open() staticmethod() all() e ...

  3. Jmeter之Bean shell使用-常用内置变量

    Bean Shell常用内置变量   JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.l ...

  4. jmeter常用的内置变量

    1. vars   API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html vars.get(& ...

  5. Robot Framework 内置变量

    转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内部提供了一下直接可用的内置变量 1. 操作 ...

  6. Python - 常用内置变量

    直接上代码 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 这是注释__doc__会打印这部分内容 "&qu ...

  7. Maven系列三Maven内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  8. Maven的内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  9. nginx的那些内置变量

    nginx在配置文件nginx.conf中可以使用很多内置变量,配置如下: location /info { add_header 'Content-Type' 'text/html'; echo & ...

随机推荐

  1. cad工具快速选择特性里面是空的解决方法

    工具-选项-文件中,支持文件搜索路径中 添加,再浏览,找到"C:\Program Files\Common Files\Autodesk Shared"确定就OK了.

  2. Python 阿里云盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次阿里云盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.pyautogui 分析 最近在做中国庭审公开网数据分析的时 ...

  3. HDFS核心原理

    HDFS 读写解析 HDFS 读数据流程 客户端通过 FileSystem 向 NameNode 发起请求下载文件,NameNode 通过查询元数据找到文件所在的 DataNode 地址 挑选一台 D ...

  4. 在django中前后端传输数据的编码格式(contentType)

    写在前面 在django中,针对前后端传输数据的编码格式,我们主要研究的是post请求:因为get请求传输的数据往往是直接放在url的后面的!如: url?username=zhang&pas ...

  5. Redis 16 哨兵模式

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 主从切换 ...

  6. Clickhouse基准测试实践

    1.概述 本篇博客将对MySQL.InfluxDB.Clickhouse在写入时间.聚合查询时间.磁盘使用等方面的性能指标来进行比较. 2.内容 比较的数据集,是使用的Clickhouse官网提供的6 ...

  7. 字节微服务HTTP框架Hertz使用与源码分析|拥抱开源

    一.前言 Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp.gin.echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性 ...

  8. mysql explain总结

    Explain 包含字段 id select_type table type possible_keys key key_len ref rows extra 字段解释 1. id id 相同则执行顺 ...

  9. flutter系列之:flutter中常用的container layout详解

    目录 简介 Container的使用 旋转Container Container中的BoxConstraints 总结 简介 在上一篇文章中,我们列举了flutter中的所有layout类,并且详细介 ...

  10. File类、FileOutputStream

    day01 File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小, ...