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

    


概要

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


1. 安装必要的库

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

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

pip install requests
pip install jsonpath

2. 封装断言函数

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

import requests
import jsonpath

def 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 jsonpath

def 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中断言封装的理解有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人脸检测,人脸识别综述

Retinaface SCRFD [PDF] CenterFace: Joint Face Detection and Alignment Using Face as Point | Semantic Scholar

SpringBoot 配置文件使用@ @取值

目录 一、背景 二、遇到的问题 三、解决办法 一、背景 &#xff08;1&#xff09;我在项目中引入了如下依赖&#xff0c;目的是开启SpringBoot为我们提供的监控(Actuator)功能。 <!-- 引入SpringBoot 监控功能 --> <dependency><groupId>org.springframew…

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一个由Apache基金会所开发的用于解决海量数据的存储及分析计算问题的分布式系统基础架构。 广义上来说&#xff0c;Hadoop通常指一个跟广泛的概念——Hadoop生态圈。 以下是hadoop生态圈中的技术&#xff1a; Hadoop优势 hadoop组成 HDFS…

MangoDB数据可updata报错

报错详情 报错原因 语法错误&#xff0c;我们调整语法即可 update&#xff08;{要修改的行}&#xff0c;{$set{要修改的字段}}&#xff09;

Spring--10--Spring Bean的生命周期

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.Spring Bean1.1 什么是 Bean简而言之&#xff0c;bean 是由 Spring IoC 容器实例化、组装和管理的对象。 1.2 Spring框架管理Bean对象的优势 2.Bean的生命周期实例…

【分享】我想上手机器学习

目录 前言 一、理解机器学习 1.1 机器学习的目的 1.2 机器学习的模型 1.3 机器学习的数据 二、学习机器学习要学什么 2.1 学习机器学习的核心内容 2.2 怎么选择模型 2.3 怎么获取训练数据 2.4 怎么训练模型 三、机器学习的门槛 3.1 机器学习的第一道门槛 3.2 机器…

文件上传和下载

文件上传 1.文件上传的原理: 要实现Web开发中的文件上传功能&#xff0c;通常需完成两步操作&#xff1a;一是在Web项目的页面中添加上传输入项&#xff0c;二是在Servlet中读取上传文件的数据&#xff0c;并保存到目标路径中。 由于大多数文件的上传都是通过表单的形式提交…

北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯(bug已解决 更新至3.0)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1一些更新和讲解 1.2改正后的…

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号&#xff01;用来区分不同的软件进程 被规定总共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一协议下&#xff0c;端口号不可以冲突占用 端口分类&#xff1a; 公有端口&#xff1a;0~1023 HT…

Linux环境下用yum安装postgres15

1. 下载PostgreSQL 15 安装包 在官网选择对应版本的安装包 https://www.postgresql.org/download/ Linux | CentOS 7 | PostgreSQL 15 2. 安装PostgreSQL 15 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…

chrome安装jsonview

写在前面 通过jsonview可以实现&#xff0c;当http响应时application/json时直接在浏览器格式化显示&#xff0c;增加可读性。本文看下如何安装该插件到chrome中。 1&#xff1a;安装 首先在这里 下载插件包&#xff0c;然后解压备用。接着在chrome按照如下步骤操作&#xf…

小程序一键生成工具哪个好?

在这个数字化时代&#xff0c;小程序已经成为商家吸引客户、提升业务的重要工具。但是&#xff0c;传统的小程序开发方式既费时又费力&#xff0c;让许多商家望而却步。 现在&#xff0c;有了乔拓云小程序模板开发平台&#xff0c;一切都变了。 乔拓云提供了大量精心设计的模板…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展&#xff0c;手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员&#xff0c;了解手机销售技巧是必不可少的。本文将通过案例分析与实践&#xff0c;为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…

自动化运维工具-ansible部署

首先我们来谈一下&#xff0c;为什么要引入自动化运维呢&#xff1f; 引入自动化运维的目的是为了提高运维效率、降低人工操作的错误率、减少重复性的工作、提高系统的可靠性和稳定性。传统的手动运维方式存在以下问题&#xff1a; 出现了大量的人工干预&#xff0c;运维人员需…

Web端在线云剪辑方案

视频内容已经成为企业传播信息、展示品牌形象的重要手段。然而&#xff0c;视频制作并非易事&#xff0c;需要专业的技术和设备支持。为了帮助企业解决这个问题&#xff0c;美摄科技推出了Web端在线云剪辑方案&#xff0c;提供广播级专业技术赋能&#xff0c;帮助企业快速搭建视…

最新V2board面板支付设置(四)

顺哥博客 支付方式一&#xff08;推荐&#xff09;&#xff1a; USDT收款&#xff1a; 特点&#xff1a;自己的USDT钱包收款&#xff0c;没有中间商&#xff0c;无手续费&#xff0c;实时到账项目开源地址&#xff1a;【点击进入】把文件usdtwebhook.php放到网站此目录下&…

使用命令行移除VSAN中故障磁盘

原创作者&#xff1a;运维工程师 谢晋 使用命令行移除VSAN中故障磁盘 前提故障盘移除 前提 客户有套VSAN环境内有一台服务器的磁盘组出现了一块故障的数据盘&#xff0c;但该盘已经处于完全掉线状态&#xff0c;无法进行正常移除。如下图&#xff1a; 如果遇到这种情况&am…

QT作业2

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘

为什么Java程序员需要掌握多线程&#xff1f;揭秘并发编程的奥秘 个人简介前言多线程对于Java的意义&#x1f4cc;1.提高程序性能&#xff1a;&#x1f4cc;2 提高用户体验&#xff1a;&#x1f4cc;3支持并发处理&#xff1a;&#x1f4cc;4 资源共享和同步&#xff1a;&#…

el-tree数据量过大,造成浏览器卡死、崩溃

el-tree数据量过大&#xff0c;造成浏览器卡死、崩溃 场景&#xff1a;树形结构展示&#xff0c;数据超级多&#xff0c;超过万条&#xff0c;每次打开都会崩溃 我这里采用的是引入新的插件虚拟树&#xff0c;它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…