【pytest系列】- assert断言的使用

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

常用断言

​ unittest断言方式是自身框架来实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类,因此pytest使用的断言是使用python内置的断言assert,相对于unittest各种各样的断言方法,但内置的断言会更简洁,它只有一种,如下。

​ 关键代码:assert 表达式, 错误提示信息

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_login</span>():</span>
    <span style="color:#b18eb1"><em># 使用python内置的断言</em></span>
    <span style="color:#f92672">assert</span> <span style="color:#d19a66">1</span> == <span style="color:#d19a66">2</span>, <span style="color:#98c379">'1是不等于2的'</span>	<span style="color:#b18eb1"><em># 错误信息也可以不写</em></span>
    
test_login()</span></span>

​ 运行结果:

shell
<span style="background-color:#282c34"><span style="color:#abb2bf">C:\software\python\python.exe D:/learn/test.py
Traceback (most recent call last):
  File "D:/learn/test.py", line 13, in <module>
    test_login()
  File "D:/learn/test.py", line 11, in test_login
    assert 1 == 2, '1是不等于2的'
AssertionError: 1是不等于2的

Process finished with exit code 1</span></span>

​ 常用的断言表达有以下几种🔻

  • assert xx:判断xx为真
  • assert not xx:判断xx不为真
  • assert a in b:判断b包含a
  • assert a not in b:判断b不包含a
  • assert a == b:判断a等于b
  • assert a != b:判断a不等于b

异常断言

​ 可以使用pytest.raises作为上下文管理器,当抛出异常时可以获取到对应的异常实例,然后断言它抛出的异常是不是预期的。

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 断言异常</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError):
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 如任意一个自然数除以0时,由于0不能作为被除数,执行时就会抛出ZeroDivisionError异常,提示division by zero

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 详细断言异常</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span>

    <span style="color:#b18eb1"><em># 断言异常类型 type</em></span>
    <span style="color:#f92672">assert</span> excinfo.<span style="color:#e6c07b">type</span> == ZeroDivisionError
    <span style="color:#b18eb1"><em># 断言异常 value 值</em></span>
    <span style="color:#f92672">assert</span> <span style="color:#98c379">"division by zero"</span> <span style="color:#f92672">in</span> <span style="color:#e6c07b">str</span>(excinfo.value)</span></span>

​ 注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需转str类型。

扩展

正则断言

​ 可以将match关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配

​ 注意:这种方法只能断言value,不能断言type

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 自定义消息</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError, match=<span style="color:#98c379">".*zero.*"</span>) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 该match方法的regexp参数 re.search函数匹配,因此在上面的示例中match='zero'也可以使用

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 自定义消息</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError, match=<span style="color:#98c379">"zero"</span>) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 运行结果:

检查断言装饰器

​ 当代码抛出异常时,如果和raises指定的异常类相匹配,就不会断言失败。

​ 它相当于一个检查异常装饰器,目的是检查是否有异常(不确定是否有异常),不同使用场景:

  • with pytest.raise(ZeroDivisionError)对于故意测试异常代码的情况,使用可能会更好
  • @pytest.mark.xfail(raises=ZeroDivisionError)对于检查未修复的错误(即可能会发生异常),使用检查断言可能会更好
python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 断言装饰器</em></span>
<span style="color:#61aeee">@pytest.mark.xfail(raises=ZeroDivisionError)</span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_f</span>():</span>
    <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 执行结果:

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

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

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

相关文章

Vue打包后,页面样式出现混乱,刷新即可恢复正常

错误效果 本地上的样式完全正常&#xff0c;打包后的页面第一次进入出现样式错误的现象&#xff0c;刷新一次就恢复正常了 正确效果 找到问题 异常情况是右上方我圈出来的部分&#xff0c; .spContent .conTitle{} 是这个Live Video的样式类&#xff0c; 但是页面中也使用了…

Vue之状态管理的简单使用(事件总线(Event Bus),Vuex和若依前端示例)

文章目录 Vue之状态管理的简单使用&#xff08;事件总线&#xff08;Event Bus&#xff09;&#xff0c;Vuex和若依前端示例&#xff09;Vue之事件总线&#xff08;Event Bus&#xff09;的简单使用Vuex进行状态管理的简单使用若依前端代码store状态管理&#xff1a; Vue之状态…

机械师K7 87键盘拆解螺丝位置

拆键盘不需要拔掉所有键盘帽,只需要拔掉螺丝位置所在的两侧键帽就可以. 红色①-⑮是螺丝所在位置,一般在两个键帽中间下面位置就是螺丝. 拆开以后电池仓尺寸:4CM*9CM , 适合的电池型号:504080型 50:电池厚度50mm 40:电池宽度40mm 80:电池长度80mm 插头是:1.25红黑头 TB都可以买…

VR全景技术如何运用在文旅展示,VR全景技术对景区有哪些好处

引言&#xff1a; 随着科技的不断进步和社会的不断发展&#xff0c;VR全景技术越来越受到人们的关注。在文化旅游行业中&#xff0c;VR全景技术的应用为景区提供了全新的展示方式和体验内容&#xff0c;极大地丰富了游客的文化旅游体验。那么VR全景技术能给文旅展示带来哪些好…

Windows 10 系统重装太简单了,U盘、PE已经成为历史

虽时至今日&#xff0c;Windows 系统的越来越现代化&#xff0c;连安装方式越简单很多。使用微软官方的安装程序&#xff0c;几乎可以像安装软件一样安装系统。本文将推荐几种小淙比较喜欢的 Windows 10 系统重装方式&#xff0c;大家可以按照教程说明操作。 注意&#xff1a;…

Hive中left join 中的where 和 on的区别

目录 一、知识点 二、测试验证 三、引申 一、知识点 left join中关于where和on条件的知识点&#xff1a; 多表left join 是会生成一张临时表。on后面&#xff1a; 一般是对left join 的右表进行条件过滤&#xff0c;会返回左表中的所有行&#xff0c;而右表中没有匹配上的数…

Unity中开发程序打包发布

添加ESC脚本 使用Unity打包发布的过程中&#xff0c;考虑到打开的程序会处于全屏界面&#xff0c;而此时我们又会有退出全屏的需求&#xff0c;因此需要添加ESC脚本&#xff0c;当我们单击ESC脚本的过程中&#xff0c;退出全屏模式。 在Assets/Scenes下&#xff0c;创建esc.cs…

正弦波拟合

正弦波拟合是一种常见的数学方法&#xff0c;用于确定最佳匹配给定数据集的正弦波形。这可以用于各种应用&#xff0c;如信号处理、周期性数据分析等。以下举例展示如何进行正弦波拟合。 步骤与方法 收集数据&#xff1a;首先&#xff0c;你需要收集或生成一组数据&#xff0…

陪诊小程序系统专业开发:从需求分析到用户体验

随着社会老龄化程度的加深&#xff0c;以及人们对医疗服务需求的增加&#xff0c;陪诊服务逐渐成为一种重要的社会服务。为了满足这种需求&#xff0c;陪诊小程序系统应运而生。本文将探讨陪诊小程序系统的专业开发&#xff0c;包括需求分析、系统设计、技术实现和用户体验等方…

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例&#xff1a;比特币的可扩展性挑战8.1.3 拓展案例 1&#xff1a;以太坊的可扩展性改进8.1.4 拓展案例 2&#xff1a;侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例&#xff1a;比特币交易的安全性8.…

若依框架快速入门

首先看若依文档 一般情况下&#xff0c; ruoyi-system是储存后台代码的&#xff0c; ruoyi-ui是储存前端代码的 1.拉取代码 2.若依的结构 3.运行SQL脚本 sql文件夹中是有两个sql脚本的&#xff0c;这两个脚本都是若依开源项目的必须脚本&#xff0c;需要运行在你自己 的数…

Django中的模板

目录 一:基本概念 二&#xff1a;模板继承 在Django中&#xff0c;模板是用于呈现动态内容的HTML文件。它们允许你将动态数据与静态模板结合起来&#xff0c;生成最终的HTML页面。 Django模板使用特定的语法和标签来插入动态内容。你可以在模板中使用变量、过滤器和标签来控…

XVC768AE102 3BHB007211R0102

XVC768AE102 3BHB007211R0102 XVC768AE102 3BHB007211R0102 基于CAN总线接口和模块控制器实现组合机床电控通信系统的设计 "... 并联组合机床电控的数据采集模块和CAN总线组成。 本文研究的 ... 。 监控主机通过CAN总线从各模块获取现场控制数据&#xff0c;监控整个系…

头戴式耳机什么牌子性价比高?公认高性价比的头戴式耳机推荐

头戴式耳机作为现代音乐与声音体验的必备品&#xff0c;一直以来都备受消费者的关注&#xff0c;那么&#xff0c;在众多的品牌中&#xff0c;哪些头戴式耳机的性价比最高呢&#xff1f;本文将为你揭晓这个秘密&#xff0c;推荐一些公认的高性价比头戴式耳机&#xff0c;让你在…

C/C++实现无序入参的命令解析工具

C/C实现无序入参的命令解析工具 1 实现思路2 主要功能3 效果展示3.1 直接运行代码图3.2help命令执行效果图3.3命令行执行命令解析效果图 4 代码实现5 代码下载 1 实现思路 基本介绍&#xff1a; 思路来源于atlas,atc(模型转换工具)&#xff0c;该工具对命令支持众多&#xff0…

Unity 导入图片时,如何自动设置格式

AssetPostprocessor是Unity中的一个强大工具&#xff0c;它允许您控制在导入资源时发生的事情。它主要被用来处理在导入或重新导入资源时自定义编程操作的需求。 AssetPostprocessor的主要作用&#xff1a; 1. 自定义资源导入设置&#xff1a;可以自定义图片&#xff0c;模型&…

TensorFlow2实战-系列教程4:数据增强

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 猫狗识别1 数据增强 猫狗识别2------数据增强 猫狗识别3------迁移学习 对于图像数据…

微信公众号在线客服源码系统,开发组合PHP+MySQL 带完整的安装代码包以及搭建教程

移动互联网的快速发展&#xff0c;微信公众号成为了企业与用户之间的重要沟通桥梁。为了满足企业对微信公众号在线客服的需求&#xff0c;小编给大家分享一款基于PHP和MySQL的微信公众号在线客服源码系统。这套系统能够帮助企业快速搭建自己的微信公众号在线客服平台&#xff0…

构建中国人自己的私人GPT—支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

AVR 328pb定时器0基本介绍和使用

AVR 328pb定时器0基本介绍和使用 &#x1f4cc;参考ATmega328PB文档.&#x1f4cd;结合参考同架构lgt8f328p中文文档&#xff1a;http://www.prodesign.com.cn/wp-content/uploads/2023/03/LGT8FX8P_databook_v1.0.4.pdf &#x1f4d7;定时器0基本功能描述 两个独立的输出比较…