【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_loginassert 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自动化测试/测试开发,走向高薪之路

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

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

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

相关文章

【AI视野·今日Robot 机器人论文速览 第七十六期】Fri, 12 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Fri, 12 Jan 2024 Totally 12 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Topology-Driven Parallel Trajectory Optimization in Dynamic Environments Authors Oscar de Groot, Laura Ferranti, Dari…

WPOpenSocial实现WordPress的QQ登录

个人建站不可避免的需要自己搭建用户数据库的问题&#xff0c;可用户却往往因为注册繁琐而放弃浏览您的网站&#xff0c;由此可见&#xff0c;一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件&#xff0c;可以提升用户互动&#xff0c;增加社交分享&#xff0…

分布式场景怎么Join

背景 最近在阅读查询优化器的论文&#xff0c;发现System R中对于Join操作的定义一般分为了两种&#xff0c;即嵌套循环、排序-合并联接。 考虑到我的领域是在处理分库分表或者其他的分区模式&#xff0c;这让我开始不由得联想我们怎么在分布式场景应用这个Join逻辑&#xff…

《Linux C编程实战》笔记:管道

从这节开始涉及进程间的通信&#xff0c;本节是管道。 管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性&#xff0c;管道又称之为半双工管道。。管道的这一特点决定了其使用的局限性。 数据只能由一个进程流向另一个进程&#xff1b;如果要进行全双工通信…

计算机组成原理学习| Day1

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 计算机组成原理 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)o .&#x…

分享4款不能错过的修改照片尺寸的软件!

在当今这个数字化时代&#xff0c;照片已经成为我们分享生活、表达观点的重要方式。但是&#xff0c;你是否曾遇到过这样的问题&#xff1a;一张精美的照片因为尺寸不合适而无法在朋友圈中展现出最佳效果&#xff1f;不用担心&#xff0c;今天我们就来聊聊那些可以帮助你轻松修…

获取鼠标点击图片时候的坐标,以及利用html 中的useMap 和area 实现图片固定位置的点击事件

一 编写原因 应项目要求&#xff0c;需要对图片的固定几个位置分别做一个点击事件&#xff0c;响应不同的操作&#xff0c;如下图&#xff0c;需要点击红色区域&#xff0c;弹出不同的提示框&#xff1a; 二 获取点击图片时候的坐标 1. 说明 实现这以上功能的前提是需要确定需…

JVM-类的生命周期

类的生命周期概述 类的生命周期描述了一个类加载、使用、卸载的整个过程。整体可以分为&#xff1a; 加载 连接&#xff0c;其中又分为验证、准备、解析三个子阶段 初始化 使用 卸载 加载阶段 加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方…

【JavaScript】fetch

fetch Response Headers ajax&axios&fetch的关系: ajax&#xff1a;ajax 是一种基于原生 JavaScript 的异步请求技术。它使用 XMLHttpRequest 对象来发送请求和接收响应。 axios&#xff1a;axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以在浏览器和 Node…

STM32——中断系统和外部中断EXTI

一、中断 1.1中断系统 中断系统是管理和执行中断的逻辑结构&#xff1b; 1.2中断 系统在执行主程序过程中&#xff0c;出现了特定的触发条件&#xff08;触发源&#xff09;&#xff0c;系统停止执行当前程序&#xff0c;转而去执行中断程序&#xff0c;执行完毕后&#xf…

什么是原型链?如何继承?

原型&#xff1a; 每个对象都可以有一个原型_proto_&#xff0c;这个原型还可以有它自己的原型&#xff0c;以此类推&#xff0c;形成一个原型链。查找特定属性的时候&#xff0c;我们先去这个对象里去找&#xff0c;如果没有的话就去它的原型对象里面去&#xff0c;如果还是没…

OllyDebug的使用方法. IDA Pro分析程序的控制流图,可以找到不同的函数入口点. 在汇编代码中定位特定函数可能是一个耗时且复杂的过程

实战 “OllyDbg” 是一个流行的Windows平台上的汇编级调试器&#xff0c;用于调试和分析二进制程序&#xff0c;尤其是用于逆向工程目的。使用OllyDbg的基本步骤如下&#xff1a; 安装和打开OllyDbg&#xff1a;首先&#xff0c;您需要在您的计算机上安装OllyDbg。完成安装后&…

HCIA学习作业五

拓扑图&#xff1a; PC端 PC1>ipconfig PC2>ipconfig PC3>ipconfig PC4>ipconfig PC>ping PC1>ping 192.168.1.125 PC1>ping 192.168.1.254 PC1>ping 192.168.1.253 PC2>ping 192.168.1.125 PC2>ping 192.168.1.253 PC3>ping 192.168.1.126…

java程序员怎么完善自己各个方面的能力?

java程序员怎么完善自己各个方面的能力? 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些java学习方法和资料&#xff0c;让我不断提升自己&#xff0c;感谢帮助…

Python计算机二级/Python期末考试 刷题(一)

收集了一些经典Python计算机二级和Python期末考试题库 整理不易&#xff0c;大家点赞收藏支持一下 祝大家计算机二级和期末考试都高分过 目录 一、填空 二、选择 三、程序设计 一、填空 1.序列元素的编号称为索引&#xff0c;索引值从【1】开始&#xff0c;访问序列元素时将…

vue 使用 v-viewer 用于图片浏览的Vue组件,支持旋转、缩放、翻转等操作,基于viewer.js。

作者连接 npm&#xff1a; npm install v-viewerlegacy viewerjs main.js 引入&#xff1a; // 引入Viewer插件 import VueViewer, { directive as viewerDirective } from v-viewer; // 引入Viewer插件的图片预览器的样式 import viewerjs/dist/viewer.css; // 使用Viewer图片…

Pull模式和Push模式

Pull模式是一种消息消费模式&#xff0c;其中客户端主动从服务端拉取数据。 优点&#xff1a;客户端可以根据自己的消费能力来消费数据&#xff0c;不存在消息堆积的情况。 缺点&#xff1a;消息处理可能不及时&#xff0c;可能存在大量无效请求&#xff0c;客户端需要考虑拉取…

python对图片或文件的操作

一. base64 与图片的相互转换 1. base64 转图片 import base64 from io import BytesIO from PIL import Image# base64 编码的图像数据&#xff08;示例&#xff09; base64_data "iVBn9DHASKJDjDsdSADSf8lgg"# 将 base64 编码的字符串解码为二进制数据 binary_d…

不同的强化学习模型适配与金融二级市场的功能性建议

DQN ES DDPG A2C TD3 SAC QMIX MADDPG PPO CQL IMPALA 哪个模型适合进行股票操作 在考虑使用哪种模型进行股票操作时&#xff0c;需要考虑模型的特点、适用场景以及实现复杂度等因素。以下是对您列出的几种强化学习模型的简要概述&#xff0c;以帮助您做出选择&#xff1a; DQ…

【C++】类与对象(二)特殊成员函数

前言 类与对象&#xff08;二&#xff09; 文章目录 一、特殊成员函数二、构造函数三、析构函数四、拷贝构造函数五、拷贝赋值运算符 一、特殊成员函数 如果在类的声明中未显式提供某个成员函数的定义&#xff0c;编译器会自动生成一个默认实现。 这包括默认构造函数、默认析构…