六、Pytest自动化测试框架 — Pytest预期失败

2023-11-13

###文章内容有配套的 学习视频和笔记都放在了文章末尾###

Pytest预期失败需要使用@pytest.mark.xfail()标记。

1、@pytest.mark.xfail()标记的作用:

期望测试用例是失败的,但是会运行此测试用例,并且也不会影响其他测试用例的的执行。(即xfail标记并不会影响用例的运行)
如果预期失败的测试用例执行失败的则结果是xfail(不会额外显示出错误信息)
如果测试用例执行成功的则结果是xpass
在报告中会将这些用例列在“预期失败XFAIL或意外传递XPASS部分。

2、应用场景:

  1. 你期望测试由于某种原因失败。
    如:用例功能不完善,或者用例执行一直失败。
  2. 对尚未实现的功能进行测试时。
  3. 尚未修复的错误进行测试时。

3、语法参数说明

@pytest.mark.xfail(self,condition=None, reason=None, raises=None, run=True, strict=False)

  • condition: 如果满足条件则标记用例执行失败, 默认为True
    说明:condition表示预期结果,然后用例实际执行的结果,与预期结果对比,会出现4种测试结果状态。
    failedpassedxfailedxpassed
    提示:condition可以等于True或者False,也可以等于一个表达式,如:condition=1>2等。
  • reason:说明用例标记为预期失败的原因, 默认为None。(必填)
  • raises=None:在raises参数中指定单个异常或异常组,表明期望用例抛出这些异常。
    如果用例失败不是因为这些异常,那用例会被标记为failed
    如果测试用例失败的异常与raises参数标识的异常一致,则标记为xfailed
@pytest.mark.xfail(raises=AssertionError)
def test_03():
    assert 3 == 4

@pytest.mark.xfail(raises=ValueError)
def test_04():
    if isinstance('1234', int) is False:
        raise TypeError("传入参数非整数")

一般很少这样用,会使用pytest.raises先抛出接口异常,再断言异常信息是否符合预期。

  • run:标识是否执行此用例, 若为True则执行,若为False则用例不执行用例,直接标记该用力为XFAIL,(防止在xfail死循环。)
    默认为True,执行此测试用例。
  • strictstrict默认为False。当strict=True时,如果测试用例被标识为xpass,则把该用例标识为失败fail
    我们也可以不修改strict属性值,在全局配置文件pytest.ini中添加一行配置:xfail_strict=true即可,作用是一样的。

4、示例:

"""
1.学习目标
    了解预期失败方法
2.操作步骤
    2.1 xfail(condition,reason)
        condition:当condition条件为真,用例标记失败
        reason: 原因

3.使用xfail标识用例可能出现的情况:
    条件     用例执行结果   测试结果
    True     False          FAILED
    True     True           PASSED
    False    False          XFAIL
    False    True           XPASS

"""
# 1.导入pytest
import pytest


# 2.编写测试用例
# 预期失败,结果失败
@pytest.mark.xfail(True, reason="该功能尚未完成")
def test_case_1():
    print("预期失败,结果失败")
    pytest.xfail()
    assert False


# 预期失败,结果成功
@pytest.mark.xfail(True, reason="该功能尚未计划")
def test_case_2():
    print("预期失败,结果成功")
    assert True


# 预期成功,结果失败
@pytest.mark.xfail(False, reason="")
def test_case_3():
    print("预期成功,结果失败")
    assert False


# 预期成功,结果成功
@pytest.mark.xfail(False, reason="")
def test_case_4():
    print("预期成功,结果成功")
    assert True


if __name__ == '__main__':
    pytest.main()

"""
运行结果:
test_01.py::test_case_1 预期失败,结果失败
XFAIL
test_01.py::test_case_2 预期失败,结果成功
XPASS (该功能尚未计划)
test_01.py::test_case_3 预期成功,结果失败
FAILED
test_01.py::test_case_4 预期成功,结果成功
PASSED

============== 1 failed, 1 passed, 1 xfailed, 1 xpassed in 0.09s ==============


说明:
x(小写x)预期失败,结果失败   1 xfailed(预期失败)
X(大写X)预期失败,结果成功   1 xpassed(预期成功)
F预期成功,结果失败   1 failed
.预期成功,结果成功   1 passed
在测试执行过程中,会将xpassed状态的用例直接转成failed状态
"""

5、忽略xfail标识

执行命令:pytest --runxfail,也就是--runxfail参数可以将全部@pytest.mark.xfail()标识忽略掉。

重点:配套学习资料和视频教学

那么在这里我也精心准备了上述大纲的详细资料在下方链接如下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、Pytest自动化测试框架 — Pytest预期失败 的相关文章

  • pytest。使用堆叠参数化装饰器时定义预期结果的最佳方法?

    我有两个类似的测试用例 每个都有超过 100 行代码 这些代码为测试创建辅助对象 这些行非常相似 事实上 测试设置之间只有 2 行不同 我不想删除这些代码重复 我认为多个参数化可能会帮助我完成这项任务 使用多个参数化 我可以将设置组合起来
  • 在 pytest 测试中记录日志

    我想在测试函数中放置一些日志语句来检查一些状态变量 我有以下代码片段 import pytest os import logging logging basicConfig level logging DEBUG mylogger logg
  • 尝试使用 pytest 在 python 3.10 上执行测试时出错

    如果我尝试使用执行测试pytest使用 python 3 10 我收到以下错误 TypeError required field lineno missing from alias 谷歌说这是一个已知问题 但我找不到解决的方法 如果我用 3
  • 自定义 pytest junitxml 失败报告

    我正在尝试内省测试失败并将附加数据包含到 junit xml 测试报告中 具体来说 这是对外部产品的一套功能测试 我想将产品的日志包含到故障报告中 使用找到的方法here https stackoverflow com questions
  • 如何在 pytest 中测试类层次结构?

    我已经使用 pytest 一段时间了 并学会了喜欢参数化和固定装置 我第一次想测试一些具有分支继承结构的类 当然 我想为子类重用测试用例 假设我有以下包结构 mock pkg child py grandchild py parent py
  • 运行 py.test 时出现错误 ImportMismatchError

    当我在本地运行测试时 它工作正常 但是在创建 docker 并在容器内运行后 我收到以下错误 usr local lib python3 5 site packages pytest config py 325 in getconftest
  • 如何从视图中删除单元测试的“@oidc.login_required”?

    I use 烧瓶样机 questions tagged flask oidc用于用户登录和pytest questions tagged pytest供测试用 对于单元测试 我想 删除 oidc require login 我怎样才能做到这
  • Pytest - 如何将参数传递给 setup_class?

    我有一些代码 如下所示 我得到了too few args当我运行它时出错 我没有打电话setup class明确地 所以不确定如何向它传递任何参数 我尝试用以下方法装饰该方法 classmethod 但仍然看到相同的错误 我看到的错误是这样
  • Django Channels Postgres InterfaceError:连接已关闭

    我似乎无法理解这里的问题 我正在为我的渠道消费者编写测试文档中的描述 https channels readthedocs io en latest topics testing html 我通常会使用 Django 默认的单元测试 但由于
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Pytest报告摘要显示错误信息

    我对 pytest 挂钩和插件相对较新 我无法弄清楚如何让我的 pytest 代码为我提供测试执行摘要以及失败原因 考虑代码 class Foo def init self val self val val def test compare
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 从 PYCHARM 运行时使 PYTEST 更安静

    更新 下面显示的消息不受 pytest 各种 q 安静选项控制 它们来自 TeamCity 插件 请参阅下面我的回答 原文 我已经阅读了用于沉默 pytest 的现有堆栈溢出答案 但没有人告诉我如何沉默我收到的大量冗余 测试通过 消息 我有
  • 如何在自动模式下获取 pytest 夹具返回值?

    我是新来学习 pytest 的 在下面的示例代码中 我怎样才能得到A 对象在test one夹具处于状态时的功能autouse mode import pytest import time class A def init self sel
  • 为什么最简单的 requests_mock 示例在 pytest 中失败?

    我有一个特殊的问题requests mock 我想用它pytest测试我的 API 包装器库 我尝试过使用requests mock 文档中的第一个示例 http requests mock readthedocs io en latest
  • 使用 Pytest 捕获 SystemExit 消息

    我正在使用 pytest 编写测试 我遇到了一些函数抛出异常的情况SystemExit如果输入错误 终端上会显示一些错误消息 我想为以下情况编写测试SystemExit抛出并验证输出错误消息中是否有特定字符串 这是代码 def test v
  • pytest动态生成测试方法

    您好 我如何为列表或文件数量动态生成测试方法 假设我有 file1 file2 和 filen 其输入值为 json 现在我需要对多个值运行相同的测试 如下所示 class Test File unittest TestCase def t
  • 在 PyCharm 中禁用 Pytest

    如果我有一个以 test 开头的文件 PyCharm 会尝试使用 PyTest 运行该文件 我想正常运行它 作为常规 Python 脚本 我怎样才能做到这一点 Edit请参阅下面 Milo 的回答 如果由于某种原因这对您不起作用 正如 A
  • Python 3.10 中有 setUpClass 的异步等效项吗?

    我一直在使用unittest IsolatedAsyncioTestCase测试我的异步方法 我一直在利用setUpClass asyncSetUp创建夹具和asyncTearDown进行清理 到目前为止一切进展顺利 但现在我有一个新的要求
  • Django:在单独的线程中使用相同的测试数据库

    我正在使用具有以下数据库设置的测试数据库运行 pytests DATABASES default ENGINE django db backends postgresql psycopg2 NAME postgres USER someth

随机推荐

  • js实现图片预加载

    什么是预加载 当页面打开图片提前加载 而且缓存在用户本地 需要用届时直接进行烘托 在浏览图片较多的网页 百度图库 淘宝京东等 能够有更好的用户体会 一张图片的预加载 var img new Image img addEventListene
  • pandas 导入excel_小白学 Python 数据分析(7):Pandas (六)数据导入

    人生苦短 我用 Python 前文传送门 小白学 Python 数据分析 1 数据分析基础 小白学 Python 数据分析 2 Pandas 一 概述 小白学 Python 数据分析 3 Pandas 二 数据结构 Series 小白学 P
  • echarts 生成的canvas只有100px的问题

    在开发中遇到一个问题 使用echarts的时候 生成的canvas宽度不是实际写入的宽度 后面发现 因为使用了el tabs 存在echarts的tab页在刚开始处于display none 所以echarts拿不到页面的宽度 解决办法 在
  • Burp suite ——爆破账户密码(含爆破token防爆破)

    此文章仅供交流学习使用 目录 爆破普通账户密码 设置环境 处理burp suite的抓包数据 开始爆破 爆破token防爆破账户密码 设置环境 处理抓包数据 开始爆破 爆破普通账户密码 设置环境 1 打开火狐访问此网站 更改代理 火狐浏览器
  • 【RocketMQ】消息重试、重试次数设置、死信队列

    文章目录 1 死信队列 1 1 死信特性 1 2 查看死信消息 2 重试次数参数 2 1 Producer端重试 2 2 Consumer端重试 3 1 异常重试 3 2 超时重试 参考 1 死信队列 上一篇 RocketMQ 消息重试中我
  • OpenCL并行编程基础 第六章 OpenCL事件和队列

    任务队列允许程序员通过编辑直接创建 管理和调度任务 队列中的命令按提交命令的顺序执行 队列中的吓一跳命令必须等待当前命令执行完后才能开始执行 不同命令队列的先后执行顺序得不到保证 6 1 命令 命令队列和事件 命令队列保证FIFO 启动顺序
  • The selected directory is not a valid home for Go SDK

    在GoLand中配置GOROOT的时候 出现该错误 The selected directory is not a valid home for Go SDK Go的版本是1 4 2 GoLand 版本是2021 1 3 可能是版本问题 更
  • 自媒体如何使用ChatGPT提高效率

    文章目录 自媒体公司如何充分利用ChatGPT提高效率 自媒体公司使用ChatGPT提高效率的具体案例 训练ChatGPT 让它更懂你 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地
  • agg函数加入进度条

    在panda之中 我们经常需要使用到agg函数来将pandas之中的某几列聚合起来 from tqdm import tqdm import pandas as pd import numpy as np df pd DataFrame A
  • 【软件构造】黑盒测试与白盒测试

    文章目录 前言 一 黑盒测试 1 什么是黑盒测试 2 常见的黑盒测试技术 3 等价类划分 a 主要思想 b 有效等价类与无效等价类 c 例子 3 边界值分析 主要思想 4 错误推测法 a 定义 b 主要思想 c 常见的方法 5 因果图 二
  • FPGA和IC设计怎么选?哪个发展更好?

    很多人纠结FPGA和IC设计怎么选 其实往小了说 要看你选择的具体是哪个方向岗位 往大了说 将来你要是走更远 要成为大佬 那基本各个方向的都要有涉及的 不同方向就有不同的发展 目前在薪资上IC设计要比FPGA要高一点 但每个行业都有大佬 薪
  • TCP/IP详解 卷1:协议 学习笔记 第二十五章 SNMP:简单网络管理协议

    随着网络技术的发展 网络数量越来越多 网络中的设备来自不同厂家 如何管理这些设备变得十分重要 基于TCP IP的网络管理包含两个部分 网络管理站 也叫管理进程 manager 和被管理的网络单元 也叫被管设备 包括路由器 X终端 终端服务器
  • USB 供电问题

    原先开发的外接USB设备 每次都要先上电再插到PC上能正常显示 如果设备事先没有上电再插到电脑上然后再给设备上电 PC是无法识别这个USB设备的 之前公司的人一直认为是我固件的问题 最近开发了内置USB设备 结果同样的问题出现了 我索性看了
  • 用于缺陷检测的高分辨率图像的切片处理——工作总结

    目录 参考 背景 原理 切片 标签映射 代码 结果 切片检测结果映射回原图 LabelImg的使用 安装 运行 标注 总结 参考 1 https blog csdn net zengwubbb article details 1158004
  • JS 利用 Set 对数组中对象进行去重

    JS中怎么对一个数组进行去重 相信很多人对这个问题都已经很熟悉了 最简便的方法就是使用 Set let arr 1 2 3 3 4 5 5 console log new Set arr 1 2 3 4 5 那么如何对数组中的对象进行去重呢
  • 刷脸创新技术赋予传统零售智慧发展能力

    其中技术进步起到颠覆性的作用 传统零售商积极拥抱科技进行数字化转型升级 大数据人工智能 人脸识别数据中台等创新技术进入了应用爆发期 与零售产业深度融合 加速零售在经营管理销售 服务等方面优化升级 创新技术赋予了传统零售业智慧发展的能力 在新
  • HTML的段落中怎么样显示出标签要使用的尖括号<>?

    很简单 符号 lt 用 lt 替代 符号 gt 用 gt 替代 示例代码如下 h4 HTML中怎样打出尖括号 h4 p 左尖括号 lt p p 右尖括号 gt p p p 运行效果如下
  • DVWA-xss全等级教程

    low等级 反射型 reflected 在输入框随便输入一串字符 跟踪字符发现其出现在 pre 标签中 于是可以通过自建标签方式进行弹框 这里输入来实现弹框 当然还能输入 img src xx 也可以通过输入 pre
  • Pycharm + anaconda 安装第三方库总是提醒安装失败或者安装包后import失败

    原因 1 pycharm 新建项目后 随项目建立的虚拟环境没有被激活 2 如果用pip安装 有可能是pip没有更形 3 用anaconda安装 有可能是anaconda没有更新 4 第三方库的所在位置不是pycharm项目对应虚拟环境的未知
  • 六、Pytest自动化测试框架 — Pytest预期失败

    文章内容有配套的 学习视频和笔记都放在了文章末尾 Pytest预期失败需要使用 pytest mark xfail 标记 1 pytest mark xfail 标记的作用 期望测试用例是失败的 但是会运行此测试用例 并且也不会影响其他测试