『德不孤』Pytest框架 — 7、Pytest预期失败
Pytest预期失败需要使用@pytest.mark.xfail()
标记。
1、@pytest.mark.xfail()标记的作用
期望测试用例是失败的,但是会运行此测试用例,并且也不会影响其他测试用例的的执行。(即xfail
标记并不会影响用例的运行)
如果预期失败的测试用例执行失败的则结果是xfail
(不会额外显示出错误信息)
如果测试用例执行成功的则结果是xpass
。
在报告中会将这些用例列在“预期失败XFAIL
或意外传递XPASS
部分。
2、应用场景
- 你期望测试由于某种原因失败。
如:用例功能不完善,或者用例执行一直失败。 - 对尚未实现的功能进行测试时。
- 尚未修复的错误进行测试时。
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,执行此测试用例。strict
:strict
默认为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预期失败的更多相关文章
- 『德不孤』Pytest框架 — 1、Pytest测试框架介绍
目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...
- 『德不孤』Pytest框架 — 2、Pytest的基本使用
目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...
- 『德不孤』Pytest框架 — 3、Pytest的基础说明
目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...
- 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数
目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...
- 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)
目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- 『德不孤』Pytest框架 — 6、Mark分组执行测试用例
目录 1.Pytest中的Mark介绍 2.Mark的使用 3.Mark的注册和使用 4.使用Mark完成失败重试 5.扩展 1.Pytest中的Mark介绍 Mark主要用于在测试用例/测试类中给用 ...
- 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)
目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...
随机推荐
- RHCSA 第三天
1.将echo "This is my first time to use pipe"内容输出到屏幕上,且保存到pipe_data.txt中 2. 重定向: a.新建一个文件red ...
- SaltStack 的基本概念与工作原理 架构设计
随着云计算技术的快速普及与发展,越来越多的企业开始学习和搭建自己的云平台代替传统的 IT 交付模式,企业的 IT 环境也随之越来越复杂,常规的运维方法与技术已经无法满足现在云环境中系统的配置与变更.基 ...
- zabbix安装 报错 socket '/var/lib/mysql/mysql.sock' (13)]
安装界面提示: Error connecting to database: Can't connect to local MySQL server through socket '/var/lib/m ...
- (4)puppet常用的资源及其常用属性
1.user资源就是用来管理目标服务器上的用户的,比如创建用户.修改用户.删除用户,user资源的常用属性如下 user{'test': ensure => present, uid => ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- ApacheCN C# 译文集 20211124 更新
C# 代码整洁指南 零.前言 一.C# 代码标准和原则 二.代码审查--过程和重要性 三.类.对象和数据结构 四.编写整洁的函数 五.异常处理 六.单元测试 七.端到端系统测试 八.线程和并发 九.设 ...
- python编写购物车
上次的学习又没有坚持下来,工作忙的不可开交,但我反思了一下还是自己没有下定决心好好学习,所以这次为期3个月的学习计划开始了,下面是这次学习后重新编写的购物车初版代码. 1 # 功能要求: 2 # 要求 ...
- Spring service本类中方法互相调用事物失效问题
简介 Spring事物利用的是AOP,动态代理采用CGLIB代理(默认,也可以用Proxy代理,但是Proxy代理效率低于CGLIB代理).故只要弄懂Spring的AOP实现,就知道为什么servic ...
- jsp include html 乱码问题
感谢大佬:https://blog.csdn.net/sessionsong/article/details/38778853 在使用<%@ include page=""% ...
- Java中静态变量与非静态变量的区别
感谢大佬:https://www.cnblogs.com/liuhuijie/p/9175167.html ①java类的成员变量有俩种: 一种是被static关键字修饰的变量,叫类变量或者静态变量 ...