断言参考
断言可以看作一个返回值为
true
或false
的函数.通常的表现形式:
- 给个
实际值
和期望值
,判断两个值是否符合某种关系.如:相等,大于,包含 ... - 给个
实际值
,判断这个实际值
是否满足某种条件.如:满足某个正则,非空 ...
因为俺会把请求的响应放到执行上下文中,而上下文的数据模型是一个
JSON结构体
.所以俺执行断言的基本规则是:使用JsonPath这种写法先定位实际值
,然后再执行相应的断言规则.JsonPath 由$.
或$[
开头,$
代表当前的 JSON 结构体 的根,可以进行嵌套.
#
$ ~ 编辑断言的用户界面俺的系统内部断言的真实面目是个标准的
JSON数据体
.但是面世的有以下两个面目:
#
默认的这种是默认的展示方式,功能比较简单,只支持
与
和或
的逻辑,俺觉得可以满足绝大多数需求.下面的图片示例中就是那四个断言全为真. 字面值的转换: 如果字面值是数字会自动转换成数字,如果是true
或false
会自动换成布尔类型,其他情况都按字符串处理.
#
完备的这种是功能完备的模式支持所有的断言功能,点击那个按钮可以切换两种模式.下面图片中的例子和上面的是完全等价的.
$list-and
和$list-or
两种断言对应默认模式显示的数据.如这个例子中的$list-and
就是上图显示的数据.详细参考看下面.
#
$eq ~ 等于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$ne ~ 不等于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$gt ~ 大于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$gte ~ 大于等于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$lt ~ 小于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$lte ~ 小于等于支持基本数据类型
byte
,short
,int
,long
,float
,double
,char
,boolean
和stirng
.
#
$in ~ 包含支持
数组
和string
类型.如果是数组,数组中的数据类型需要是基本数据类型或字符串.如果是字符串判断是否含有子串.
#
$nin ~ 不包含非
$in
的结果.
#
$size ~ 字符串或数组长度数组大小或字符串长度.
#
$regex ~ 匹配正则字符串符合正则.
#
$is-null ~ 是否为 null是否为
null
undefined
.
{ "$is-null": true // or false}
#
$is-empty ~ 是否为空字符串或空数组数组大小为 0,或空字符串.
{ "$is-empty": true // or false}
#
$type ~ 字段类型判断实际值的类型, 支持类型如下:
- boolean
值为
true
或false
- byte
数字, -128 ~ 127
- short
数字,16-bits, -32,768 ~ 32,767
- int
数字,32-bits -2^31 ~ 2^31-1
- long
数字,64-bits,-2^63 ~ 2^63-1
- float
单精度浮点
- double
双精度浮点
- string
字符串
- array
数组
- map
类型为
Map
/Object
- null
数据为
null
/undefined
#
$and ~ 逻辑与逻辑与.期望值是一组断言.
#
$list-and ~ 逻辑与同
$and
#
$or ~ 逻辑或逻辑或.期望值是一组断言.
#
$list-or ~ 逻辑或同
$or
#
$nor ~ 逻辑或非逻辑或非.期望值是一组断言.
#
$script ~ 脚本执行一段
Javascript
(Nashorn,和浏览器中的 JavaScript 有些不同)脚本,理论上可以实现任何断言功能,缺点是执行速度稍慢,不建议使用.$
代表当前实际值,可直接在脚本中引用,脚本执行的最后结果值是true
或false
.
假设响应体:
{ "name": "indigo", "owner": { "login": "indigo-api" }}
{ "$script": "$.entity.name=='indigo' && $.entity.owner.login.startsWith('indigo')"}