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 = "规则解析成功";
    }

2.直接在需要断言的接口后面使用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号徐盈站,周边多所国际学校,仁恒的房子品质有保障。无中介费。"
:   }
}

 

转载于:https://www.cnblogs.com/wsy0202/p/11558391.html

<think>好的,用户想了解如何在JMeter中通过BeanShell获取变量。首先,我需要回忆一下JMeterBeanShell相关知识,特别是关于变量操作的部分。记得JMeterBeanShell可以使用vars对象来操作变量,vars是JMeterVariables类的实例,提供读取和写入变量的方法。 首先,用户的问题主要涉及获取变量,所以重点在vars.get()方法。根据引用[1],vars.get(String key)是从JMeter中获取变量值的常用方法。需要注意的是,参数应该用变量名的字符串,而不是直接使用${变量}的形式,比如vars.get("key")是正确的,而vars.get("${key}")是错误的。这一点需要明确告诉用户,避免常见错误。 然后,用户可能需要示例代码,所以得准备一个简单的BeanShell Sampler脚本示例,展示如何获取变量。例如,用户可能在测试计划中定义了一个名为"username"的变量,然后在BeanShell中通过vars.get("username")获取它的值,再通过log.info输出或者进行其他处理。 另外,引用[3]提到,在非BeanShell元件中,可以使用${变量名}来引用变量,但在BeanShell内部必须使用vars.get()方法。这一点需要区分清楚,避免混淆。例如,在HTTP请求中可以使用${username},但在BeanShell脚本里必须用vars.get("username")。 还需要考虑变量作用域的问题,引用[3]指出,Http请求和BeanShell Sampler需要在同一个线程组内才能共享变量,这一点要提醒用户注意变量的作用域,避免跨线程组或测试计划导致变量无法获取的情况。 另外,用户可能需要了解如何将获取的变量用于后续操作,比如断言、参数传递等。这时候可以举例说明,比如将获取的变量值存入另一个变量中,或者进行字符串处理后再使用。 可能还需要提到props.get()和props.put(),但用户的问题主要围绕变量(vars),所以暂时不需要深入props,除非用户有跨线程组或全局变量的需求,但根据问题描述,暂时先集中在vars上。 总结一下,回答的结构应该是先介绍vars对象及其方法,然后给出具体步骤和示例代码,强调正确的使用方式(如避免使用${}),并提醒作用域和常见错误。最后,生成相关问题,帮助用户进一步学习,比如如何设置变量、优化脚本或处理复杂数据。</think>### JMeter BeanShell 获取变量方法及示例 在JMeter中,BeanShell通过`vars`对象操作变量,以下是具体方法及注意事项: #### 1. **获取变量方法** - **语法**:`vars.get("变量名")` - 直接使用变量名字符串,而非`${变量名}`格式,例如: ```java String username = vars.get("username"); // 正确方式 // String username = vars.get("${username}"); // 错误方式 ``` - 适用于所有通过JMeter定义的变量(如用户定义变量、正则表达式提取器等)[^1][^3]。 #### 2. **操作示例** **场景**:从HTTP请求中提取响应数据并存入变量,再通过BeanShell读取。 - **步骤**: 1. 使用正则表达式提取器提取响应中的`token`值,存入变量`token`。 2. 添加BeanShell Sampler,编写以下脚本: ```java // 读取变量 String tokenValue = vars.get("token"); // 打印到控制台(调试用) log.info("Token值为:" + tokenValue); // 修改变量并传递到后续请求 String newToken = tokenValue + "_modified"; vars.put("modified_token", newToken); ``` #### 3. **关键注意事项** - **变量作用域**:变量仅在**同一线程组**内共享。若跨线程组需使用`props`对象(全局属性)[^3]。 - **数据类型**:JMeter变量均为字符串类型,数值计算需转换类型,例如: ```java String countStr = vars.get("count"); int count = Integer.parseInt(countStr) + 1; vars.put("count", String.valueOf(count)); ``` #### 4. **调试技巧** - 使用`log.info()`输出变量值到JMeter日志。 - 结合`Debug Sampler`验证变量是否正确传递。 ```java // BeanShell调试示例 String user = vars.get("username"); log.info("当前用户:" + user); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值