接口自动化框架篇:接口框架中的常归断言封装!

在接口自动化测试中,断言(Assertion)是非常重要的一部分。通过对接口的返回结果进行断言,我们可以确认接口是否返回了正确的数据,从而验证接口的正确性。

为了提高代码的可读性和可维护性,我们通常会将常用的断言封装成函数或类,以便在不同的测试用例中复用。本篇文章将详细介绍如何从零开始编写一个规范的接口自动化测试框架中的断言封装。

1. 断言函数的基本结构

一个基本的断言函数通常应该包括以下几个步骤:

  • 获取接口返回的实际结果
  • 获取预期结果
  • 对比实际结果和预期结果,判断是否相等
  • 如果不相等,抛出异常

下面是一个示例的断言函数的基本结构:

def assert_equal(actual, expected):
    if actual != expected:
        raise AssertionError(f"Actual: {actual}, Expected: {expected}")

在这个示例中,我们使用 if 语句对比实际结果和预期结果,如果不相等,就抛出 AssertionError 异常,并在异常信息中输出实际结果和预期结果。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

2. 添加更多的断言函数

在实际的测试中,我们通常需要对不同的类型的数据进行断言,比如对字符串、整数、浮点数等进行比较。为了方便使用,我们可以添加更多的断言函数,以支持不同类型的数据比较。

下面是一些常用的断言函数示例:

def assert_equal(actual, expected):
    if actual != expected:
        raise AssertionError(f"Actual: {actual}, Expected: {expected}")

def assert_not_equal(actual, expected):
    if actual == expected:
        raise AssertionError(f"Actual: {actual}, Expected: {expected}")

def assert_true(condition):
    if not condition:
        raise AssertionError(f"Condition is not True")

def assert_false(condition):
    if condition:
        raise AssertionError(f"Condition is not False")

def assert_contains(container, item):
    if item not in container:
        raise AssertionError(f"Item: {item} is not in container")

def assert_not_contains(container, item):
    if item in container:
        raise AssertionError(f"Item: {item} is in container")

通过添加这些断言函数,我们可以在测试用例中更方便地进行断言操作。

3. 封装断言类

如果我们的断言函数越来越多,为了更好地组织和管理这些函数,我们可以将它们封装成一个断言类。通过断言类,我们可以更方便地调用断言函数。

下面是一个简单的断言类的示例:

class Assert:
    @staticmethod
    def equal(actual, expected):
        if actual != expected:
            raise AssertionError(f"Actual: {actual}, Expected: {expected}")

    @staticmethod
    def not_equal(actual, expected):
        if actual == expected:
            raise AssertionError(f"Actual: {actual}, Expected: {expected}")

    @staticmethod
    def true(condition):
        if not condition:
            raise AssertionError(f"Condition is not True")

    @staticmethod
    def false(condition):
        if condition:
            raise AssertionError(f"Condition is not False")

    @staticmethod
    def contains(container, item):
        if item not in container:
            raise AssertionError(f"Item: {item} is not in container")

    @staticmethod
    def not_contains(container, item):
        if item in container:
            raise AssertionError(f"Item: {item} is in container")

通过断言类,我们可以更方便地调用断言函数:

Assert.equal(actual, expected)
Assert.true(condition)
Assert.contains(container, item)

4. 使用断言函数进行测试

在编写测试用例时,我们可以使用断言函数进行断言,判断接口是否返回了正确的数据。

例如,假设我们有一个获取用户信息的接口 /api/user,返回的结果应该是一个字典,其中包含用户的姓名和年龄。我们可以编写以下测试用例进行断言:

def test_get_user_info():
    response = requests.get("/api/user")
    data = response.json()

    Assert.equal(data["name"], "John")
    Assert.equal(data["age"], 30)

在这个示例中,我们发送了一个 GET 请求获取用户信息,然后使用断言函数判断返回的结果是否正确。

总结

通过封装常归断言函数,我们可以更好地组织和管理断言代码,提高代码的可读性和可维护性。在编写接口自动化测试框架时,合理使用断言函数可以让我们的测试代码更加规范和高效。希望本文对你有所帮助!

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

前沿动态 | 关于AI大模型,你知道多少?

AI大模型含义 AI 大模型是人工智能预训练大模型的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了新的人工智能模式,即模型在大规模数据集上完成预训练后,仅需少量数据的微调甚至无需微调,就能直接支撑各类…

python高级爱心代码

python高级爱心代码实现: import turtle import random # 设置画布 screen turtle.Screen() screen.bgcolor("black") # 创建画笔 pen turtle.Turtle() pen.speed(0) pen.color("red") pen.penup() # 移动画笔到起始位置 pen.goto(0, -20…

伪头部校验

本章问题 UDP和TCP的伪首部只用于计算校验和,在UDP和TCP的报文中是不存在的,为什么要引入伪首部呢?为什么伪首部的要有这些字段?这里我们就先看一下TCP和UDP的首部格式。 TCP和UDP首部 源端口目的端口:是0-65535任…

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…

2024汽车行业用户洞察与营销趋势白皮书

来源:小红书&寰球汽车:

晶振的振荡模式有哪些?

晶振,即晶体振荡器,是一种能够产生精确振荡频率的电子元件,它利用石英晶体的压电效应来产生稳定的振荡信号。晶振的振荡模式主要有以下几种:1. 串联谐振(Series Resonance): 在这种模式下&am…

Moe 混合多专家模型 原理 + 大模型的有性繁殖 + DIY 自己的 Moe 专家系统

Moe 混合多专家模型 原理 大模型的有性繁殖 DIY 自己的 Moe 专家系统 MoE 介绍标准 Transformer 编码器MoE Transformer 编码器专家网络层 大模型的有性繁殖mergekit 合并 多个专家模型 的方式1. SLERP(球面线性插值)2. TIES3. DARE4. Passthrough5. L…

露营涮火锅小朋友不慎烫伤大腿 家长抱娃涮河急救获医生点赞

近日,陈女士一家三口在西安市长安区附近露营涮火锅,却不料小朋友在起身时不小心打翻了吃火锅的锅,导致腿被烫伤,陈女士急忙抱着孩子到临近河边,用河水来冲洗小朋友烫伤的腿,随后立刻赶至西安国际医学中心医…

Kroma宣布推出Spectrum:以太坊Layer-2的先进原生质押服务

Kroma宣布推出备受期待的Spectrum,这是一项先进的原生质押服务,旨在彻底改变以太坊 Layer-2格局。Spectrum将于2024年5月14日开始运营,为用户提供利用质押ETH、stETH和eETH的奖励机会,助力用户在去中心化金融(DeFi&…

Python 海龟画图(Turtle)命令大全

移动和绘制 forward() | fd() 使用语法: ​​turtle.forward(距离)​​ ​​turtle.fd(距离)​​ 参数说明: 距离 一个数字 (整数 或者 浮点) (注:单位是像素) 代码示例: import turtle turtle.forward(200) …

docker镜像中搭建FastDfs

docker镜像中搭建FastDfs 一、搭建过程二、docker端口映射三、映射的方法三、配置Tracker 和 Storage 环境:腾讯云服务器上 ubuntu20.04镜像 一、搭建过程 正常直接在云服务器上搭建过程参考博客: https://blog.csdn.net/qq_38531706/article/details/…

分享如何通过定时任务调用lighthouse前端测试脚本+在持续集成测试中调用lighthouse前端测试脚本

最近写了个小工具来优化lighthouse在实际工作中的使用,具体实现了:通过定时任务调用前端测试脚本在持续集成测试中调用前端测试脚本。由于在公司中已经应用,所以就不能提供源码了,这里简单说一下实现思路,希望可以帮助…

武汉星起航:亚马逊跨境电商助力全球贸易:卖家轻松触达全球市场

作为全球最大的电子商务平台之一,亚马逊以其强大的品牌影响力和完善的服务体系,为全球卖家提供了一个展示和销售各类商品的广阔舞台。亚马逊跨境电商业务的快速发展,不仅为卖家打开了通向全球市场的大门,也为买家带来了更多元化、…

JS+JQ+Layui菜单栏点击URL跳转后保持选中状态

目录 一.问题描述 二.问题分析 三.问题解决 3.1JQuery解决 3.2原生JS解决 四.衍生问题 五.衍生问题解决方式 5.1JQ解决 5.2JS解决 六.效果 七.建议 一.问题描述 后端使用“Flask”开发 最近在开发个人网站,其中使用了“Layui”组件库来做“菜单导航栏…

Nginx日志格式配置

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nginx(“engine x”…

数据库SQL语言实战(九)(索引)

目录 1实战目标 2前提知识 2.1索引失效的情况 2.1.1数据准备 2.1.2插入数据 2.1.3失效情况 3练习题(利用索引提高查询速度) 题目一 题目二​ 题目三​ 题目四​ 题目五​ 总结 1实战目标 对比有无索引情况下数据检索速度,学会如何能够使用索引,掌握如何…

130.哈希表:赎金信(力扣)

题目描述 代码解决 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 创建一个大小为26的整数数组,用于存储每个字母在magazine中的出现次数int hash[26] {0};// 遍历magazine,将每个字母的出现次数记录在hash数组…

The 13th Shandong ICPC Provincial Collegiate Programming Contest

The 13th Shandong ICPC Provincial Collegiate Programming Contest The 13th Shandong ICPC Provincial Collegiate Programming Contest A. Orders 题意:有n个订单, 每日可生产k个产品,每个订单给出交付日和交付数量,是否能…

谈谈【软件测试的基础知识,基础模型】

关于软件测试的基本概念和基本模型 前言一个优秀的测试人员具备的素质关于需求测试用例软件错误(BUG)概念开发模型瀑布模型(Waterfall Model)螺旋模型(Spiral Model) 前言 首先,什么是软件测试? 通俗来讲:软件测试就是找BUG&…

Vitis HLS 学习笔记--优化本地存储器访问瓶颈

目录 1. 简介 2. 代码解析 2.1 原始代码 2.2 优化后 2.3 分析优化措施 3. 总结 1. 简介 在Vitis HLS中,实现II(迭代间隔) 1是提高循环执行效率的关键。II1意味着每个时钟周期都可以开始一个新的迭代,这是最理想的情况&…