JMeter使用BeanShell断言

BeanShell简介

BeanShell是使用Java语法的一套脚本语言,在JMeter的多种组件中都有BeanShell的身影,如:

  • 定时器:BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:BeanShell Assert
  • 监听器:BeanShell Listener

通过BeanShell可以对请求数据、响应数据或环境变量进行更加灵活的处理和判断。

Beanshell有一些默认的内置变量和方法,用户可以通过这些变量与JMeter进行交互,比如:

  • prInt:非GUI模式下打印信息(输出信息到stdout)
  • log:输出信息到日志(文件)

log.debu("调试信息")

log.info("响应状态码" + ResponseCode)

log.warn("警告信息")

log.error("出错信息")

  • ResponseCode:响应状态码(String类型)

  • ResponseHeaders:响应头(String类型)

  • prev:获取当前请求结果

prew.getResponseDataAsString():获取响应体数据(String类型)

prew.getResponseCode():获取状态码(同ResponseCode,String类型)

vars: 操作jmeter变量

String var1 = vars.get("变量名"):获取变量的值(假设为String类型)

vars.put("变量名", 变量值):设置变量值

props: 操作JMeter属性

props.get(String,String) 可以获取Jmeter中已经生成的属性

props.put(String,String) 可以创建和更新Jmeter属性

ctx:获取当前线程上下文数据(可获取所有信息)

ctx.getVariables("变量名"):获取变量值(同vars.get())

ctx.setVariables("变量名", "变量值"):设置变量(同vars.put())

ctx.getProperties("属性名"):获取属性值(同props.get())

ctx.setProperties("属性名","属性值"):设置属性(同props.put())

ctx.getPreviousResult():获取当前请求结果同(prev)

ctx.getCurrentSampler():获取当前采样器

ctx.getPreviousSampler():获取前一采样器

ctx.getThreadNum():获取线程数

ctx.getThreadGroup():获取线程组

ctx. getThread():获取当前线程

ctx.getEngine():获取引擎

ctx.isSamplingStarted():判断采样器是否启动

ctx.isRecording():判断是否开启录制

ctx.getSamplerContext():获取采样器山下文数据

BeanShell断言

BeanShell断言中可以通过ResponseCode、ResponseHeaders及pre.getResponseDataAsString()来分别获得String格式的响应状态码、响应头、响应体数据,结合if判断通过变量Failure=false或Failure=true来设置断言是否通过,当设置Failure=true时,还可以设置FailureMessage来设置失败原因。

状态码断言

 
 
  1. Copy//状态码断言

  2. log.info("状态码:" + ResponseCode);

  3. if(ResponseCode.equals("200")){

  4. Failure=false;

  5. }

  6. else{

  7. Failure=true;

  8. FailureMessage="响应状态码非200"; //指定失败原因

  9. }

注:字符串只能使用双引号,字符串相等要使用"".equals("")
响应体包含特定字符
 
  1. Copy//获取响应数据Stringresponse= prev.getResponseDataAsString();

  2. log.info("响应体:" + response);

  3. //响应数据包含if(response.contains("登录成功")){

  4. Failure=false;

  5. }

  6. else{

  7. Failure=true;

  8. FailureMessage="响应数据不包含登录成功";

  9. }

JSON响应体字段提取及断言

将String类型的响应体转为JSON对象并操作需要额外的jar包,可以使用org.json或gson,下载地址如下:

以json.jar为例,下载后将其放入JMeter/lib目录下,重启JMeter,添加BeanShell断言,如下: 

 
  1. Copy//JSON响应断言import org.json.*; //导入org.json包Stringresponse= prev.getResponseDataAsString(); //获取响应数据JSONObjectresponseJson=newJSONObject(response); //转为JSON对象Stringmessage= responseJson.getString("message");

  2. log.info("响应message字段:" + message);

  3. if(message.equals("成功")){

  4. Failure=false;

  5. }

  6. else{

  7. Failure=true;

  8. FailureMessage="响应message字段非成功";

  9. }

JSONObject对象除了getString()方法外,还支持

  • getBoolean("字段名") :获取布尔类型字段值
  • getInt("字段名"):获取整型字段值
  • getLong("字段名"):获取长整型字段值
  • getDouble("字段名"):获取双精型字段值
  • getJSONObject("字段名"):获取嵌套Object类型字段值,JSONObject类型
  • getJSONArray("字段名"):获取嵌套Array类型,JSONArray类型
     
响应头解析

响应头原本为String类型,可以通过分割遍历组装成Map类型来提取响应头中的项

 
  1. Copyimport java.util.HashMap;

  2. import java.util.Map;

  3. //将字符串用换行符 截取为adc数组

  4. String [] headersList = ResponseHeaders.split("\n");

  5. MapheadersMap=newHashMap(); //创建HashMap来从新组装headersfor(int i=1;i<headersList.length;i++){

  6. String [] itemList=headersList[i].split(": "); // 将每一条Headerr项按冒号分割

  7. headersMap.put((itemList[0]), itemList[1]); // 分键值放入HashMap

  8. }

  9. StringcontentType= headersMap.get("Content-Type"); // 提取相应项

  10. log.info("响应Content-Type:" + contentType)

最后感谢每一个认真阅读我文章的人!作为一位过来人也是希望大家少走一些弯路,如果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析 向Kafka Broker服务节点中发送主题消息数据的应用程序被称为生产者,生产者与消费者均属于Kafka客户端,几乎所有主流语言都支持调用客户端API。官方提供了基于Java实现的kafka-clients,用于…

【eNSP实战】配置交换机端口安全

拓扑图 目的&#xff1a;让交换机端口与主机mac绑定&#xff0c;防止私接主机。 主机PC配置不展示&#xff0c;按照图中配置即可。 开始配置之前&#xff0c;使用PC1 ping 一遍PC2、PC3、PC4、PC5&#xff0c;让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…

AWS Bedrock 正式接入 DeepSeek-R1 模型:安全托管的生成式 AI 解决方案

亚马逊云科技&#xff08;AWS&#xff09;于 2024 年 1 月 30 日 宣布&#xff0c;DeepSeek-R1 模型 正式通过 Amazon Bedrock 平台提供服务&#xff0c;用户可通过 Bedrock Marketplace 或自定义模型导入功能使用该模型。 DeepSeek-R1&#xff0c;其安全防护机制与全面的 AI 部…

数据结构之线性表

目录 1 简介 2 线性表的基本概念 3 顺序存储的线性表 3.1 定义线性表结构 3.2 初始化线性表 3.3 插入元素 3.4 删除元素 3.5 查找元素 3.6 扩容操作 3.7 打印线性表 4 线性表的应用 5 总结 1 简介 线性表是数据结构中最基础且常用的一种结构&#xff0c;它是由一…

c#面试题12

1.ApplicationPool介绍一下 c#里没有 2.XML 可扩展标记语言&#xff0c;一般以.xml文件格式的形式存在。可用于存储结构化的数据 3.ASP.NET的用户控件 将原始的控件&#xff0c;用户根据需要进行整合成一个新的控件 4.介绍一下code-Behind 即代码后置技术&#xff0c;就是…

英语学习(GitHub学到的分享)

【英语语法&#xff1a;https://github.com/hzpt-inet-club/english-note】 【离谱的英语学习指南&#xff1a;https://github.com/byoungd/English-level-up-tips/tree/master】 【很喜欢文中的一句话&#xff1a;如果我轻轻松松的学习&#xff0c;生活的幸福指数会提高很多…

C++蓝桥杯基础篇(十一)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来学习C蓝桥杯基础篇&#xff08;十一&#xff09;&#xff0c;学习类&#xff0c;结构体&#xff0c;指针相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、类与结构体 类的定义&#xff1a;在C中&#x…

一次解决Andriod Studio Build Gradle很慢或报错下载失败等问题

Andriod Studio创建项目时&#xff0c;Build gradle一直在下载或者卡住或者很慢&#xff0c;反正就是会在这里出现各自问题的&#xff0c;请看这里&#xff01; 来来来&#xff0c;全体目光向我看齐&#xff01;&#xff01;&#xff01;保准让你解决掉这个问题&#xff01;这…

接口自动化入门 —— swagger/word/excelpdf等不同种类的接口文档理解!

在接口自动化测试中&#xff0c;接口文档是开发和测试人员理解接口功能、参数和交互方式的重要依据。常见的接口文档类型包括Swagger、Word、Excel和PDF。 1. Swagger文档 Swagger是一种用于描述和定义RESTful API的规范&#xff0c;使用JSON或YAML格式来定义API的输入参数、输…

Docker Compose国内镜像一键部署dify

克隆代码 git clone https://github.com/langgenius/dify.git进入docker目录 cd docker修改.env部分 # 将环境模版文件变量重命名 cp .env.example .env # 修改 .env,修改nginx的host和端口,避免端口冲突 NGINX_SERVER_NAME192.168.1.223 NGINX_PORT1880 NGINX_SSL_PORT1443…

网络安全之文件上传漏洞

一&#xff0c;文件上传漏洞的原因&#xff1a; 文件上传漏洞的存在主要是因为开发者未对用户上传的文件进行充分的安全验证&#xff0c;导致攻击者可以上传恶意文件&#xff08;如 WebShell、恶意脚本等&#xff09;到服务器&#xff0c;进而控制服务器或实施进一步攻击。 常…

QT系列教程(20) Qt 项目视图便捷类

视频连接 https://www.bilibili.com/video/BV1XY41127t3/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 Qt项目视图便捷类 Qt项目视图提供了一些便捷类&#xff0c;包括QListWidget, QTableWidget&#xff0c; QTreeWidget等。我们分别介绍这几个便捷类。 我们先创建一个Qt …

Java学习--MySQL

后端开发中&#xff0c;数据常存储在数据库中&#xff1a; 一、数据库基础 数据库&#xff1a;DataBase&#xff08;DB&#xff09;&#xff0c;是存储和管理数据的仓库 1.1连接数据库 mysql -u用户 -p密码 [-h数据库服务器ip地址 -P端口号] 1.2 关系型数据库 关系型数据…

博客系统测试报告

一、项目背景 以SSM为框架实现的博客系统有四个功能&#xff0c;登录账号进入博客首页&#xff0c;首页展示发布的博客列表&#xff0c;还可以编写或者更改博客内容。为了确保博客系统在各种场景下都能正常运行&#xff0c;需要进行尽可能全面的功能测试和自动化测试。本项目旨…

Chebykan wx 文章阅读

文献筛选 [1] 神经网络&#xff1a;全面基础 [2] 通过sigmoid函数的超层叠近似 [3] 多层前馈网络是通用近似器 [5] 注意力是你所需要的 [6] 深度残差学习用于图像识别 [7] 视觉化神经网络的损失景观 [8] 牙齿模具点云补全通过数据增强和混合RL-GAN [9] 强化学习&#xff1a;一…

LabVIEW变频器谐波分析系统

随着工业自动化的发展&#xff0c;变频器在电力、机械等领域的应用日益广泛&#xff0c;但谐波问题直接影响系统效率与稳定性。传统谐波检测设备&#xff08;如Norma5000&#xff09;精度虽高&#xff0c;但价格昂贵且操作复杂&#xff0c;难以适应现场快速检测需求。本项目基于…

C语言每日一练——day_4

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第四天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…

理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...

DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同&#xff0c;一个是字符&#xff0c;一个是字节 如果复制文件类型是文本类型&#xff0c;字节流字符流都可以 如果复制的文件类型是非文本类型&#xff0c;则只能使用字节流&#xff0c;使…

泄露测试仪CTS的Sentinel I28使用

前言:本文档主要讨论CTS Sentinel I28的使用方法,设备图片如下: 具体文档可从下面链接下载: https://download.csdn.net/download/qq_34047402/90471262 泄露测试仪CTS的SentinelI28使用资源-CSDN文库 [注意] 调压方式,若选择机械式调压,那么测试的压力值只能有1个,…

YOLOv11融合[CVPR205]SCSegamba中的GBC结构

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures》 一、 模块介绍 论文链接&#xff1a;https://arxi…