响应以及断言

在“发送HTTP请求”一讲中,我们讲解了APIPOST中响应数据的查看。 ## API 请求响应 点击发送按钮后,如果有数据返回,则会显示返回数据,响应时间,响应码,Cookie等。 ![](https://img.cdn.apipost.cn/mp/b2aaef3160620633.png) 注意:返回数据默认是 ==美化== 模式,便于查看 JSON XML 格式。您可以通过切换 ==原生== 或 ==预览== 模式 查看其它类型的类型。 ### 返回Headers ![](https://img.cdn.apipost.cn/mp/b0c6bf5bcfaf776e.png) 除了查看结果外,ApiPost也提供了强大的测试校验功能。在这里我们也可以使用断言来进行响应结果的校验。 ## 响应结果分屏展示 在APIPOST 5.4版本后,支持“响应结果分屏展示”,从而提升工作区的空间。 ![image.png](https://img.cdn.apipost.cn/user/-1/61e3ca02ec766dec.png)image.png ![image.png](https://img.cdn.apipost.cn/user/-1/45d6b7b897447bc6.png) ## 什么是断言? 协作开发,版本升级,服务器升级,接口返回有可能因为一些bug,和我们预期结果不一致。为了便于开发&测试人员能够更快的发现bug,有利于整个产品质量以及进度的保证。我们推出断言功能。 ### 如何使用断言? 1. 定义测试用例 2. 验证测试用例 例如接口返回: ``` { "errcode": 0, "errstr": "success", "post": [], "get": [], "request": [], "put": "", "header": { "Host": "echo.apipost.cn", "Connection": "keep-alive", "Content-Length": "0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN", "Content-Type": "application/json", "Cookie": "PHPSESSID=n3k73k06o6ghnie4e9re4rbf0t", "Origin": "https://echo.apipost.cn", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" } } ``` 定义测试用例: ``` apt.assert('response.raw.status==200'); apt.assert('response.raw.type=="json"'); apt.assert('response.json.errcode==0'); apt.assert('response.raw.responseTime<100'); apt.assert('response.json.header.Host=="echo.apipost.cn"'); ``` 点击发送按钮后: ![](https://img.cdn.apipost.cn/mp/5b6f9909f162c0c2.png) 绿色表示测试通过,红色表示测试不通过。 **特别注意:==每个测试用例是一行,不能换行。==** 例:apt.assert('response.json.header.Host=="echo.apipost.cn"'); 1)response.json.header.Host 表示响应json下面的header数组中的Host字段, 2)必须都为1,才会通过。 常见的测试用例可以通过后执行脚本获取: ![](https://img.cdn.apipost.cn/mp/037ab021a1cf3d22.png) ## 更多响应参数变量 ### response.raw:原始响应数据 调用示例: ``` response.raw.status //响应状态码(200、301、404等) response.raw.responseTime //响应时间(毫秒) response.raw.type //响应类型(json等) response.raw.responseText //响应文本 ``` ### response.json:json格式的响应数据 ![](https://img.cdn.apipost.cn/image/article/82f600042878484365dde232ceee73e3.png) 调用示例如上面示例: ``` response.json.data.token //也可以 response.json.data["token"] ``` ### response.headers:响应头 ![](https://img.cdn.apipost.cn/image/article/e268cdae05835cc030895065a90af51a.png) 调用示例: ``` response.headers.server //也可以 response.headers["server"] ``` ### response.cookies :响应cookie ![](https://img.cdn.apipost.cn/image/article/415422c814d9f364795c79b47dc7f825.png) 调用示例: ``` response.cookies.PHPSESSION //也可以 response.cookies["PHPSESSION"] ``` ## 常用断言表达式 1、检查response body中是否包含某个string ``` apt.assert('response.raw.responseText=="test"'); // 检查响应文本是否等于test字符串 apt.assert('response.raw.responseText.indexOf("test") > -1'); // 检查响应文本是否含有test字符串 ``` 2、检测返回JSON中的某个值是否等于预期的值 ``` apt.assert('response.json.hasOwnProperty("errcode")'); // 检测返回json对象的是否含有errcode字段 apt.assert('response.json.errcode=="success"'); // 检测返回json对象的errcode字段是否等于success字符串 apt.assert('response.json.errcode.indexOf("success") > -1'); // 检测返回json对象的errcode字段是否含有success字符串 apt.assert('response.json.errcode!="success"'); // 检测返回json对象的errcode字段是否不等于success字符串 apt.assert('response.json.errcode>=1'); // 检测返回json对象的errcode字段是否大于1 apt.assert('response.json.errcode==null'); // 检测返回json对象的errcode字段是否是null ``` 3、测试response Headers中的某个元素是否存在(如:Content-Type) ``` apt.assert('response.headers.hasOwnProperty("content-type")'); ``` 4、验证Status code(响应码)的值是不是等于200 ``` apt.assert('response.raw.status==200'); ``` 5、验证Response time(请求耗时)是否大于某个值 ``` apt.assert('response.raw.responseTime>=100'); ``` 6、验证返回类型是不是json ``` apt.assert('response.raw.type=="json"'); ```