• Pytest跳过执行之@pytest.mark.skip()详解大全


    一、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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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 FilesPython35python.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:UserswangliPycharmProjectsTest est
    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:userswanglipycharmprojects est est est01.py:416: 跳过
    ======================== 1 passed, 1 skipped in 0.04s =========================

    Process finished with exit code 0

    ————————————————
    版权声明:本文为CSDN博主「王大力测试进阶之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_36502272/article/details/103303010

  • 相关阅读:
    高并发核心技术
    2年java,蚂蚁一面,卒
    Spring Boot 实战 入门
    spring-boot-plus后台快速开发脚手架之代码生成器使用
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip
    从尾到头打印单向链表
    单向链表操作
    合并两个排序的数组
  • 原文地址:https://www.cnblogs.com/cafe910912/p/15161305.html
Copyright © 2020-2023  润新知