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

Jmeter- Beanshell语法和常用内置对象(网络整理)

 在利用jmeter进行接口测试或者性能测试的时候,我们需要处理一些复杂的请求,此时就需要利用beanshell脚本了,BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和java是可以无缝衔接的。beanshell由于内置了一些特有的变量,没法在一些集成代码工具上去调试。今天就和大家分享下常用的2个代码例子,大家可以直接拿来稍微修改下就可以使用。

Bean Shell内置变量大全

     首先大家需要掌握bean shell本身自带的一些内置变量和一些方法。JMeter在其BeanShell中内置了变量,用户是通过这些变量与JMeter进行交互。

1.log 打印日志,写入信息到jmeber.log文件。
2.SampleResult 获取SampleResult对象,能通过这个对象获取想要的信息。
3.Response 获取Response对象,能通过这个对象获取响应信息。
4.Failure 查看接口调使用能否成功,假如返回false是成功的,true是失败的。
5.FailureMessage 失败信息,没有设置的时候失败信息是空的,能set这个信息。
6.ResponseData 获取response body类型是byte[]。
7.ResponseCode 返回接口code成功是200。
8.ResponseMessage 获取msg成功是OK。
9.ResponseHeaders 获取接口服务端返回的头部信息。
10.RequestHeaders 获取用户端请求的头部信息。
11.SampleLabel 获取接口请求的名称。
12.SamplerData 获取请求的url和body。
13.ctx 代表上下文信息,能直接用。
14.vars即JMeterVariables,操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),常用方法:
  a) vars.get(String key):从jmeter中获得变量值;
  b) vars.put(String key,String value):数据存到jmeter变量中;
15.prev 获取前面的sample返回的信息,常用方法:
  a) getResponseDataAsString():获取响应信息。
  b) getResponseCode() :获取响应code。

1:Beanshell的基本语法
1.1:Beanshell的For循环与集合

String a = "aaa";
int b = 111;

List list  = new ArrayList();
//list集合只能保存String类型
list.add(a);
list.add(b.toString());
//普通for循环的写法
for(int i = 0; i<list.size();i++){
log.info(">>>>>>>>>>>");
log.info(list.get(i));
}
//增强for循环的写法
for(object : list){
log.info("==========");
log.info(object);
}

1.2:Beanshell的数组的写法

String[] str1 = new String[]{"aa","bb","cc"};//new一个String[]一维数组

String[][] str2 = new String[][]{{"AA","BB"},{"CC","DD"},{"EE","FF"}};
//遍历str1这个一维数组
for(int i = 0; i< str1.length ; i++){
log.info(str1[i]);
}
//遍历第二个二维数组
for (String[] strings : str2) {

for(int i = 0; i< strings.length ; i++){

log.info(strings[i]);
}
}

1.3:Beanshell定义一个函数 并调用

//定义一个方法
public void addlist(List list){

list.add("aaa");
list.add("bbb");
list.add("ccc");
}

List list = new ArrayList();
//调用方法
addlist(list);
//遍历list集合
for(int i = 0; i < list.size(); i++){
log.info(list.get(i));
}

2:Beanshell常用的内置对象
2.1:bsh.args对象获取数组参数

2.2:vars内置对象的使用
A:示例定义一个用户自定义变量

B:vars.get(String key)获取String变量 

vars.put(String key,Value)放置一个Map到vars 

2.3:vars内置对象put和get Object对象
如果需要获取或者放置非String类型数据 需要用putObject()和getObject()

//Beanshell vars.putObject() vars.getObject()的使用
List list = new ArrayList();

list.add("aaa");
list.add("bbb");
//putObject()可以在vars对象中放置Object类型对象
vars.putObject("list",list);
//===========================
//获取Object list对象
Object Value = vars.getObject("list");
//log.info只能输出String类型变量
log.info(Value.toString());

3:Beanshell的常用内置对象-ctx
3.1:ctx内置对象getPreviousResult()方法 调用请求/响应数据

ctx内置对象来自于JMeterContext 查看Jmeter API发现有下列get方法可以获取请求/响应数据

//SampleResult需要import对象
import org.apache.jmeter.samplers.SampleResult;

SampleResult result = ctx.getPreviousResult();
//getRequestHeaders()方法返回String字符串
String RequestHeaders = result.getRequestHeaders();
//getResponseHeaders() 返回响应headers
String ResponseHeaders = result.getResponseHeaders(); 
//getResponseCode() 返回响应状态码字符串
String responseCode = result.getResponseCode();
//getURL() 返回请求URL对象 
URL url = result.getURL();
log.info(RequestHeaders);
log.info(RequestHeaders);

4:prev内置对象
prev是Beanshell后置处理器的内置对象 相当于ctx.getPreviousResult();
 

5.  高级用法:假如我们希望线程之间共享一个变量,可以利用BeanShell来完成。

    JMeter中线程间共享变量可以通过定义属性值来完成,JMeter启动时会读取一些属性文件,比如jmeter.properties、user.properties,这些属性值是可以修改的,通过BeanShell可以对其进行更改。通过props.put()来修改属性,props.get()来获取属性。

6. jmeter中,BeanShell的使用由以下场景:

前置处理器:BeanShell PreProcessor
取样器 :BeanShell Sampler
后置处理器:BeanShell PostProcessor

Jmeter中包括多种BeanShell,用法差不多,只是作用的地方不同。
定时器:  BeanShell Timer
前置处理器:BeanShell PreProcessor,提前处理请求参数,如:加密解密等
采样器:  BeanShell Sampler
后置处理器:BeanShell PostProcessor,在请求后对返回结果进行处理
断言:   BeanShell断言,验证返回结果的正确性
监听器:  BeanShell Listener

BeanShell与JMeter的关系

JMeter提供5种方式使用BeanShell

•BeanShell Sampler 直接使用BeanShell来编写样例。

•BeanShell PreProcessor 在样例触发前,使用BeanShell进行加工处理。

•BeanShell PostProcessor 在样例触发后,使用BeanShell进行加工处理。

•BeanShell Assertion 使用BeanShell进行断言处理。

•BeanShell Listener 使用BeanShell做监听器

BeanShell的内置对象

jmeter自带函数获取系统当前时间

 

浮点时间戳转换为标准时间

import  java.text.SimpleDateFormat;
import  java.util.Calendar;
import  java.util.Date;
//10位的秒级时间戳
long  time1 = ${time}; //获取时间戳变量
String result1 =  new  SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( new  Date(time1 *  1000 ));
log.info( "10位时间戳(秒)--->Date:"  +result1);//13位的毫秒级时间戳
//double time2 = 1515730332000d;
//String result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2);
//System.out.println("13位数的时间戳(毫秒)--->Date:" + result2);

解析jsonlist

//利用beanshell获取到json响应,而后经过JSONObject 和JSONArray 将数组解析,遍历数组的length以后,提取参数值
//导入json包
import  org.json.*;
//获取获取请求的返回值
String response_data = prev.getResponseDataAsString(); 
//日志打印获取请求的返回值
log.info(response_data);
//将String类型的返回值构形成JSONObject对象
JSONObject data_obj =  new  JSONObject(response_data);
//获取做为下一个请求post的参数值Province(两种方式)
//String Provincelist_str = data_obj.get("Province").toString(); 
JSONArray Provincelist_str = data_obj.getJSONArray( "Province" );
//log.info(Provincelist_str);
//获取Province数组的长度
int  len = Provincelist_str.length(); 
String strlen = Integer.toString(len);
vars.put( "MessageNum" ,strlen);
log.info(strlen);
int  i =  0 ;
for (;i < len;++i)
{
//获取 data[ i ] 数组对象JSONObject jsonTemp = (JSONObject)Provincelist_str.getJSONObject(i);switch (i){case  0 ://两种提取参数的写法String NameItems = jsonTemp.getString( "Name" );// String NameItems = jsonTemp.get("Name").toString();// 两种打印参数的方法// vars.put("Name_1", jsonTemp.getString("Name")); vars.put( "Name_1" , NameItems); log.info(NameItems);}
}

相关文章:

Jmeter- Beanshell语法和常用内置对象(网络整理)

在利用jmeter进行接口测试或者性能测试的时候&#xff0c;我们需要处理一些复杂的请求&#xff0c;此时就需要利用beanshell脚本了&#xff0c;BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法&#xff0c;所以它和java是可以无缝衔接的。beans…...

【C++二级】题一:构造函数

1、常量数据成员的初始化只能通过构造函数的成员初始化列表进行&#xff0c;并且要用关键字const修饰 #include <iostream> using namespace std; class MyClass {int _i;friend void Increment(MyClass& f); public:const int NUM; // ERROR ********found*******…...

C++标准模板库(STL)-list介绍

C标准模板库&#xff08;STL&#xff09;中的list是一个双向链表&#xff0c;它提供了高效的插入、删除和反转操作。list支持随机访问&#xff0c;这意味着我们可以直接访问任何元素&#xff0c;而不需要从头开始遍历链表。此外&#xff0c;list还支持反向迭代&#xff0c;即可…...

Arrays.asList

直接去看原文 原文链接:Arrays.asList() 详解-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 【1. 要点】 该方法是将数组转化成List集合的方法。 List<String> lis…...

XXXX项目管理目标(某项目实施后基于软件工程的总结)

&#xff08;注&#xff1a;此文作于2007年&#xff0c;算是个缅怀&#xff0c;或者是个吐槽。所有注都是本次发表新加的。原文中的省略号就是原文&#xff0c;并非删减。&#xff09; 目录 一、序 二、态度问题 三、问题点 3.1 项目过程管理的问题 3.2 配置管理的问题 …...

连新手小白都知道的电子画册一键生成器,你还不知道吗?

相信大家平时见得比较多的是纸质画册&#xff0c;而对于电子画册大家又了解多少呢&#xff1f;电子画册近年来倍受众多企业青睐&#xff0c;制作一本好的电子画册能够让企业在市场竞争中脱颖而出&#xff0c;给人以深刻印象。如何制作呢&#xff1f; 其实很简单&#xff0c;关…...

JAVAEE初阶 操作系统

操作系统的相关知识 一.操作系统的定位二.操作系统的作用三.什么是进程/任务1.进程在系统中如何操作和管理 四.PCB中的核心属性1.pid2.内存指针3.文件描述符表 五.CPU1.cpu的特性:分时复发 六.PCB中进行调度的属性1.状态2.优先级3.记账信息 一.操作系统的定位 二.操作系统的作用…...

第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览

现在城市化水平不断提高&#xff0c;每个城市的井盖遍布在城市的街道上&#xff0c;是否能够实现常态化和系统化的管理&#xff0c;反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作&#xff0c;作为基础设施重要的一个组成部分…...

了解JS中的混个对象“类”

类是面向对象的设计模式&#xff0c;它包括实例化、继承和多态 1、理论 面向对象变成强调的是数据和操作的行为本质上是相互关联的&#xff0c;因此好的设计就是把数据以及和他相关的行为打包&#xff08;封装&#xff09;起来&#xff0c;我们也叫他数据结构。 类的一个核心…...

在Sprinng Boot中使用Redis充当缓存

关于我们使用EhCache可以适应很多的应用场景了&#xff0c;但是因为EhCache是进程内的缓存框架&#xff0c;在集群模式下&#xff0c;我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况&#xff0c;就算我们的EhCa…...

【网络】TCP协议的相关实验

TCP协议的相关实验 一、理解listen的第二个参数1、实验现象2、TCP 半连接队列和全连接队列3、关于listen的第二个参数的一些问题4、SYN洪水Ⅰ、什么是SYN洪水攻击Ⅱ、如何解决SYN洪水攻击&#xff1f; 二、使用Wireshark分析TCP通信流程 一、理解listen的第二个参数 在编写TCP…...

微服务测试怎么做

开发团队越来越多地选择微服务架构而不是单体结构&#xff0c;以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元&#xff0c;具有自己的逻辑和数据库&#xff0c;通过 API 与其他单元通信——需要新的测试策略和新…...

第9章 K8s进阶篇-持久化存储入门

9.1 k8s存储Volumes介绍 Container&#xff08;容器&#xff09;中的磁盘文件是短暂的&#xff0c;当容器崩溃时&#xff0c;kubelet会重新启动容器&#xff0c;但最初的文件将丢失&#xff0c;Container会以最干净的状态启动。另外&#xff0c;当一个Pod运行多个Container时&…...

MathType2024最新word公式编辑器

使用word进行论文编写时&#xff0c;常需要使用公式编辑器&#xff0c;但有些word中并没有公式编辑器&#xff0c;这时应该怎么办呢&#xff1f;本文将围绕word里没有公式编辑器怎么办&#xff0c;word中的公式编辑器怎么用的内容进行介绍。 一、word里没有公式编辑器怎么办 …...

英语语法 - 主语从句

[ 主语从句 ] 没有时态要求 | 三单 1. 从属连词 that 引导的主语从句 | 不做句子成分 | 没有意义 That a monster attacked a ship last week shocked the world. That I bought a house in Beijing shocks many people. That Oscar is rich makes us upset. That he didnt wa…...

千梦网创:实现自动化“挂机躺盈”的三种方法

在互联网众多行业中&#xff0c;有很多人一直在寻找所谓的“挂机躺盈”的项目&#xff0c;在理财领域这种收入被称为“被动收入”。 天上不会掉馅饼这是一句讲烂掉的话了&#xff0c;躺在家里吃白食等着钱进账是一件不可能的事情。 然而如果你看到身边有“被动收入”的例子&a…...

微信小程序页面传递参数方法

说明 页面跳转方法有很多中&#xff0c;但经常会通过一个页面传递参数给另一个页面&#xff0c;非常的常见。但数据量大的时候&#xff0c;通常用字符串传递&#xff0c;但会显得过于臃肿&#xff0c;下面介绍页面传递参数的各种方式。 一、页面跳转链接携带参数 例如&#xf…...

出行类app如何提升广告变现收益?

出行类APP已经成为越来越多人们出行的首选&#xff0c;出行类app在变现方式上存在以下痛点&#xff1a;APP功能单一、使用场景单一&#xff1b;用户使用时间集中&#xff0c;粘性低...这些痛点使得开发者获取收益的提升面临极大的挑战。 https://www.shenshiads.com 如何让出…...

万能在线答题考试小程序源码系统 既能刷题 又能考试 带完整的搭建教程

现如今&#xff0c;线上学习和考试已经成为一种趋势。近年来&#xff0c;移动端的普及以及微信小程序的兴起&#xff0c;使得在线答题考试系统变得更加便捷和高效。今天罗峰就来给大家介绍一款万能在线答题考试小程序源码系统&#xff0c;既能刷题&#xff0c;又能考试&#xf…...

《Linux从练气到飞升》No.30 深入理解 POSIX 信号量与生产消费模型

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...