pytest skip,
前言在自动化测试的过程中,我们经常会遇到一系列的外部因素,比如功能阻塞、功能未实现、环境等等,有些用例无法执行。这时,我们可以使用skip用例。如果我们注释掉或删除它们,我们将不得不在以后恢复它们。
pytest.mark.skip decorator可以标记在某些平台上无法运行的测试函数,或者希望失败的测试函数,这样就可以跳过。
skip表示您希望测试只在满足某些条件时才通过,否则pytest应该跳过它,运行其他测试。常见的例子是在非Windows平台上跳过仅Windows测试,或者跳过测试依赖于当前不可用的外部资源(比如数据库)。
xfail表示你希望测试因为某种原因失败。一个常见的例子是函数的测试没有被实现,或者没有被修复。当测试通过时,虽然预计会失败(标记为pytest.mark.xfail),但它是一个xpass,将在测试摘要中报告。
pytest分别统计并列出skip和xfail测试。默认情况下,不显示关于跳过/xfailed测试的详细信息,以避免混淆输出。您可以使用-r选项来查看与测试进度中显示的简短字母相对应的详细信息。
有关-r选项的更多详细信息,请运行pytest -h h。
成功的skip被识别为S====================2 skip ed in 0.04S====================
总的来说:skip和skipif允许您跳过不想运行的测试。
Skip跳过测试函数最简单的方法是用skip decorator pytest.mark.skip来标记它,它可以传递一个跳过用例的可选原因。形式参数是原因。
代码示例:
@pytest.mark.skip(reason=目前无法测试这个)
def test_the_unknown()。
.您也可以在测试方法执行期间跳过pytest.skip(reason=reason)函数。【一般与测试方法中的if分支方法一起使用,表示测试用例执行过程中满足一定条件要跳过。(与跳过标记不同,标记更像一个品牌,标记后可以直接跳过)】
例:【注意】此时的pytest.skip(reason=reason)不再是decorator,而是一个函数;另外,需要注意的是pytest.skip(reason=reason)的位置对于测试用例的执行至关重要。如果它只被放在一个测试用例中,那么只有这一个测试用例会被跳过。
def测试函数():
如果不是valid_config():
Pytest.skip(不支持的配置)还可以使用pytest.skip(reason=reason,allow_module_level=True)跳过整个模块级别:
导入pytest
如果不是pytest . config . get option(-custom-flag ):
Py.skip (-custom-flag丢失,跳过测试,allow _ module _ level=true)当在测试用例收集时间内无法实现跳过条件时(测试用例尚未执行时),命令式方法很有用。【当测试用例在用例收集过程中由于某种原因不能被跳过时,使用命令式方法更方便。而是使用decorator无法满足测试用例跳过的要求]
Skipif如果想有条件地跳过某个东西,可以用pytest.mark.skipif decorator代替。
示例:在Python3.6之前的解释器上运行测试示例时,标记要跳过的函数。
导入系统
@ pytest . mark . skip if(sys . version _ info(3,6),reason=需要python3.6或更高版本)
def测试函数():
.如果在收集期间条件评估为真,测试函数将被跳过。跳过的具体原因是,运行测试用例时,命令行参数-rs出现在测试结果的控制台中。
在模块之间共享skipif标签。
案例:
# test _ my module . py的内容
导入我的模块
min version=pytest . mark . skip if(my module。__versioninfo__ (1,1),reason=至少需要mymodule-1.1 )
@minversion
def测试函数():
.然后导入上述案例的标记,并在另一个测试模块中重用它:
# test _ myothermodule.py
从test_mymodule导入最小版本
@minversion
def test_anotherfunction():
.对于较大的测试套件,通常最好有专门的模块来定义标签,然后在测试用例模块中导入引用【这样做的好处:方便管理和查看测试用例的标签】;这种方法始终适用于整个测试套件。
跳过课程或模块在课程上使用skipif标签。
示例:如果pytest.mark.skipif decorator的skip条件为真,该标记将为该类的每个测试方法生成skip结果。
@ pytest . mark . skip if(sys . platform== win32 ,reason=不在windows上运行)
类TestPosixCalls(对象):
定义测试_功能(自身):
将不会在“win32”平台下安装或运行[注意]:强烈建议不要在使用继承的类上使用skipif标记。py中的已知错误标记可能会导致超类中的意外行为。
如果想跳过一个测试模块的所有测试方法,可以在全局级别使用pytestmark name。
示例:
#测试模块. py
Testmark=pytest.mark.skipif(.)跳过文件或目录有时可能需要跳过整个文件或目录:例如,如果测试依赖于Python特定的版本特性或者包含您不希望pytest运行的代码。
提示这是一个在不同情况下如何跳过模块测试的快速指南。
1.无条件跳过模块中的所有测试:
Testmark=pytest.mark.skip(所有测试仍在WIP) 2。根据某些条件跳过模块中的所有测试。
testmark=py test . mark . skip if(sys . platform== Win32 , tests for Linux only 3。如果缺少一些导入,跳过模块中的所有测试。
PE expect=pytest . importorskip( PE expect )
-
跳过测试类@pytest.mark.skip()的标签:将跳过标记类中的所有方法测试用例。
代码示例:
导入pytest
@pyTest.mark.skip(reason=跳过测试类将跳过该类中的所有方法)
类测试(对象):
定义测试_一(自我):
断言1==1
def test_two(自我):
打印(“测试_02”)
断言1==2
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
@pytest.mark.skipif()标签:当条件为真时跳过标记的类,否则不跳过。
代码示例:
导入pytest
@ pyTest.mark.skipif (1==1,reason=跳过测试类将跳过该类中的所有方法)
类测试(对象):
定义测试_一(自我):
断言1==1
def test_two(自我):
打印(“测试_02”)
断言1==2
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
跳过方法或测试用例如果您想要某个方法或跳过某个用例,您可以向该方法添加以下三个修饰:
@pytest.mark.skip():跳过方法或用例,不注明原因。
代码示例:
导入pytest
类测试(对象):
@pytest.mark.skip()
定义测试_一(自我):
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
@ pytest . mark . Skip(reason= Skip a method or a test case ):跳过方法或用例,并记下原因。
示例代码:
导入pytest
类测试(对象):
@pytest.mark.skip(reason=跳过一个方法或测试用例)
定义测试_一(自我):
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
@ pytest.mark.skipif (1==1,reason=跳过一个方法或一个测试用例):当条件满足时,跳过该方法或用例,并记下原因。
代码示例:
导入pytest
类测试(对象):
@ pytest.mark.skipif (1==1,reason=跳过一个方法或测试用例)
定义测试_一(自我):
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
当有多个跳过时,如果满足一个条件,则跳过分别向类和方法添加跳过。如果在类中满足条件,而在方法中不满足条件,则类中的跳过将生效。
代码示例:
导入pytest
@ pytest.mark.skipif (1==1,reason=有多个条件时,满足一个条件则跳过(class )
类测试(对象):
@ pytest.mark.skipif (1==2,reason=有多个条件时,满足一个条件时跳过(method )
定义测试_一(自我):
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
Skip被赋给一个变量,通过使用decorator函数的语法格式,可以在很多地方调用这个变量。无论是@pytest.mark.skip()标签还是@pytest.mark.skipif()标签,如果要在多个测试方法上进行修饰,依次编写比较麻烦,可以选择定义一个变量使其等于标签,然后在修饰时用这个变量替换标签。
在这种方法中,还可以通过在其他模块中导入变量,与其他模块共享标签;
赋值:myskip=pytest.mark.skipif (1==1,reason= Skip被赋给一个变量,可以在很多地方调用)
打电话:@myskip
代码示例1:
导入pytest
My skip=pytest.mark.skipif (1==1,reason= Skip被赋给一个变量,可以在很多地方调用)
类测试(对象):
@myskip
定义测试_一(自我):
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果1:
代码示例2:
# test_skipif.py
导入平台
导入pytest
def is_windows():
if platform.system()。=Linux :
返回True
elif platform.system()==Linux :
返回False
only _ windows=pytest . mark . skip if(is _ windows(),reason=当不是Linux系统时,跳过所有用例)
类TestMyCode:
@ pytest . mark . skip if(platform . system()!=Linux ,reason=当不是Linux系统时,跳过用例)
def test_skipif_001(自身):
表达式
assert platform.system()== Windows ,platform . system()
@only_windows
def test_skipif_002(self):
装饰器封装
assert platform . system()== Linux
if __name__==__main__ :
Test.main ([_ _ file _ _,-vs])运行结果2:
pytest.Skip()方法内的skip除了使用标签,还可以在测试用例中调用pytest.skip()方法实现skip。您可以选择传入的msg参数来解释跳过的原因。
如果要判断是否跳过,可以写在if判断语句中。
导入pytest
类测试(对象):
定义测试_一(自我):
Py.skip (msg= skip )
断言1==2
def test_two(自我):
打印(“测试_02”)
断言1==1
if __name__==__main__ :
Test.main ([-RS , TEST01.py])运行结果:
期待陌生,拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。