首先看下JSR223 Assertion支持的脚本类型
可以看出,支持的脚本还是蛮多,如何选择才会开心的玩耍呢?
一、使用场景及比较
使用JSR223 Assertion主要的场景无非就是对数据的结果进行验证,验证就必然需要对数据进行解析与访问,什么样的语言解析数据非常方便且易学呢?
作为一个专业的java,起初还尝试使用java去解析数据,奈何它是强类型,对于数据的处理并不是那么方便,而且在Jmeter的支持下使用起来感觉也并不是很友好,此刻javascript就显得游刃有余了
二、JSR223 Assertion使用教程
JSR223 常用内置变量
变量 | 功能 |
---|---|
ctx | 访问当前线程的上下文 |
prev | 访问当前的取样器运行结果 |
vars | 访问当前变量 |
props | 访问当前属性 |
sample | 访问当前取样器 |
log | 写日志 |
AssertionResult.setFailure | 断言结果(true/false) |
AssertionResult.setFailureMessage | 断言失败提示内容 |
JSR223断言常用操作
- 获取当前线程组里的变量
var expectedValue = vars.get("sourceShipperCode");
- 获取属性值
var prop= props.get("prop");
- 打印变量
log.info("预期值:"+expectedValue);
log.info("实际值:"+actual);
查看日志
- 断言结果和断言错误提示
AssertionResult.setFailureMessage("\n运单号:"+logisticCode+"\n预期值:"+expectedValue+"\n实际响应结果:"+shippers)
AssertionResult.setFailure(true);
- 获取取样器响应内容转换为字符串
var Responsedata = prev.getResponseDataAsString();
- 将字符串解析为对象
var obj = eval('(' + Responsedata + ')');
三、Demo
下述脚本场景就是解析结果数据来与预期值比较进行断言
var expectedValue = vars.get("sourceShipperCode");
var Responsedata = prev.getResponseDataAsString();
//log.info("结果是" + Responsedata);
var obj = eval('(' + Responsedata + ')');
var shippers = obj.Shippers;
var logisticCode = obj.LogisticCode;
if(shippers == null || shippers.length == 0){
log.info("运单号:"+logisticCode+"预期值:"+expectedValue+"实际值:"+null);
AssertionResult.setFailureMessage("\n运单号:"+logisticCode+"\n预期值:"+expectedValue+"\n实际值:"+null)
AssertionResult.setFailure(true);
}else{
var actual = shippers[0].ShipperCode;
var shippersStr = JSON.stringify(shippers);
if(!shippersStr.contains(expectedValue)){
log.info("运单号:"+logisticCode+"预期值:"+expectedValue+"实际响应结果:"+Responsedata);
AssertionResult.setFailureMessage("\n运单号:"+logisticCode+"\n预期值:"+expectedValue+"\n实际响应结果:"+shippers)
AssertionResult.setFailure(true);
}
}