BeanShell断言:根据响应的2个数据的比较结果来决定断言

本文介绍如何使用JMeter进行断言验证,特别是针对响应中包含数值的情况。文章演示了通过不同方式提取并比较两个数值(aaa和bbb),确保aaa大于bbb时断言成功。同时探讨了处理整数与小数的不同方法。

 

需求:目前有一个请求,请求的响应中有2个值,aaa和bbb,我们比较aaa和bbb,如果aaa大于bbb,则断言通过,否则失败。

1.添加一个Dummy Sampler,模拟请求。

2.添加2个正则表达式处理器,分别提取aaa和bbb的值。

3.添加BeanShell断言。代码如下:

//方式1:直接取aaa,bbb的值,并将结果进行比较
int x=${aaa};
int y=${bbb};

if(x<=y){
	Failure=true;
	FailureMessage="aaa小于等于bbb";
	}
//方式2:通过vars.get("变量名")取得字符串的值,然后通过Integer.parseInt()将其变为整型再进行比较
String  x = vars.get("aaa");
String  y = vars.get("bbb");

if(Integer.parseInt(x)<=Integer.parseInt(y)){
	Failure=true;
	FailureMessage="aaa小于等于bbb";
	//log.info("断言失败:aaa小于等于bbb");
}

4.在查看结果树中查看结果如下

5.思考:如果aaa,bbb的值带有小数呢,上述两种方式还可以吗?

比如说把请求的响应修改为{"aaa":"1.9","bbb":"1.1"},则

通过方式1运行结果,还是断言失败,因为本来aaa大于bbb,取整后,aaa等于bbb了;

通过方式2运行结果,报错:Error invoking bsh method: eval Sourced file: inline evaluation of: ``String  x = vars.get("aaa"); String  y = vars.get("bbb");  if(Integer.parseInt(x . . . '' : Method Invocation Integer.parseInt 。

显然不可以。

因此,当需要比较的两个值可能是小数时,我们需要用方式3或方式4来写断言。

//方式3:
double x=${aaa};
double y=${bbb};

if(x<=y){
	Failure=true;
	FailureMessage="aaa小于等于bbb";
	}
//方式4:
String  x = vars.get("aaa");
String  y = vars.get("bbb");

if(Double.parseDouble(x)<=Double.parseDouble(y)){
	Failure=true;
	FailureMessage="aaa小于等于bbb";
	log.info("断言失败:aaa小于等于bbb");
}

说白了,就是将int换成double,Integer.parseInt()换成Double.parseDouble()了。

转载于:https://www.cnblogs.com/zhengna/p/11190624.html

### JMeter 断言的使用方法 #### 什么是断言断言元件(Assertion)用于验证测试结果是否符合预期。它可以通过检查服务器的响应数据,确保其符合期望的模式或值,从而验证性能测试脚本的正确性[^2]。 --- #### 常见的断言类型及其用途 以下是几种常见的断言类型以及它们的应用场景: 1. **Response Assertion (响应断言)** - 验证响应中的文本、代码或其他字段是否满足条件。 - 可以指定不同的测试字段,例如响应文本、响应代码、响应头等[^1]。 2. **Size Assertion (大小断言)** - 检查响应的字节大小是否在预设范围内。 - 对于文件下载类请求非常有用。 3. **XPath Assertion (XPath 断言)** - 如果响应是 XML 格式,则可以利用 XPath 表达式提取并验证特定节点的内容。 4. **JSON Assertion (JSON 断言)** - 当服务器返回的是 JSON 数据时,推荐使用此断言来校验 JSON 结构和内容[^4]。 5. **Duration Assertion (持续时间断言)** - 确保某个采样器执行的时间不超过设定的最大阈值。 6. **BeanShell Assertion (Beanshell 断言)** - 提供更灵活的方式通过编写 Java/Beanshell 脚本来实现复杂的逻辑验证。 7. **MD5Hex Assertion (MD5 Hex 断言)** 和 **SHA Checksum Assertion (SHA 校验码断言)** - 这两种主要用于对比哈希值的一致性,适用于安全性和完整性检测。 8. **Compare Assertion (比较断言)** - 将两个不同线程组的结果进行逐项比对分析。 9. **HTML Assertion (HTML 断言)** - 自动解析 HTML 文档结构,并报告潜在错误如标签不闭合等问题。 --- #### 如何配置 Response Assertion? 假设我们需要确认 HTTP 请求返回的状态码为 `200 OK` 并且页面上存在关键词 `"success"` 的情况,具体操作如下所示: 1. 找到目标 sampler 或者 test plan 下右键菜单 -> Add -> Assertions -> Response Assertion; 2. 设置 Apply To 参数决定应用范围,默认选中 “Main sample and sub-samples” 即可覆盖整个请求链路; 3. 测试字段部分勾选需要检验的部分比如这里我们选择 `Text Response`; 4. 添加一条新的规则,在 Pattern Matching Rules 复选项里至少激活一项匹配策略(Contains, Matches, Equals...),然后填入关键字 `success` ; 5. (可选)如果希望自定义失败提示信息可以在下方填写相关内容以便后续排查问题更加直观明了。 ```plaintext Apply To: Main sample and sub-samples Test Field: Text Response Pattern Match Rule: Contains Patterns to Test: success Custom Failure Message: The response does not contain the expected keyword 'success'. ``` 上述过程完成后保存设置重新运行测试即可看到对应的反馈效果。 --- #### JSON 断言实例演示 当 API 接口返回复杂嵌套层次较多的 json object 类型 payload 时候,单独依靠简单字符串查找可能不够精确可靠因此引入专门针对此类情形设计出来的工具——json path expression parser 来定位所需属性位置进而完成进一步判定动作。 假定有这样一个典型的 restful api endpoint `/users/{id}` 返回如下格式化后的 body: ```json { "userId": 1, "username": "admin", "emailAddress": "admin@example.com" } ``` 现在我们要保证每次调用该接口都能获取正确的 email 地址即 admin@example.com ,那么按照前面提到的方法新建一个 Json Path Extractor 同时配合相应语法书写查询语句 `$..emailAddress` 获取实际值并与预先存储的标准值做一致性核对最后得出结论。 --- ### 注意事项 - 不同类型的断言适合解决各自领域内的特殊需求,请根据实际情况合理选用合适的组件组合起来构建全面可靠的自动化验收框架体系。 - 正确理解各个参数含义对于提高调试效率至关重要,务必仔细阅读官方文档说明材料加深印象积累经验教训不断优化改进现有流程机制提升整体质量水平。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值