beanshell断言_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():获取采样器山下文数据

ctx详细API可参考:JMeter上下文

BeanShell断言

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

状态码断言

//状态码断言

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

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

Failure=false;

}

else{

Failure=true;

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

}

注:字符串只能使用双引号,字符串相等要使用"".equals("")

响应体包含特定字符

//获取响应数据

String response = prev.getResponseDataAsString();

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

//响应数据包含

if(response.contains("登录成功")){

Failure=false;

}

else{

Failure=true;

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

}

JSON响应体字段提取及断言

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

json.jar:下载地址 密码:8it7

gson.jar:下载地址 密码:6a7v

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

//JSON响应断言

import org.json.*; //导入org.json包

String response = prev.getResponseDataAsString(); //获取响应数据

JSONObject responseJson = new JSONObject(response); //转为JSON对象

String message = responseJson.getString("message");

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

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

Failure=false;

}

else{

Failure=true;

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

}

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

getBoolean("字段名") :获取布尔类型字段值

getInt("字段名"):获取整型字段值

getLong("字段名"):获取长整型字段值

getDouble("字段名"):获取双精型字段值

getJSONObject("字段名"):获取嵌套Object类型字段值,JSONObject类型

getJSONArray("字段名"):获取嵌套Array类型,JSONArray类型

响应头解析

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

import java.util.HashMap;

import java.util.Map;

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

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

Map headersMap = new HashMap(); //创建HashMap来从新组装headers

for(int i=1;i

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

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

}

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

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

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

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

相关文章

Mobaxterm常用的指令(基于linux)

列出所有的环境(3种方法) conda env list conda info --envs conda info -e创建虚拟环境(默认anaconda3/envs路径) conda create -n megumi python3.8.5 #megumi为环境名称,#3.8.5是安装python的版本激活环境(2种方法) source activate 环境名 conda activate 环境名退出环…

junit mockito_使用JUnit 5在Mockito中方便地进行模拟–官方方式

junit mockito从版本2.17.0开始,如果使用了JUnit 5, Mockito提供了官方(内置)支持来管理模拟生命周期。 入门 为了利用集成的优势,需要在JUnit 5的junit-platform-engine旁边添加Mockito的mockito-junit-jupiter依赖项…

正则表达式中的量词(限定符)含义的准确理解

量词准确理解?前面的元素(pattern/子表达式)匹配 0 次或者 1 次;出现 0 次或者 1 次。“次”改成“个”也行*前面的元素匹配大于等于 0 个前面的元素匹配大于等于 1 个{5}前面的元素匹配 5 个{2,6}前面的元素匹配 2 个到 6 个

docker初识_初识 docker 搭建自己的开发环境

换了一台设备,程序猿嘛第一件事肯定是先把开发环境搭建起来,以前为了方便都是搞的集成环境,这次准备下载集成环境的时候,突然想起 docker 这个东西,在下虽然了解一些概念性的东西但一直为曾实践。人嘛,没有…

PyTorch中使用指定的GPU

PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。 有如下两种方法来指定需要使用的GPU。 1.类似tensorflow指定GPU的方式,使用CUDA_VISIBLE_DEVICES。 1.1 直接终端中设定: CUDA_VISIBLE_DEVICES1 python…

jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区

jvm运行时类加载机制各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构。 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行时数据区 1.简介 在继续之前&#x…

括号的分类

括号名称符号小括号(parentheses,又称圆括号、括弧)( )中括号(square brackets,又称方括号)[ ]大括号(curly brackets, 又称花括号){ }六角括号〔 〕,中文才有…

python读取和存入json文件

将内容存入json文件 import json filename"C:/Users/13451/Desktop/captions_train.json" with open(filename, w) as j: json.dump(word_map, j)读取json文件中的内容 import json with open(filename,r) as f:x json.load(f) print(x)其中open函数的第二个参数&…

android 前台服务自定义布局不显示_Android前台服务通知未显示

我正在尝试启动前台服务.我收到通知,该服务确实启动但通知始终被抑制.我仔细检查了应用是否允许在我的设备上的应用信息中显示通知.这是我的代码:private void showNotification() {Intent notificationIntent new Intent(this, MainActivity.class);notificationI…

java技术专家学习路线图_向Java最佳专家的全球专家学习Java

java技术专家学习路线图Java with the Best Virtual Conference是您学习微服务,Java 9,Kubernetes以及其他Java的指南! 将于4月17日至18日收听,收听来自Pivotal,RedHat,Microsoft,Oracle和Netfl…

vim 编程常用的指令和快捷键

文章目录移动光标修改、剪切或复制配对符之间的内容ctagscscopegtags编译快速修改窗口自动补全多行缩进缩出折叠移动光标 命令说明gd跳转到局部变量的定义处gD跳转到全局变量的定义处,从当前文件开头开始搜索g;上一个修改过的地方g,下一个修改过的地方[[跳转到上一…

css 获取屏幕宽度_设备像素、设备独立像素、CSS像素、分辨率、PPI、devicePixelRatio 的区别...

设备像素 (device pixels)也称为物理像素,显示器的最小物理单位。这里需要注意,一个像素并不一定是一个小正方形区块,也没有标准的宽高,只是用于显示丰富色彩的一个“点”而已。可以参考公园里的景观变色彩灯,一个彩灯…

shell 脚本中特殊变量

特殊变量含义$0这个程式的执行名字$n这个程式的第n个参数值,n1…9$*这个程式的所有参数$#这个程式的参数个数$$这个程式的PID(脚本运行的当前进程ID号)$!执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)$?…

netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序

netbeans调试使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序。 在开发打包为ber或镂空jars的微服务时,您期望使用相同的轻松方式进行运行和调试。 好消息是您可以。 在本文中,我将逐步介绍如何在N…

怎么更换默认路径_更改电脑桌面路径

电脑默认的桌面路径一般都在C盘,而我们又特别喜欢把文件都放在桌面,因为桌面既方便又好找。可时间久了,桌面文件会越来越多,C盘空间会越来越小,会拖慢系统速度。怎么把系统桌面路径设置在非C盘呢?本期教程将为大家讲解…

Linux 命令之 wc -- 统计文件中的字节数、字数、行数

文章目录命令介绍选项参数示例(一)统计当前目录下的所有文件的行数(二)统计当前目录下的文件总数(三)显示某个文件的行数(四)显示某个文件的行数、单词数、字节数(五&…

JSON合并补丁程序:JSON-P 1.1概述系列

Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步。 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC 7396 我将在这个迷你系列中涵盖这些主题。 入门 要开始使用JSON-P,您将需要Maven中央存储…

连接相机无法识别_春节用相机拍照,如何快速发朋友圈?

春节期间很多人都会用相机拍照相机照片在画质上有优势但分享比较麻烦如何快速发朋友圈?最快最方便的方式还是试用U盘直接把存储卡的照片拷贝到手机上操作简单方便,下面提供几种方式下面的读卡器推荐每款实用对象不一样,在选择时,根…

Linux 命令之 sh -- Shell 命令语言解释器

文章目录一、命令介绍二、选项参数三、命令示例(一)命令从字符串中读取一、命令介绍 sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。通过用户输入命令,和内核进行沟通! Bourne Again Shel…

oidc auth2.0_使用Spring Security 5.0和OIDC轻松构建身份验证

oidc auth2.0“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制…