@pytest.mark.skip装饰器,用来标记用例,并跳过执行
(注:不同于(标有pytest.mark.xfail) xfail表示期望测试因某种原因而执行失败,然后跳过。比如功能未提测,或未修复的bug)
skip跳过执行的几种方法:
1、直接在用例上标记: @pytest.mark.skip(reason="跳过执行这条case") #reason是自定义的,可任意
2、在class 类上标记: @pytest.mark.skip(reason="跳过类,跳过类下的方法")
3、需要满足条件才能跳过执行:@pytest.mark.skipif(条件1==1,reason='跳过原因')
#第3点举例:skipif(条件1==1),而当前的类下有满足此条件,那么skip跳过运行这条
import pytest,sys @pytest.mark.skipif (1==1,reason='会跳过Test类,也会跳过类中所有方法') class Test(object): def test_one(self): assert 1==1 def test_two(self): print('test_02') assert 1==2 if __name__=='__main__': pytest.main(['-rs','test01.py'])
4、满足多个skipif 条件的其中一个,就跳过执行:
(意思就是,比如在类上有一个skip,在类下面的方法有一个skip,如果满足其中一个skip条件,都直接跳过执行)
import pytest,sys @pytest.mark.skipif(1==1,reason='多个skip,有1个skip条件满足就跳过执行(这是类)') class Test(object): def test_case1(self): assert 1==1
@pytest.mark.skipif(2==2,reason='多个skip,有1个skip条件满足就跳过执行(这是方法)') def test_case2(self): print('test_02') assert 2==2 if __name__=='__main__': pytest.main(['-rs','test_demo.py'])
5、如果想在多个测试方法上使用skip()装饰器,可以定义一个变量,就可通过导入模块的方式,在其他模块内直接调用
import pytest,sys
#定义一个变量,接收装饰器的值 myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量,可多处调用')
class Test(object): @myskip def test_case1(self): assert 1==2 def test_case2(self): print('test_02') assert 1==1 if __name__=='__main__': pytest.main(['-rs','test_demo.py'])
6、pytest.skip() 指定写在方法内跳过
在用例内调用pytest.skip()方法来实现跳过,可以选择传入msg参数来说明跳过原因;
如果想要通过判断是否跳过,可以写在if判断里
import pytest,sys class Test(object): def test_case1(self): pytest.skip(msg='跳过执行这条case') #这是在方法内些的一个skip,那么在执行的时候,这个方法会被跳过执行 assert 1==2 def test_case2(self): print('test_02') assert 1==1
if __name__=='__main__': pytest.main(['-rs','test01.py'])
注:运行时
1、在文件内调试执行: if __name__ == "__main__":
pytest.main('-rs','demo.py') #使用"-rs",skip原因才会详细显示
2、命令行执行:cmd运行看不到skip原因,可使用: -rs 使用命令:pytest -rs test_demo.py