加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

jmeter BeanShell断言(四)

发布时间:2020-12-15 20:52:50 所属栏目:安全 来源:网络整理
导读:Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log :写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”); ctx :该变量引用了当前线程的上下文,

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

jmeter之beanshell断言实例

方法一:

首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果:

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

//使用vars.put()方法储存变量message
vars.put("message",message);
//获取titleLink
String titleLink = responseJson.getJSONObject("data").getString("titleLink");
log.info("titleLink的值:" + titleLink);
//使用vars.put()方法储存变量message
vars.put("titleLink",titleLink);

?

在后面的其他接口中如何需要使用变量message?和?titleLink,可以使用${message}?和?${titleLink}来获取变量的值;

变量储存好后,在需要断言的接口后面添加BeanShell断言使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

//使用vars.get()方法获取变量的值
String message= vars.get("message");
 
if(!message.equals("success")) {
    Failure = true; 
    FailureMessage = "规则解析失败";
}else{
    FailureMessage = "规则解析成功";
    }

?

方法二:

直接在需要断言的接口后面使用beanshell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

if(!message.equals("success")){
    Failure = true; 
    FailureMessage = "规则解析失败,message不等于success";
    return;
}

//获取titleLink
Object titleLink = responseJson.getJSONObject("data").get("titleLink");
log.info("titleLink的值:" + titleLink.toString());


if(titleLink.toString().equals("null") || "".equals(titleLink)){
    Failure = true; 
    FailureMessage = "规则解析失败,titleLink为空";
}else if(!titleLink.toString().startsWith("http") && !titleLink.toString().startsWith("https")){
    Failure = true;
    FailureMessage = "规则解析失败,titleLink不为空,但是不是以http或者https开头的";
}

?

?接口的响应数据为:

{
:   "responseCode":"1",:   "responseMessage":"success",:   "responseType":null,:   "data":
:   {
:   :   "city":"上海",:   :   "rentUnit":"月",:   :   "source":"个人房源网",:   :   "title":"徐盈路1188弄徐泾青浦徐泾租房",:   :   "belonger":"个人",:   :   "housingType":"住宅",:   :   "floor":"高层",:   :   "rentPrice":"17000",:   :   "titleLink":"http://sh.grfy.net/rent/d-34612565.html",:   :   "decoration":null,:   :   "direction":null,:   :   "isSplit":"否",:   :   "imgs":null,:   :   "publishTime":"2018-07-25T23:20:33.471",:   :   "contactMobile":null,:   :   "website":"http://sh.grfy.net/rent/list_2_0_0_0-0_0_0-0_0_2_0_{}_.html",:   :   "address":"徐泾",:   :   "contactName":"王女士",:   :   "houseType":"4室2厅2卫",:   :   "estate":"徐泾",:   :   "roomArea":"177",:   :   "collectHouseType":"住宅",:   :   "collectType":"出租",:   :   "district":"青浦",:   :   "totalFloor":"共20层",:   :   "region":"上海",:   :   "isRegister":"否",:   :   "desc":"仁恒西郊花园 4室2厅2卫 房屋亮点 新上 配套齐全 有阳台 首次出租 随时看房 出租要求 一家人 一年起租 租户稳定 作息正常 房源描述小区环境好,物业管理成熟,私人会所实施配套齐全,临近地铁17号徐盈站,周边多所国际学校,仁恒的房子品质有保障。无中介费。"
:   }
}

?

?断言失败如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读