脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Pytest中skip和skipif的具体使用方法

Pytest中skip和skipif的具体使用方法

2021-12-10 00:13RockChe Python

在实际的测试中,我们经常会遇到需要跳过某些测试用例的情况,pytest提供了skip和ifskip来跳过测试.下面我们就来通过一些例子看看skip和ifskip具体如何使用吧,需要的朋友可以参考下

skip的用法

使用示例:@pytest.mark.skip(reason="跳过的原因,会在执行结果中打印")

标记在测试函数中

举个栗子

?
1
2
3
4
5
6
7
8
9
10
import pytest
 
 
def test_1():
    print("测试用例1")
 
 
@pytest.mark.skip(reason="没写完,不执行此用例")
def test_2():
    print("测试用例2")

执行结果如下:

Pytest中skip和skipif的具体使用方法

标记在测试类的测试用例中

举个栗子

?
1
2
3
4
5
6
7
8
9
10
import pytest
 
class testcase(object):
    def test_1(self):
        print("测试用例1")
 
 
    @pytest.mark.skip(reason="没写完,不执行此用例")
    def test_2(self):
        print("测试用例2")

执行结果如下

Pytest中skip和skipif的具体使用方法

标记在测试类方法上

举个栗子

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pytest
 
 
@pytest.mark.skip(reason="没写完,不执行此用例")
class testcase1(object):
    def test_1(self):
        print("测试用例1")
 
    def test_2(self):
        print("测试用例2")
 
 
class testcase2(object):
    def test_3(self):
        print("测试用例3")
 
    def test_4(self):
        print("测试用例4")

执行结果如下

Pytest中skip和skipif的具体使用方法

总结

  • @pytest.mark.skip 可以加在函数上,类上,类方法上
  • 如果加在类上面,则类里面的所有测试用例都不会执行

在测试用例执行期间强制跳过

以一个for循环为例,执行到第3次的时候跳出

?
1
2
3
4
5
6
7
import pytest
 
def test_demo():
    for i in range(50):
        print(f"输出第【{i}】个数")
        if i == 3:
            pytest.skip("跑不动了,不再执行了")

执行结果如下

Pytest中skip和skipif的具体使用方法

在模块级别跳过测试用例

语法:pytest.skip(msg="",allow_module_level=false)

allow_module_level=true时,可以设置在模块级别跳过整个模块

?
1
2
3
4
5
6
7
8
9
10
import pytest
 
pytest.skip("跳过整个模块", allow_module_level=true)
 
@pytest.fixture(autouse=true)
def test_1():
    print("执行测试用例1")
 
def test_2():
    print("执行测试用例2")

执行结果如下

Pytest中skip和skipif的具体使用方法

有条件的跳过某些用例

语法:@pytest.mark.skipif(condition, reason="")

?
1
2
3
4
5
6
7
8
import sys
import pytest
 
 
@pytest.mark.skipif(sys.platform == 'darwin', reason="does not run on macos")
class testskipif(object):
    def test_demo(self):
        print("不能在macos上运行")

注意:condition需要返回true才会跳过

执行结果如下:

Pytest中skip和skipif的具体使用方法

跳过标记的使用

  • 可以将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量
  • 在不同模块之间共享这个标记变量
  • 若有多个模块的测试用例需要用到相同的 skip 或 skipif ,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集

举个栗子

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
import pytest
 
skipmark = pytest.mark.skip(reason="不执行此用例")
skipifmark = pytest.mark.skipif(sys.platform == 'darwin', reason="does not run on macos")
 
 
@skipifmark
class testskipif(object):
    def test_demo(self):
        print("不能在macos上运行")
 
 
@skipmark
def test_1():
    print("测试用例1")
 
 
def test_2():
    print("测试用例2")

执行结果如下

Pytest中skip和skipif的具体使用方法

当缺少某些导入时跳过用例

语法:

pytest.importorskip( modname: str, minversion: optional[str] = none, reason: optional[str] = none )

参数:

  • modname: 需要被导入的模块名称,比如 selenium;
  • minversion: 表示需要导入的最小的版本号,如果该版本不达标,将会打印出报错信息;
  • reason: 只有当模块没有被导入时,给定该参数将会显示出给定的消息内容

找不到对应module

举个栗子

?
1
2
3
4
5
6
import pytest
rock = pytest.importorskip("rock")
 
@rock
def test_1():
    print("测试是否导入了rock模块")

运行结果

Pytest中skip和skipif的具体使用方法

如果版本不达标

举个栗子

?
1
2
3
4
5
6
import pytest
sel = pytest.importorskip("selenium", minversion="3.150")
 
@sel
def test_1():
    print("测试是否导入了selenium模块")

运行结果

Pytest中skip和skipif的具体使用方法

整理参考

小菠萝的测试笔记

到此这篇关于pytest中skip和skipif的具体使用方法的文章就介绍到这了,更多相关skip和skipif的使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/crdym/p/14954658.html

延伸 · 阅读

精彩推荐