【Pytest】跳过执行之@pytest.mark.skip()详解-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、skip介绍及运用

在我们自动化测试过程中经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了这时我们就可以用到跳过skip用例如果我们注释掉或删除掉后面还要进行恢复操作。

1、skip跳过成功标识为s ============================= 2 skipped in 0.04s ==============================

2、pytest.main(['-rs','test01.py']) 用-rs执行跳过原因才会显示SKIPPED [1] test01.py:415: 跳过Test类会跳过类中所有方法

3、skip跳过无条件和原因@pytest.mark.skipif()

4、skip跳过无需满足条件true、有跳过原因@pytest.mark.skipif(reason='无条件只有跳过原因')

5、skip跳过需满足条件true、且有跳过原因@pytest.mark.skipif(条件1==1,reason='跳过原因')

6、skip赋值变量多处调用myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量可多处调用')

然后@myskip使用

二、跳过测试类

@pytest.mark.skip()和@pytest.mark.skipif()两个标签用他们装饰测试类

1、被标记的类中所有方法测试用例都会被跳过

2、被标记的类当条件为ture时会被跳过否则不跳过

#skip跳过类
 
import pytest,sys
@pytest.mark.skip(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'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [2] test01.py: 跳过Test类会跳过类中所有方法
============================= 2 skipped in 0.07s ==============================
 
Process finished with exit code 0
 
 
 
 
#skip满足条件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'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:415: 跳过Test类会跳过类中所有方法
SKIPPED [1] test01.py:417: 跳过Test类会跳过类中所有方法
============================= 2 skipped in 0.04s ==============================
 
Process finished with exit code 0

三、跳过方法或测试用例

我们想要某个方法或跳过某条用例在方法上加以下3种都可以

@pytest.mark.skip() #1、跳过方法或用例未备注原因

@pytest.mark.skip(reason='跳过一个方法或一个测试用例') #2、跳过方法或用例备注了原因

@pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例') #3、当条件满足跳过方法或用例备注了原因

1、跳过方法或用例未备注原因
import pytest,sys
class Test(object):
    @pytest.mark.skip()
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: unconditional skip
======================== 1 passed, 1 skipped in 0.04s =========================
 
Process finished with exit code 0
 
2、跳过方法或用例备注了原因
import pytest,sys
class Test(object):
    @pytest.mark.skip(reason='跳过一个方法或一个测试用例')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: 跳过一个方法或一个测试用例
======================== 1 passed, 1 skipped in 0.05s =========================
 
Process finished with exit code 0
 
3、当条件满足跳过方法或用例备注了原因
import pytest,sys
class Test(object):
    @pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: 跳过一个方法或一个测试用例
======================== 1 passed, 1 skipped in 0.06s =========================
 
Process finished with exit code 0

四、多个skip时满足1个条件即跳过

我们在类和方法上分别加了skip类中满足条件方法中未满足条件所以生效类中skip

import pytest,sys
@pytest.mark.skipif(1==1,reason='多个条件时有1个条件满足就跳过(类)')
class Test(object):
    @pytest.mark.skipif(1==2, reason='多个条件时有1个条件满足就跳过(方法)')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:418: 多个条件时有1个条件满足就跳过(类)
SKIPPED [1] test01.py:415: 多个条件时有1个条件满足就跳过(类)
============================= 2 skipped in 0.04s ==============================

五、skip赋值给变量可多出调用

无论是@pytest.mark.skip()标签还是@pytest.mark.skipif()标签如果你想在多个测试方法上装饰依次写起来很麻烦的话你可以选择定义个变量让它等于标签然后在装饰的时候用该变量代替标签。这种方法你还可以通过在其他模块中导入的变量的方式在其他模块中共享标签如果可以这样的话我们为什么不新建一个模块用来存放标签呢这样是不是又方便了许多。

赋值myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量可多处调用')

调用@myskip

import pytest,sys
myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量可多处调用')
class Test(object):
    @myskip
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:415: skip赋值给变量可多处调用
======================== 1 passed, 1 skipped in 0.07s =========================
 
Process finished with exit code 0

六、pytest.skip()方法内跳过

除了通过使用标签的方式还可以在测试用例中调用pytest.skip()方法来实现跳过可以选择传入msg参数来说明跳过原因如果想要通过判断是否跳过可以写在if判断里_

import pytest,sys
class Test(object):
    def test_one(self):
        pytest.skip(msg='跳过')
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] c:\users\wangli\pycharmprojects\test\test\test01.py:416: 跳过
======================== 1 passed, 1 skipped in 0.04s =========================
 
Process finished with exit code 0

最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走

这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“【Pytest】跳过执行之@pytest.mark.skip()详解-CSDN博客” 的相关文章