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

JMeter常用内置对象:vars、ctx、prev

在前文 Beanshell Sampler 与 Beanshell 断言 中,初步阐述了JMeter beanshell的使用,接下来归集整理了JMeter beanshell 中常用的内置对象及其使用。

注:示例使用JMeter版本为5.1

1. vars

如 API 文档 所言,这是定义变量的类,而这些变量是单个线程的本地属性。听起来有些难理解,其实我们只要知道,这个类的一系列方法基本是在针对变量进行取值和赋值,而且这个取值和赋值行为只对当前线程的变量生效,而非全部线程。

在所有方法中,有两个方法值得重点关注,其他方法感兴趣的可以阅读文档做进一步了解。这两个方法就是 get() 和 put()。

String get(String key) 方法,顾名思义,是取值方法。其要素如下:

  • 参数:String key,即一个字符串格式的key,
  • 返回值:参数 key 对应的 value,前提是存在这个键值对,否则会返回null
  • 作用:从内存中通过 key 获取对应的 value

void put(String key, String value) 方法,则是赋值方法,其要素如下:

  • 参数:String key,即一个字符串格式的键,String value,则是字符串格式的值
  • 返回值:void,即没有返回值
  • 作用:将一对 key 和 value 以键值对格式存入内存

下面通过一个示例,体会一下这两个方法,先建立脚本结构如下:

在这里插入图片描述

 【用户定义的变量】的作用是:向内存中存入一个变量,参数名为"name",参数值为 “mu”,类似{ “name” : “mu”} 这样一个键值对(仅为示例,JMeter并不是这么存储变量的)

接下来,在【BeanShell取样器】中写入代码:

在这里插入图片描述

  • vars.get(“name”):前面【用户定义的变量】中已经存储了 name 这个变量和其对应的值,这里我们便可以获取其值。
  • vars.put(“nameNew”,name + “gz”):将name 的值拼接"gz"后,赋值给变量nameNew,并存入内存。

运行脚本,察看结果树:

在这里插入图片描述

 

2. ctx和prev

更多信息请见:API文档

这个内置对象的类提供了很多方法,但在接口测试中常用的一个方法是 SampleResult getPreviousResult() ,其要素如下:

  • 参数:无
  • 返回值:SampleResult,即取样器结果
  • 作用:获取前一个取样器的结果

SampleResult类 【API文档】又提供了很多方法,以提供取样器结果的诸要素,例如:

  • String getRequestHeaders() :获取取样器结果的请求头
  • String getResponseCode():获取取样器结果的响应码
  • String getResponseHeaders() :获取取样器结果的响应头
  • String getResponseDataAsString():获取取样器结果的响应数据

其他方法请查阅API文档

下面以一个示例进行演示,首先创建下面的脚本:在这里插入图片描述

在【beanShell取样器】中写入以下语句:

import org.apache.jmeter.samplers.SampleResult;// 获取取样器结果
SampleResult result = ctx.getPreviousResult();
// 获取请求头
String RequestHeaders = result.getRequestHeaders();
// 获取响应头
String ResponseHeaders = result.getResponseHeaders();
// 获取响应码
String responseCode = result.getResponseCode();
// 获取响应数据
String responseData = result.getResponseDataAsString();
// 获取url
URL url = result.getURL();
//
//log.info(RequestHeaders);
//log.info(ResponseHeaders);
log.info(responseData);

 运行脚本,在控制台可以看到相应的日志输出:

在这里插入图片描述

JMeter还提供了一个内置对象 prev,该内置对象可以直接使用 SampleResult 类中的方法,将上面示例中的【beanShell取样器】的语句修改成下面的:

// 获取请求头
String RequestHeaders = prev.getRequestHeaders();
// 获取响应头
String ResponseHeaders = prev.getResponseHeaders();
// 获取响应码
String responseCode = prev.getResponseCode();
// 获取响应数据
String responseData = prev.getResponseDataAsString();log.info(RequestHeaders);
log.info(ResponseHeaders);
log.info(responseData);

 运行后,发现效果是一样的。

http://www.lryc.cn/news/104009.html

相关文章:

  • 【C++从0到王者】第十四站:list基本使用及其介绍
  • 正则表达式、常用的正则
  • ST官方基于米尔STM32MP135开发板培训课程(一)
  • 组件(lvs,keeplive,orm,mysql,分布式事务)
  • 《视觉SLAM十四讲》报错信息和解决方案
  • golang 设置http请求代理
  • 我的会议(会议通知)
  • css实现水平居中
  • c刷题(一)
  • webpack
  • 反复 Failed to connect to github.com port 443 after xxx ms
  • ARM裸机-11
  • centos7升级glibc
  • 【OnnxRuntime】在linux下编译并安装C++版本的onnx-runtime
  • C#基于OpenCv(OpenCvSharp) 的 fftshift, ifftshift 函数的实现
  • 【SpringBoot】笔记2
  • Spring事务传播机制详细讲解
  • kubernetes 集群搭建(kubeadm 方式)
  • 基于ARM+FPGA的驱控一体机器人控制器设计
  • docker 安装 字体文件
  • Vue.js与ASP.NET的结合,实现企业级应用的开发和部署
  • Uncaught SyntaxError: ‘‘ string literal contains an unescaped line break
  • Vue3+Vite+TypeScript常用项目模块详解
  • 数字电路(一)
  • Oracle也有回收站
  • 投稿注意!APA格式超全示例详解,原本28天能录用,可能要拖延2个月
  • 【Python】Web学习笔记_flask(1)——模拟登录
  • css单行文本省略号多行文本省略号
  • 信号槽中的函数重载
  • 计算机视觉(五)深度学习基础