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种测试结果状态。

    failed, passed, xfailed, xpassed

    提示: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()标识忽略掉。

『德不孤』Pytest框架 — 7、Pytest预期失败的更多相关文章

  1. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  2. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

  3. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  4. 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数

    目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...

  5. 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)

    目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...

  6. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

  7. 『德不孤』Pytest框架 — 15、Pytest参数化

    目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...

  8. 『德不孤』Pytest框架 — 6、Mark分组执行测试用例

    目录 1.Pytest中的Mark介绍 2.Mark的使用 3.Mark的注册和使用 4.使用Mark完成失败重试 5.扩展 1.Pytest中的Mark介绍 Mark主要用于在测试用例/测试类中给用 ...

  9. 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)

    目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...

随机推荐

  1. C# 实现Parallel.For

    static class MyParallel { //4.0及以上用Task, Task的背后的实现也是使用了线程池线程 //static List<Task> tasks = new ...

  2. 【记录一个问题】android下opencl中的event.getProfilingInfo()测速时间并不准确

    使用了类似的代码来做android下opencl的时间测试: cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE ...

  3. Vue框架怎么使用mediainfo.js来检测视频文件是否有音轨?

    啥是MediaInfo? 简而言之,MediaInfo是一个能读取音频和视频文件并分析和输出音视频信息的工具,能输出的内容包括视频信息,音轨,字幕等. MediaInfo也可以在web端使用,需要使用 ...

  4. [源码分析] Facebook如何训练超大模型---(4)

    [源码分析] Facebook如何训练超大模型 --- (4) 目录 [源码分析] Facebook如何训练超大模型 --- (4) 0x00 摘要 0x01 背景知识 1.1 单精度.双精度和半精度 ...

  5. Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization

    目录 Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization 1.Abstract 2.Intr ...

  6. 计算机网络-5-9-TCP拥塞控制

    TCP拥塞控制 拥塞控制的一般原理 在计算机网络中的链路容量(带宽),交换节点中的缓存和处理机等,都是网络的资源,在某段时间,若对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就会变坏,这 ...

  7. C++/WinUI 3 技术笔记(一)

    微软在 Windows 10 Version 1809 上正式发布了新的 UI 框架,命名为 WinUI 3. 这已经是微软发布的第不知道多少个 UI 框架了,但是微软宣称它将支持原生 C++ 和 W ...

  8. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  9. Java中md5摘要算法的几种方法

    public class MD5_Test { public static String md5_1(String oldStr) { char hexDigits[] = { '0', '1', ' ...

  10. Linux运维-常用操作-培训用例

    一.服务器环境 Centos 7.9 二.常用连接工具(免费) 1.Finalshell 2.MobaXterm 3.Putty + WinSCP 三.Linux  系统目录结构 /bin :是 Bi ...