原文地址https://blog.csdn.net/lijing742180/article/details/81157947

原文地址https://blog.csdn.net/zailushangbuting/article/details/70808612

原文地址https://blog.csdn.net/maybe_frank/article/details/79094230

原文地址https://www.cnblogs.com/vv00cc/p/7902693.html

一、响应断言
 1、什么是响应断言?

在jmeter中最常用的断言方法是“响应断言”,它是通过检查sampler的请求内容和响应结果中是否匹配指定的字符串来判断结果是否正确。

响应断言简单实用,能够解决工作中的大部分问题。

尤其是在jmeter4.0版本中在响应断言中加入了Request Headers、Request Data,使得能够对请求头和请求体进行断言,满足了多样性的断言需求,非常方便。

2、使用响应断言

响应断言的使用非常简单,通常需要关注如下三点:

“要测试的响应字段”

指我们要进行断言的内容所在的位置,分为request和response两大块,根据实际情况选择即可(最常用的是响应文本)

“模式匹配规则” (此处提到的1和3对应上图中的数字)

控制上图中的“1”如何匹配“3”

"包括"-------------1包括3,支持正则;
“匹配”-------------1完全匹配3,支持正则;

“Equals”---------1完全匹配3中的文本内容,不支持正则,且大小写敏感;
“Substring”-----1包括3中的文本内容,不支持正则,且大小写敏感;

“否”、“或者”----跟前面四个选项结合使用,分别用于逻辑取反、取或。

“要测试的模式”

这里填写我们要进行断言的内容,可以添加多个模式,可以使用变量、文本、正则表达式(在“包括”和“匹配”模式下)。

二、BeanShell断言
 1、什么是BeanShell断言?

BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。

在这里除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果。

下面看一个简单的示例:

其中脚本内容如下:

if ("200".equals(""+ResponseCode) == false )
{
// 响应码不等于200时,设置断言失败,并输出失败信息
Failure=true ;
FailureMessage ="Response code was not a 200 response code it was " + ResponseCode + "." ;
print ( "the return code is " + ResponseCode); // this goes to stdout
log.warn( "the return code is " + ResponseCode); // this goes to the JMeter log file
} else {
// 响应码等于200时,设置断言成功,并输出成功信息
Failure=false;
FailureMessage = "Return true, and the response code was " + ResponseCode;
}
}

Bean Shell常用内置变量

   JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。

vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    a) vars.get(String key):从jmeter中获得变量值

    b) vars.put(String key,String value):数据存到jmeter变量中

    更多方法可参考:org.apache.jmeter.threads.JMeterVariables

props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

    a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义

    b) props.put("PROP1","1234");

prev - (SampleResult):获取前面的sample返回的信息,常用方法:

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

    更多方法可参考:org.apache.jmeter.samplers.SampleResult

sampler - (Sampler):gives access to the current sampler

=============================================================================================================================================

=============================================================================================================================================

2、编写断言判断代码:

if("206".equals("${action_seq_1}") && "3".equals("${trans_status_1}")){
Failure = false;
FailureMessage = "交易成功!";
}else if(!"206".equals("${action_seq_1}")){
Failure = true;
FailureMessage = "交易类型不正确!";
}else if(!"3".equals("${trans_status_1}")){
Failure = true;
FailureMessage = "交易未成功!";
}

=============================================================================================================================================

=============================================================================================================================================

BeanShell是jmeter的解释型脚本语言,和java语法大同小异,并有自己的内置对象和方法可供使用。

vars:操作jmeter的变量:vars.get(String parmStr) 获取jmeter的变量值;vars.put(String key,String value) 把数据存到Jmeter变量中;

prev:获取sample返回的信息,prev.getResponseDataAsString() 获取响应信息;prev.getResponseCode() 获取响应状态吗;

从这里可以参考更多:https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

1、添加一个线程组,并依次加上需要的功能组件,右键http请求添加一个BeanShell Assertion。

2、我们把json.jar引入,可以拷贝到jmeter的lib\ext目录下,也可以在计划任务引入jar包

import org.json.*;
String responsData = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(responsData);
String status = responseJson.getString("code").toString();
if(!status.equals("0")){
Falure = True;
}

=============================================================================================================================================

=============================================================================================================================================

解析response中的内容,并把获取到的value传递到后续的request中,常用的方法就是在想要解析response的request上添加后置处理器
本章介绍两种常用的组件

BeanShell PostProcessor

JSON Extractor

下面是具体的操作步骤:

添加后置处理器:BeanShell PostProcessor

获取response中的字符串,并对内容进行判断,当response中包含“The wait operation timed out”或者“Oops. Something went wrong ... sorry”时,都认为该request的response不正确

String response = prev.getResponseDataAsString();
String code = prev.getResponseCode();
log.info("Respnse is " + response);
log.info(code);
int result1 = response.indexOf("The wait operation timed out");
int result2 = response.indexOf("Oops. Something went wrong ... sorry");
if(code == "200" && result1>=0 || result2>=0){
FailureMessage = "OK,check current";
}
else{
Failure = true;
FailureMessage = "ERROR,check error";
}

解析返回的Jason数据,获取name字段的值赋给变量result

{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}

import org.json.*;
脚本中的导入的json包需要自己去网络下载后放到\lib\ext下 String response_data = prev.getResponseDataAsString();
JSONObject data_obj = new JSONObject(response_data);
String apps_str = data_obj.get("body").get("apps").toString();
JSONArray apps_array = new JSONArray(apps_str);
String[] result = new String[apps_array.length()];
for(int i=0;i<apps_array.length();i++){
JSONObject app_obj = new
JSONObject(apps_array.get(i).toString());
String name = app_obj.get("name").toString();
result[i] = name;
}
vars.put("result", Arrays.toString(result));

添加后置处理器:JSON Extractor
解析返回的Jason数据,获取name字段的值带入参数到后边的request中

{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}

变量t1的值是111,变量t2的值是222

jmeter BeanShell断言(一)的更多相关文章

  1. (jmeter内置可调用的变量)jmeter beanShell断言

    用户可以在jmeter- “beanShell断言”中自定义断言.自由灵活的用脚本实现自己的断言  beanShell断言接口介绍  在beanShell中直接可以调用的变量,无需加前缀.  1.lo ...

  2. jmeter beanshell断言接口自动化实例

    一.JMeter介绍 Apache JMeter是一款优秀的开源性能测试工具,在国外无论是在性能测试还是接口测试领域都有着非常高的使用率,但由于本身没有完善的中文文档以及典型开源工具特点(界面不美观) ...

  3. jmeter BeanShell断言(四)

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

  4. jmeter BeanShell断言(三)数据处理

    在做接口测试时,对响应数据的校验是非常重要的部分:在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言.BeanShell断言等等,BeanShell断言可以自定义断言,自由灵 ...

  5. Jmeter BeanShell断言

    这篇文章用来记录编写beanshell断言遇到得问题. 问题1:JSONObject not found in namespace 流程:在beanshell下写代码如下: 1 String resp ...

  6. Jmeter beanshell断言 org.json.jar包下载

    链接:https://pan.baidu.com/s/1O01ODjlKyqmz2NyDT0MCww 提取码:a5va 欢迎关注微信公众号:软件测试汪,qq技术交流群:809111560

  7. jmeter BeanShell实例-----两个变量之间的断言对比

    jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...

  8. JMeter中BeanShell断言使用一

    Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面 首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS ...

  9. Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面

    首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS}+2!=${TotalClient_SS2}){Failure=true;       Fai ...

随机推荐

  1. 卓越研发之路 MOT技术管理者课堂

    引言:从2018年11月起,在北京.大连.上海.南京.杭州.武汉.成都.西安.深圳.广州等地巡回举办的技术沙龙.活动旨在交流软件研发及互联网技术的实战经验,分享优秀的案例实践,通过平台结识更多友人,挖 ...

  2. 二叉苹果树|codevs5565|luoguP2015|树形DP|Elena

    二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的 ...

  3. <转>记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义

    →转载地址← 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下: namespace ConsoleApplication1 { class Program { ...

  4. [No0000BC]ADO.NET中的几个主要对象

    ADO 指 ActiveX 数据对象(ActiveX Data Objects). 从一个 ASP 页面内部访问数据库的通常的方法是: 创建一个到数据库的 ADO 连接 打开数据库连接 创建 ADO ...

  5. linux中使用ps -ef

    常操作linux系统的都会用到:ps -ef 命令,是一个非常强大的进程查看命令. 在训练模型中使用python,那么我会要看这个python相关的进程,可以使用如下命令”: ps -ef | fgr ...

  6. 关于FlexSlider插件

    Flexslider选项设置 $(window).load(function() { $('.flexslider').flexslider({ animation: "fade" ...

  7. mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

    mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

  8. Java中抽象类和抽象方法的区别

    抽象方法:在类中没有方法体的方法,就是抽象方法. 抽象类:含有抽象方法的类就叫抽象类. 抽象类中的抽象方法必须被实现! 如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类! 抽象类中的普通 ...

  9. [daily][grub2] grub2修改内核选项

    以前, 我们就直接去修改 /boot/grub/grub.cfg 文件了. 其实这并不正确. 正确的做法是: 1.  修改 /etc/default/grub 文件. [root@dpdk ~]# c ...

  10. SQLAlchemy_ORM

    ORM 与 SQLAlchemy 简介: ORM 叫对象关系映射,ORM 将对象转换成SQL,然后使用数据API执行SQL并获取执行结果 SQLAlchemy 是Python 社区最知名的 ORM 工 ...