【技术分享】接口自动化测试中,如何做断言验证?

news/2024/12/28 19:45:18/

在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证。验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,如何对服务端返回的响应内容做断言验证。

实战练习

对接口服务发起 HTTP 请求信息,获得响应内容之后,对其做断言验证。

Python 演示代码

在发起请求后,使用一个变量r存储响应的内容,也就是Response对象。

r = requests.get("https://httpbin.ceshiren.com/get")

响应结果:​​​​​​

{  "args": {},  "headers": {    "Accept": "*/*",    "Accept-Encoding": "gzip, deflate",    "Host": "httpbin.ceshiren.com",    "User-Agent": "python-requests/2.25.1",    "X-Forwarded-Host": "httpbin.ceshiren.com",    "X-Scheme": "https"  },  "origin": "119.123.205.82",  "url": "https://httpbin.ceshiren.com/get"}

Response 对象有很多功能强大的方法可以调用,比如直接获取响应头,获取 Unicode 编码后的响应内容,获取二进制的响应内容,获取原始的响应内容等等。

响应断言

响应状态码断言

  • 断言成功

import requestsr = requests.get('https://httpbin.ceshiren.com/get')assert r.status_code==200

assert是 python 的内置函数,用来判断表达式,当表达式条件为 False 的时候就会触发异常。r.status_code是 response 对象内的一个方法,用于获得返回值的状态码。assert r.status_code==200 就是在判断状态码是否等于 200,如果不等于 200 则会抛出异常。

  • 断言失败

>>> import requests>>> r = requests.get('https://httpbin.ceshiren.com/get')>>> assert r.status_code==400Traceback (most recent call last):  File "<stdin>", line 1, in <module>AssertionError

从以上例子可了解到,此响应状态码实际输出与预期结果状态码 400 不相等,所以抛出了异常。

Json 响应断言

data = {      "hogwarts": ["a","b","c"]  }r = requests.post('https://httpbin.ceshiren.com/post',json=data)print(json.dumps(r.json(),indent=2))assert r.status_code == 200assert r.json()["json"]["hogwarts"][0] == "a"

响应结果:​​​​​​​

"args": {},  "data": "{"hogwarts": ["a", "b", "c"]}",  "files": {},  "form": {},  "headers": {    ...省略...  },  "json": {    "hogwarts": [      "a",      "b",      "c"    ]  },  "origin": "113.89.8.68",  "url": "https://httpbin.ceshiren.com/post"}

通过 assert r.json()["json"]["hogwarts"][0] == "a" 对 json 的内容进行断言,其中 r.json() 是获取相应的内容,r.json()["json"] 是获取到 json 的内容,r.json()["json"]["hogwarts"] 是获取到 hogwarts 的内容,r.json()["json"]["hogwarts"][0] 是 hogwarts 下的第一个数据。

Java 演示代码

Java 通过 then 进行断言验证,then() 方法可以对多种不同类型的响应信息进行验证。

  • 断言响应状态码成功

import static io.restassured.RestAssured.*;
public class Requests {    public static void main(String[] args) {        given().when().get("https://httpbin.ceshiren.com/get").                //通常通过 then 进行断言验证                 then().statusCode(200);    }}

通过 then() 方法提供的 statusCode() 方法即可实现对于响应状态码的验证,statusCode() 方法通常接收的是 int 类型的参数。statusCode(200) 表示判断响应状态码是否等于 200,如果不等于 200 则会抛出异常。

如果将以上代码中断言验证的代码改成 statusCode(300),那么控制台则会输出异常信息。​​​​​​​

Exception in thread "main" java.lang.AssertionError: 1 expectation failed.Expected status code <300> but was <200>.

json 响应断言​​​​​​

import static io.restassured.RestAssured.*;import static org.hamcrest.core.IsEqual.equalTo;
public class Requests {    public static void main(String[] args) {        given().when().get("https://httpbin.ceshiren.com/get").                then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();    }}

通过 then().body("headers.Host", equalTo("httpbin.ceshiren.com")) 对 json 的内容进行断言,其中 then().body() 是获取相应的内容,第一个参数是从响应内容中提取实际的字段值,第二个参数调用了 equalTo() 方法,并在其中传入了期望结果。


绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

 


http://www.ppmy.cn/news/46654.html

相关文章

JavaScript学习笔记(二)

文章目录 第4章&#xff1a;变量、作用域与内存1. 原始值与引用值2. 执行上下文与作用域3. 垃圾回收 第5章&#xff1a;基本引用类型1. Date&#xff1a;参考了Java早期版本中的java.util.Date2. RegExp3. 原始值包装类型 第6章&#xff1a;集合引用类型1. Object2. Array&…

第07章_面向对象编程(进阶)

第07章_面向对象编程(进阶) 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 关键字&#xff1a;this 1.1 this是什么&#xff1f; 在Java中&#xff0c;this关键字不算难理解…

【Webpack】前端工程化与webpack

文章目录 前端工程化1、小白眼中的前端开发 vs 实际的前端开发2、什么是前端工程化3、前端工程化的解决方案 Webpack的基本使用1、什么是 webpack2、创建列表隔行变色项目3、在项目中安装webpack4、在项目中配置webpack Webpack中的插件1、webpack插件的作用2、webpack-dev -se…

软考-信息系统治理(三)

好的IT治理实践需要在组织全部范围内推行。 管理层次大致可分为三层: 最高管理层:最高管理层的主要职责包括: 证实IT战略与业务战略是否一致:证实通过明确的期望和衡量手段交付IT价值;指导IT战略、平衡支持组织当前和未来发展的投资;指导信息和数据资源的分配。 执行管理层:执行…

系统安全与应用【下】

文章目录 1.开关机安全控制1.1 GRUB限制1.2 实例&#xff1a;GRUB 菜单设置密码 2.终端登录安全控制2.1 限制root只在安全终端登录2.2 禁止普通用户登录 3.弱口令检测3.1 Joth the Ripper,JR 4.网络端口扫描4.1 nmap命令 1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 …

改进YOLO系列:如何在空间注意力模块基础上,魔改设计多种注意力机制(还未测试效果)

空间注意力模块 问题:SpatialAttention模块是一个简单的空间注意力模块,采用最大池化和平均池化结果的拼接,然后通过一个卷积层和Sigmoid激活函数产生注意力权重。这个结构在某些情况下可能会表现出一些缺点:1.过于简化:2.卷积核大小固定:3.计算效率:4.没有显式的位置编…

微观世界的详细地图:微生物生态位

是什么定义了微生物的栖息地 - 生态位&#xff1f;它是温度、湿度和营养成分等环境因素的组合。很难预测每一个因素的确切贡献度。Bas E. Dutilh研究组 基于生活在一起的微生物群体&#xff0c;重新定义了微生物生态位。 无论是在温泉、人体肠道还是深海中&#xff0c;微生物几…

Python-DQN代码阅读(6)-dpn.py

目录 1.代码 &#xff08;1&#xff09;导入所需要的包 &#xff08;2&#xff09;设置游戏并选择有效的操作 &#xff08;3&#xff09;设置模式(train/test)和开始迭代 &#xff08;4&#xff09;创建环境 代码总括&#xff1a; 代码分解&#xff1a; &#xff08;5&a…