如何写接口自动化测试断言?

这篇具有很好参考价值的文章主要介绍了如何写接口自动化测试断言?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨

你真的会写自动化测试断言吗?

在接口测试中,断言是一项非常重要的操作,它是用来校验接口返回结果是否符合预期的一种手段。一般来说,接口测试断言大致可以分为以下几类:

  1. 状态码断言:这是最基本也是最常用的一种断言方式。大部分情况下,接口返回的HTTP状态码可以用来判断接口请求是否成功。

  2. 响应体断言:基于接口的响应数据进行校验。

  3. 响应时间断言:接口响应时间是否在可接受的范围之内。

  4. 数据库断言:接口调用后,数据是否有相应的变化。

这种使用断言来进行接口测试的方法,在测试框架中的具体实现可能各不相同。

下文将以Python的requests模块来做一个简单的例子。

首先,我们需要构造一个基本的GET请求,并获取响应:


import requests

response = requests.get('http://api.example.com/data')

在得到了响应后,我们可以使用Python的assert关键字来进行断言。比如我们可以断言状态码是200:

assert response.status_code == 200

如果状态码不是200,那么这个语句会抛出AssertionError

我们也可以断言响应的JSON数据中包含了某个特定的键:

data = response.json()
assert 'key' in data

同样,如果'key'不在data中,那么这个语句也会抛出AssertionError。对于更复杂的断言,我们可能需要使用一些第三方库来帮助我们。比如我们可以使用jsonschema库来断言响应数据符合某个JSON Schema:


from jsonschema import validate

schema = {
    "type" : "object",
    "properties" : {
        "key" : {"type" : "string"},
    },
    "required": ["key"]
}

validate(data, schema)

那么,对于更复杂的断言,我们该怎么做呢?

如何写接口自动化测试断言?,自动化测试,软件测试,测试工具,python,json,单元测试,职场和发展

对于JSON响应断言,主要是确认返回的JSON对象中的某个或者某些元素是否和预期的一致。这种断言的方式,最常见的就是比对键值对是否相符了。举个例子,假设我们期待的JSON响应如下

{
    "title": "foo",
    "body": "bar",
    "userId": 1
}

我们可以使用Python来做一个简单的断言操作:

expected_json = {
    "title": "foo",
    "body": "bar",
    "userId": 1
}

response_json = response.json()

assert response_json == expected_json

在上述代码中,response.json()用来从响应中获取JSON数据,然后使用assert语句来断言这个JSON数据和我们期待的JSON数据是否相同。

如果我们只关心返回结果中的某一部分,例如,我们只关心返回结果中的title字段,那么我们可以做如下断言:

assert response_json['title'] == expected_json['title']

对于更复杂的JSON响应断言,比如,JSON响应为嵌套结构,或者是JSON数组,我们可能需要进行递归或者遍历等操作来进行断言,这种情况下可以使用一些第三方的断言库来提升我们的效率。比如Python的jsonpath库,可以帮助我们快速的定位JSON中的某一段数据,并进行断言

JsonPah是一种信息检索语言,可以让你用一个类似XPath的语法快速定位JSON结构中的部分内容处理嵌套结构的JSON响应时,JsonPath提供了一种简单有效的方法。重要的是理解JsonPath的语法,比如 '$' 表示根节点,'.' 或 '[]' 用于访问子节点,'*' 用于通配等。

下面举个例子来说明如何使用JsonPath:假定我们有一个如下的复杂JSON:

response_json = {
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
}

如果我们需要取出所有书的标题(title),可以使用如下语句:


from jsonpath import jsonpath

titles = jsonpath(response_json, '$.store.book[*].title')

print(titles) #输出:['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

如果我们需要取出价格大于10的书的标题,可以使用如下语句:


titles = jsonpath(response_json, "$.store.book[?(@.price > 10)].title")

print(titles) # 输出:['Sword of Honour', 'The Lord of the Rings']

JsonPath非常简洁高效,能让我们的断言操作更简单,代码更清晰,既然这么强大的话,这不得有个使用方法

不着急,下面给你列出了常用的通配符的解析说明

JsonPath表达式中的通配符通常有以下几种:

  1. *:通配符,匹配所有的对象或元素。比如 $..book[*].author 可获取所有作者的名字。
  2. ..:深度操作符,无论深度多少层,都可以匹配到路径。比如 $..author 可获取所有的作者信息。
  3. . 或 []:逐层向下遍历,. 针对于名字,[] 针对于数组下标或者名称。比如 $['store']['book'][0]['price'] 获取第一本书的价格。
  4. @:现行节点信息,常在过滤器中使用,比如 $..book[?(@.price<10)] 意思是获取所有价格小于10的书。
  5. ():表达式组,用于根据自定义表达式过滤。比如 $..book[(@.length-1)] 获取最后一本书。
  6. ?():过滤操作符,用于查找符合条件的元素。比如 $..book[?(@.isbn)] 获取所有包含ISBN的书。

以上这些通配符让我们在使用JsonPath时有更大的灵活性,可以在大型或者嵌套较深的JSON数据中准确地定位我们所需要的数据。

那么,面试会怎么问呢

举个例子:

面试官:JsonPath表达式中的深度操作符..可以匹配到多少层的路径?

YOU:在JsonPath中,深度操作符 .. 在不知道精确路径或者需要查询多层嵌套数据时非常有用。.. 不关心元素在JSON数据中的精确位置,它会「深度搜索」,也就是说,无论数据嵌套在JSON结构的多深,只要符合你的查询条件,它都能找到。

可以用任何的名字或者通配符 * 来配合深度操作符一起使用,它们的组合可以匹配到任何级别的元素。例如,假设我们有一个JSON对象:

{
    "level_1": {
        "level_2": {
            "level_3": {
                "item": "value"
            }
        }
    }
}

如果你不知道 "item" 的精确路径,但你知道它的名字,并且你想从JSON数据中找到它,你可以使用 .. 操作符加上名字进行深度搜索,如:$..item,这将返回所有名为 "item" 的元素,无论它们处在哪一层级。

总的来说,深度操作符 .. 可以匹配到无限多层的路径,这对于处理深层嵌套的数据结构非常有用。

面试官:除了深度搜索,JsonPath还有其他什么功能可以处理深层嵌套的数据结构?

YOU:除了深度搜索外,JsonPath还提供了一些其他功能来处理深层嵌套的数据结构:

  1. 数组索引:JsonPath允许你使用数组索引来访问特定位置的元素。例如,表达式$.store.book[0]将返回图书数组的第一本书。

  2. 多个索引:JsonPath还允许你在同一层级上访问多个元素。例如,$.store.book[0,1]将返回图书数组的前两本书。

  3. 切片操作:JsonPath支持Python风格的切片操作,允许你访问一个连续的元素序列,而不仅仅是单个元素。例如, $.store.book[1:3]将返回图书数组的第二和第三本书。

  4. 过滤表达式:JsonPath支持过滤表达式,允许你使用逻辑运算符和比较运算符来过滤返回的元素。例如,$.store.book[?(@.price < 10)]将返回图书数组中价格低于10的所有书。

  5. 通配符:正如我们前面讨论的,*通配符可以用来匹配任意元素,不论位置。

总的来说,断言是接口测试中的一个重要部分,合理、充分地使用断言,不仅可以提升我们的测试质量,也能帮助我们快速定位问题。同时,塑造良好的断言策略,对于维护和持续提升一个测试框架也是尤为关键的。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处: 

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。文章来源地址https://www.toymoban.com/news/detail-806943.html

到了这里,关于如何写接口自动化测试断言?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?

    Pytest可以使用内置的logging模块来实现接口自动化测试用例执行后打印日志到日志目录以生成日志文件。以下是实现步骤: 1、在pytest配置文件(conftest.py)中,定义一个日志输出路径,并设置logging模块。 2、在测试用例中调用logging模块,输入需要生成的日志信息。 3、运行p

    2024年02月10日
    浏览(58)
  • 软件测试面试题——接口自动化测试怎么做?

    面试过程中,也问了该问题,以下是自己的回答: 接口自动化测试,之前做过,第一个版本是用jmeter 做的,1 主要是将P0级别的功能接口梳理出来,根据业务流抓包获取相关接口,并在jmeter中跑通,2 是整理了项目上的所有接口,先将单个接口跑通,然后再编写不同的接口用

    2024年02月14日
    浏览(58)
  • 软件测试:功能测试-接口测试-自动化测试-性能测试-验收测试

    软件测试的主要流程 一、测试主要的四个阶段 1.测试计划设计阶段 :产品立项之后,进行需求分析,需求评审,业务需求评级,绘制业务流程图。确定测试负责人,开始制定测试计划; 2.测试准备阶段 :各成员编写测试用例、先小组内评审、后会议评审,测试样机和配件,

    2024年02月08日
    浏览(59)
  • 软件测试(功能、接口、性能、自动化)详解

    测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 黑盒测试常见测试用例编写方法 1、等价类 选取少数有代表性的数据,这一类

    2024年02月13日
    浏览(63)
  • 2023软件测试工具大全(自动化、接口、性能、安全、测试管理)

    目录 前言 一、自动化测试工具 Selenium Appium TestComplete 二、接口测试工具 Postman SoapUI JMeter 三、性能测试工具 LoadRunner JMeter Gatling 四、安全测试工具 Burp Suite OWASP ZAP Nmap 五、测试管理工具 TestRail JIRA TestLink 总结 软件测试是保障软件质量的重要环节,而现代化的软件开发过程中

    2024年02月16日
    浏览(125)
  • 软件测试(功能、工具、接口、性能、自动化、测开)详解

    一、软件测试功能测试 测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 黑盒测试常见测试用例编写方法 1、等价类 选取少数

    2024年02月07日
    浏览(79)
  • postman实现接口自动化图解步骤,测试用例集,断言,动态参数,全局变量的随笔记录

    实现接口自动化的方式有很多种,requests + unittest + ddt 的接口自动化框架有些朋友也有接触,但是考虑到很多没有代码基础,且这种框架实现需要的时间周期比较长,但是大多数公司的项目时间并不充裕。 如下图,点击postman左侧Collections下面有个添加文件夹图标,就可以创建

    2024年02月03日
    浏览(53)
  • 自动化测试中如何判断测试是否通过?详解 Pytest 测试框架的断言用法

    目录 前言: 01 — Python 原生的 assert 02 — Pytest 的 assert 优点 03 — Pytest 断言的用法 4.1 断言字符串 4.2 断言函数或者接口返回值 4.3 断言集合类型 04 — Pytest 断言 Excepiton 05 — 为断言添加自定义功能 06 — 禁止 Pytest 的 assert 特性 07 — 总结 在自动化测试中,判断测试是否通过是

    2024年02月16日
    浏览(57)
  • 接口自动化测试项目2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等

    接口自动化测试项目2.0 本框架主要是基于 Python + unittest + ddt + HTMLTestRunner + log + excel + mysql + 企业微信通知 + Jenkins 实现的接口自动化框架。 项目参与者: 陈勇志 技术支持邮箱: 262667641@qq.com 个人微信: Testing_player 个人博客地址: https://home.cnblogs.com/u/Nephalem-262667641 微信公众号:测

    2024年02月16日
    浏览(65)
  • Python自动化测试用例:如何优雅的完成Json格式数据断言

    目录 前言 直接使用 优化 封装 小结 进阶 总结  资料获取方法 记录Json断言在工作中的应用进阶。 很早以前写过一篇博客,记录当时获取一个多级json中指定key的数据: 后来在写用例生成过程中,发现重复的断言描述信息较多,大多数数据返回其实都是标准的json,所以将整个

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包