断言语法

断言可以用来检查响应头和响应体

断言语法规则

1. 格式:一行一个断言,格式为 “指令:参数”。指令不区分大小写,但参数区分大小写,且断言中忽略空格和空行。

2. 特殊字符处理:若参数部分需包含 “:”,应写为 “:”。可使用 “//” 进行注释。

3. 相反指令:除 “status is” 外,含 “is”、“contain” 的指令,都有对应的 “not is”、“not contain” 表示相反意义。

响应头断言

响应码断言

格式:"status is: <响应码>"

// 假设响应头第一行为:"HTTP/1.1 200 OK"

// 成功
status is: 200

// 失败
status is: 302
    
响应头部字段断言

格式:"header <头部字段> [not] is|contain: <参数>",用来测试响应头部字段是否符合预期。

// 假设响应头Content-Type行为:"Content-Type: text/html; charset=UTF-8"

// 成功
header content-type is: text/html; charset=UTF-8

// 成功
header content-type contain: text/html

// 失败
header content-type not is : text/html; charset=UTF-8

// 失败
header content-type not contain: text/html
    

响应体断言

响应体示例1,节选完整HTML的一部分

<h3 class="title">无题</h3>
<div>
    <p>锦瑟无端五十弦  一弦一柱思华年</p>
    <p>庄生晓梦迷蝴蝶  望帝春心托杜鹃</p>
    <p>沧海月明珠有泪  蓝田日暖玉生烟</p>
    <p>此情可待成追忆  只是当时已惘然</p>
</div>

响应体断言,不论HTML还是JSON格式,都可以使用

格式:"body [not] contain: <参数>",用来测试响应是否包含某个值。


// 成功
body contain: 无题

// 成功
body contain: 此情可待成追忆  只是当时已惘然

// 失败
body not contain: 无题

// 失败
body not contain: 此情可待成追忆  只是当时已惘然
   
DOM 断言

如果响应体是HTML格式,可以使用DOM断言

格式:"dom exists element: <css 选择器>"
用来测试DOM中是否存在对应 css选择器 的节点。

格式:"query all '<css selector>' length is: <整数>"
用来测试DOM中对应 css选择器 节点的数量。

格式:"query '<css selector>' value|id|class|style|data-title|... [not] is|contain: <值>"
用来测试DOM中对应 css选择器 节点的属性值是否"是|包含"某个值。

格式:"query '<css selector>' content [not] is|contain: <值>"
用来测试DOM中对应 css选择器 节点的innerHTML是否"是|包含"某个值。

格式:"query '<css selector>' text [not] is|contain: <值>"
用来测试DOM中对应 css选择器 节点的文本是否"是|包含"某个值。

// 成功
dom exists element: .title

// 成功
query all 'div p' length is: 4

// 成功
query "h3" text is: 无题

// 成功
query "div:nth-child(4)" text contain: 此情可待成追忆  只是当时已惘然

    
JSON 断言

如果响应体是JSON格式,可以使用JSON断言

规则:

"json"": 整个JSON对象。

"json.data.<字符串>":json.data 对象的某个元素值。

"json.data.<整数>":json.data 数组的某个元素值。

// 等于javascript: json.data[1].message == 'abc'
json.data.1.message is: abc

// 等于javascript: json.data.key.message == 'abc'
json.data.key.message is: abc

// 等于javascript: json.data[1].message.includes('abc') == true
json.data.1.message contain: abc
    

结束语

以上是所有的断言语法。

录制请求后,完全可以用"body contain: <值>"这样的方式来书写断言,这能让你及其快速的建立测试集。

如果追求精细,则可以使用DOM断言和JSON断言,使用起来稍微复杂一些,建立断言的成本也相对大一些。

这两种方式都可以,具体由你的喜好,或者项目的需要而定。