Pytest系列- assert断言详细使用(4)

news2024/11/23 9:57:37

简介

  • 在断言方面,pytest框架比其他类似的框架(比如unittest)更加简洁,易用,我想这是选择pytest作为自动化测试框架之一的原因之一。
  • pytest的assert断言关键字支持使用python内置的assert表达式。可以理解为pytest的断言就是直接使用python自带的assert关键字。
  • assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败。

Assert 常用断言

pytest 里面断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种

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

作用:判断预期结果与实际结果是否相等,同时可在抛出异常之后输出一些提示信息,执行之后就方便查看是什么原因了。

异常断言Excepiton

除了支持对代码正常运行的结果断言之外,Pytest也能够对 Exception 和 Warnning 进行断言,来断定某种条件下,一定会出现某种异常或者警告。在功能测试和集成测试中,这两类断言用的不多,这里简单介绍一下。

可以使用 with pytest.raises(异常类型) 作为上下文管理器,当抛出异常时可以获取到对应的异常实例

def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1 / 0

断言场景:断言它抛的异常是不是预期想要的
代码执行:1/0
预期结果:抛的异常是ZeroDivisionError: division by zero
如何断言:通常是断言异常的 type 和 value 值了
具体方式:这里 1/0 的异常类型是 ZeroDivisionError,异常的 value 值是 divisionby zero

import pytest

def test_zero_division():
    """断言异常"""
    with pytest.raises(ZeroDivisionError) as excinfo:
        1 / 0

    # 断言异常类型type
    assert excinfo.type == ZeroDivisionError
    # 断言异常value值
    assert "division by zero" in str(excinfo.value)

执行结果:
在这里插入图片描述
excinfo :是一个异常信息实例
主要属性: .type 、 .value 、 .traceback
注意:断言 type 的时候,异常类型是不需要加引号的,断言 value值的时候需转 str
这个测试用例,就断言了excinfo.value的内容中包含division by zero这个字符串,这在需要断言具体的异常信息时非常有用。

关于更多的Exception和Warnning的断言可以参考Pytest的官方文档:
[Exception和Warnning的断言 Pytest的官方文档]

优化断言提示信息

可在terminal输入:pytest -s 断言文件名.py

拓展一:match

可以将 match 关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配
注意:这种方法只能断言value,不能断言type

# 自定义消息
def test_zero_division_long():
    with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:
        1 / 0

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

# 自定义消息
def test_zero_division_long():
    with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:
        1 / 0

def test_zero_division_long2():
    with pytest.raises(ZeroDivisionError, match="zero") as excinfo:
        1 / 0

在这里插入图片描述

拓展二:检查断言装饰器

# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
    1 / 0

执行结果
在这里插入图片描述
知识点

  • 代码抛出异常,但是和raises指定的异常类相匹配,所以不会断言失败
  • 它相当于一个检查异常装饰器,功能:检查是否有异常,不确定是否有异常
  • with pytest.raise(ZeroDivisionError) 对于故意测试异常代码的情况,使用可能会更好
  • @pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好

参考文章地址

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

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

相关文章

合宙Air724UG LuatOS-Air lvgl7-lvgl(矢量字体)

如何用开发板实现lvgl加载外部矢量字体功能 目录名称 如何用开发板实现lvgl加载外部矢量字体功能 简介材料准备API 说明步骤 1. 将字库芯片接在模块spi上2. 版本定制3. 初始化spi4. 设置字体5.字体使用测试固件和脚本显示效果字号灰度最佳粗细值对应表常见问题 1. 设置68号字体…

Aapache Tomcat AJP __ 文件包含漏洞 __ CVE-2020-1938

Aapache Tomcat AJP __ 文件包含漏洞 __ CVE-2020-1938 漏洞描述 Ghostcat是Chaitin Tech安全研究员发现的Tomcat中的一个严重漏洞,由于Tomcat AJP协议中的缺陷,攻击者可以读取或包含Tomcat的Webapp目录中的任何文件。例如,攻击者可以读取 …

9月12日华为新品发布会

华为MATE 60 Pro作为华为Mate系列的最新力作,备受期待。这款手机在设计和功能上都带来突破,大家都认为是遥遥领先。 9月12日下午,大家期待的华为发布会,实际上是问界新M7发布会。虽然此前已有消息称,此次发布不包括手机…

4.3-内置后置PostProcess处理器深度讲解

在reader里面注册了很多Bean定义 reader会调取register()来注册配置类 调用上句,就会把配置类注册到BeanDefinitionMap中去 配置类有了、解析配置类的处理器有了 然后, 在第三步refresh() 进行IOC容器刷新中的invokeBeanPostProcessors(beanFactory…

Java密码学之加解密

前篇:Java密码学之数字签名_东皋长歌的博客-CSDN博客 日常开发中用的比较多的功能点,加解密数据,用Java实现也是很快很实用。 下面记录一下加解密数据的过程。 1,创建密钥对生成器 KeyPairGenerator keyPairGen KeyPairGener…

我的新书《Java编程动手学》

关于这本书 很高兴,我又一本书籍《Java编程动手学》上市了。记得早在2017年,在我跟人邮出版社的傅道坤编辑合作完《Tomcat内核设计剖析》这本书后,傅编就问我考不考虑写一本面向Java初学者的图书,当时我谢绝了傅编的邀请。一来是…

21.Xaml Expander控件--->可折叠的带标题的内容控件

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

day55:C++ day5,运算符重载剩余部分、静态成员、继承

#include <iostream> #include <cstring> #define pi 3.14 using namespace std;class Shape { protected:double round;double area; public://无参构造Shape():round(40),area(100){cout<<"Shape::无参构造函数&#xff0c;默认周长为40&#xff0c;面…

渐变线条拖尾特效-原理及pygame实现

文章目录 效果预览视频教程代码内容介绍总结更多宝藏 效果预览 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f371; 视频教程 https://www.bilibili.com/video/BV1vu411A7zy/ 代码 import pygame# 初…

基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据库

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.HOG特征提取 2.GRNN神经网络 3.JAFFE表情数据库 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…

解决MySQL数据库拒绝远程计算机连接问题

错误信息&#xff1a;Host is not allowed to connect to this mysql server 以前MySQL数据库部署在云服务器上&#xff0c;程序服务端也部署在云服务器上&#xff0c;连接服务器从没出现过问题。最近有一次需要做一个完全局域网的环境部署&#xff0c;我把数据库和程序服务端…

python爬虫教程:用scrapy实现模拟登录

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 背景&#xff1a; 初来乍到的pythoner&#xff0c;刚开始的时候觉得所有的网站无非就是分析HTML、json数据&#xff0c;但是忽略了很多的一个问题&#xf…

Python第一次作业练习

题目分析&#xff1a; """ 参考学校的相关规定。 对于四分制&#xff0c;百分制中的90分及以上可视为绩点中的4分&#xff0c;80 分及以上为3分&#xff0c;70 分以上为2分&#xff0c;60 分以上为1分; 五分制中的5分为四分制中的4分&#xff0c;4分为3分&#…

Win10声音无法找到输出设备怎么办

近期有小伙伴反映在使Win10的过程中无法找到声音输出设备&#xff0c;从而导致电脑的声音无法正常的播放&#xff0c;这是怎么回事呢&#xff0c;遇到这种情况应该怎么解决呢&#xff0c;下面小编就给大家详细介绍一下Win10声音无法找到输出设备的解决方法&#xff0c;大家可以…

yolov5+Repulsion损失函数,解决密集遮挡问题(附带代码可用)

文章目录 1.RepLoss 设计思想2.RepLoss 主要工作2.1 吸引项2.2 排斥项&#xff08;RepGT&#xff09;2.3 排斥项&#xff08;RepBox&#xff09;2.4 总结 3. yolov5Repulsion3.1 rep_loss.py3.2 loss.py3.3 hyp.scratch.yaml 4. 总结 1.RepLoss 设计思想 物体遮挡问题可以分为…

为何付费?免费数据可视化软件的崭露头角

当今&#xff0c;数据可视化在各个领域都扮演着重要的角色。不过&#xff0c;对于一些个人用户、小型企业或教育机构来说&#xff0c;购买昂贵的数据可视化软件可能并不切实际。好消息是&#xff0c;有一些完全免费的数据可视化工具可以帮助你创建令人印象深刻的可视化图表和图…

一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的 在Hive的DWD层和DWS层建立动态分区表后&#xff0c;发现动态插入数据时可以指定分区名&#xff0c;也可以不指定分区名。因此&#xff0c;研究一下它们的区别以及使用场景&#xff0c;从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名&#xff…

数字孪生相关政策梳理,重点对各行业版块的指导和引领

前言 数字孪生技术作为新型智慧城市建设的创新引领性技术&#xff0c;有利于打造孪生城市运行空间&#xff0c;强化城市大脑基础能力&#xff0c;实现全域时空数据融合。数字孪生技术在推动智慧城市建设方面的作用已越来越受到重视。2021年3月&#xff0c;《国家“十四五”规划…

Java binLog日志监听

监听指定的表去做一些处理逻辑&#xff0c;首先是要开启M有SQL的配置&#xff0c;然后再撸代码。 一、Windows下开启MySQL binLog日志 首先要开启MySQL的BinLog 管理 show variables like %log_bin%; 如果发现是OFF&#xff0c;打开mysql文件夹下面的my.ini&#xff0c;修改一…

Linux创建进程 及父子进程虚拟空间 多进程GDB调试

父子进程的资源是读时共享&#xff0c;写时拷贝&#xff0c;用到某一个资源&#xff0c;比如说改变变量的值的时候才去拷贝这个变量到一个独立的空间 父子进程的关系&#xff1a; 区别&#xff1a; 1.fork&#xff08;&#xff09;函数的返回值不同 父进程中&#xff1a;>…