Python接口自动化测试:断言封装详解

    


概要

在进行API接口测试时,断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中,我们可以利用一些库来实现断言功能。


1. 安装必要的库

在Python中,我们主要会使用两个库:requestsjsonpathrequests库用于发送HTTP请求,而jsonpath库则用于解析JSON数据。

首先,我们需要安装这两个库。打开命令行,输入以下命令:

pip install requests
pip install jsonpath

2. 封装断言函数

接下来,我们需要编写一个断言函数。该函数负责读取接口返回的信息,并根据预先设定的条件进行断言。以下是一个基本的断言函数示例:

import requests
import jsonpathdef assert_response(response, assertions):for assertion in assertions:actual_value = jsonpath.jsonpath(response.json(), assertion["jsonpath"])expected_value = assertion["expected_value"]assert actual_value[0] == expected_value, f"断言失败。期望值为 {expected_value},实际值为 {actual_value[0]}"

在这个函数中,我们首先使用jsonpath从JSON数据中提取实际值。然后,我们使用assert语句来进行断言,判断实际值是否等于预期值。

3. 使用断言函数

现在,我们可以在接口测试中使用这个断言函数了。

首先,我们需要发送一个HTTP请求,并获取返回的响应。然后,我们可以使用断言函数来检查响应是否符合预期。

以下是一个示例:

# 发送HTTP请求
url = "<http://example.com/api>"
response = requests.get(url)# 定义断言
assertions = [{"jsonpath": "$.status","expected_value": "success"},{"jsonpath": "$.data[0].id","expected_value": 1}
]# 使用断言函数
assert_response(response, assertions)

在这个示例中,我们首先发送一个GET请求到http://example.com/api。然后,我们定义了两个断言:一个是检查status是否为success,另一个是检查第一条数据的id是否为1。最后,我们调用assert_response函数进行断言。

4. 高级断言示例

除了基本的断言功能之外,我们还可以进行更多的断言操作。以下是一些高级断言示例:

检查列表长度

有时候,我们需要检查返回结果中某个列表的长度是否符合预期。可以通过以下方式进行断言:

assert len(response.json()["data"]) == expected_length

例如,假设我们期望返回的数据列表长度为10,我们可以使用上述断言来验证。

检查关键字存在

有时候,我们需要检查返回结果中是否包含某个关键字。可以通过以下方式进行断言:

assert keyword in response.json()["data"]

例如,假设我们期望返回的数据中包含关键字"example",我们可以使用上述断言来验证。

检查响应时间

有时候,我们需要检查接口的响应时间是否在预期范围内。可以通过以下方式进行断言:

assert response.elapsed.total_seconds() <= expected_time

例如,假设我们期望接口的响应时间不超过5秒,我们可以使用上述断言来验证。

检查状态码

在接口测试中,我们经常需要检查返回的状态码是否符合预期。可以通过以下方式进行断言:

assert response.status_code == expected_status_code

例如,假设我们期望返回的状态码为200,我们可以使用上述断言来验证。

通过这些高级断言操作,我们可以更加灵活地进行接口测试和结果验证。

5. 完全封装的断言方法

除了逐个断言检查外,我们还可以将所有断言封装到一个方法中,以便更方便地进行结果验证。以下是一个完全封装的断言方法示例:

import requests
import jsonpathdef assert_responses(responses, assertions):for index, response in enumerate(responses):for assertion in assertions[index]:actual_value = jsonpath.jsonpath(response.json(), assertion["jsonpath"])expected_value = assertion["expected_value"]assert actual_value[0] == expected_value, f"断言失败。期望值为 {expected_value},实际值为 {actual_value[0]}"

在这个方法中,我们接受一个包含多个响应的列表和一个包含多个断言的列表。我们使用嵌套循环来遍历每个响应和断言,并进行断言检查。

以下是一个示例:

# 发送HTTP请求
urls = ["<http://example.com/api1>", "<http://example.com/api2>", "<http://example.com/api3>"]
responses = [requests.get(url) for url in urls]# 定义断言
assertions = [[{"jsonpath": "$.status","expected_value": "success"},{"jsonpath": "$.data[0].id","expected_value": 1}],[{"jsonpath": "$.status","expected_value": "success"},{"jsonpath": "$.data[0].name","expected_value": "example"}],[{"jsonpath": "$.status","expected_value": "success"}]
]# 使用断言函数
assert_responses(responses, assertions)

在这个示例中,我们发送了三个GET请求到不同的URL,并获得了三个响应。然后,我们定义了三个断言列表,每个列表对应一个响应。我们可以通过调整断言列表来适应不同的测试场景。

通过完全封装的断言方法,我们可以更加灵活地进行多个响应的结果验证。

总结

Python中的断言封装主要涉及到了requests和jsonpath两个库的使用。通过这两个库,我们可以方便地发送HTTP请求,解析JSON数据,以及进行断言。希望这篇文章对于Python中断言封装的理解有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/259504.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch从零开始实战12

Pytorch从零开始实战——DenseNet算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——DenseNet算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.…

cookie总结

cookie和session&#xff1a; 一、Cookie和Session二、使用Cookie保存用户上次的访问时间。三、Cookie常用方法总结乱码问题解决&#xff1a; 一、Cookie和Session 会话&#xff1a;用户从打开浏览器到关闭的整个过程就叫1次会话。 比如有的网站登录过一次&#xff0c;下次再进…

Elastcsearch:通过 Serverless 提供更多服务

作者&#xff1a;Ken Exner 人们使用 Elasticsearch 解决最大数据挑战的方式一直令我们感到惊讶。 从超过 40 亿次下载、70,000 次提交、1,800 名贡献者以及我们全球社区的反馈中可以清楚地看出这一点。 Elastic 在广泛的用例中发挥的作用促使我们简化复杂性&#xff0c;让搜索…

oracle 下载java之前版本

登录oracle官网&#xff1a;Oracle | Cloud Applications and Cloud Platform 点击resource 进入该页面 点击这个 出现之前版本

搭配君正主控芯片测评:创想三维物有所值,让你玩3D打印,而不是玩3D打印机

如果你在一年前开始接触3D打印&#xff0c;并且拥有一台入门级的3D打印机。那么&#xff0c;我相信很大一部分时间你是在给机器打“补丁”&#xff0c;让它真正能为你所用。而这台机器很可能是来自创想三维&#xff0c;不出意外就是其Ender系列的某一款。 然而&#xff0c;现在…

如何进行更好的面试回复之缓存函数在项目中的性能优化?

缓存函数是一种提高函数性能的技术&#xff0c;在函数被调用时&#xff0c;会将计算结果缓存起来&#xff0c;以便在后续的调用中直接返回缓存的结果&#xff0c;从而减少了重复计算的时间。 缓存函数的实现通常包括两个步骤&#xff1a; 判断缓存是否存在&#xff1a;在函数被…

Ubuntu22.04安装完成后便可直接使用键盘上的Print键进行截图

概要&#xff1a;Ubuntu22.04安装完成后&#xff0c;无需安装什么截图软件&#xff0c;可以直接使用键盘上的Print键进行截图。 1、按一下Print键 我的电脑上Print键是PrtSc&#xff0c;如下图所示 2、框选区域并截图 如下图中&#xff0c;可以框选(Selection)&#xff0c;也…

VUE学习二、创建一个前端项目

1.创建一个vue项目 使用命令 vue ui启动vue脚手架 vue ui 等待项目创建好 可以来任务栏启动项目 参数那里可以设置启动端口等参数 启动成功 成功访问 2. 用webstorm 打开项目 脚手架页面可安装基本依赖 比如路由 使用ws打开项目 启动项目 npm run serve 3.修改启动…

基于java斗车交易系统设计与实现论文

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

金蝶 Apusic 应用服务器任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1. 产品介绍 金蝶 Apusic 是金蝶集团旗下的一款企业级应用服务器&#…

golang slice 数组针对某个字段进行排序

这里主要用到golang的sort.Sort方法&#xff0c;先看这个函数的简介&#xff1a; 介绍链接&#xff1a;https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter03/03.1.html 如何实现&#xff1a; import "sort"// UserInfo 用户信息结构…

Git:修改最近一次 Git 提交的描述,使用 --amend 选项

目录 步骤1. 使用编辑器修改最近一次提交的描述 git commit --amend2. 在编辑器中修改描述3. 保存修改4. 如果提交包含文件修改5. 强制推送&#xff08;如果已经推送到远程仓库&#xff09; 步骤 1. 使用编辑器修改最近一次提交的描述 git commit --amend git commit --amend…