📜  Python|跳过测试失败(1)

📅  最后修改于: 2023-12-03 15:19:22.616000             🧑  作者: Mango

Python | 跳过测试失败

简介

在进行软件开发时,测试是必不可少的步骤之一。通过测试,我们可以发现软件中的缺陷并及时修复。在 Python 中,我们可以使用各种测试框架来执行测试。但是,在某些情况下,测试可能失败,这可能是因为我们尚未解决某些问题或者某些外部因素的影响。虽然测试失败不是一个好的信号,但有时我们必须忽略测试的失败,并继续执行其他测试或者运行程序的其他部分。

为什么要跳过测试失败

跳过测试失败可以使我们更快地进行开发,尤其是当测试成功率很低时。在这种情况下,我们可能无法修复所有的测试失败,但是我们需要继续开发和进行测试。通过跳过测试失败,我们可以忽略一些小问题,并确保我们可以在短时间内完成开发和测试。

如何在 Python 中跳过测试失败

在 Python 中,有多种方法可以跳过测试失败。这里我们介绍两种常用的方法。

方法一:使用 unittest 框架

在 unittest 框架中,我们可以使用装饰器 @unittest.skip(reason) 来跳过测试失败。例如:

import unittest

class MyTest(unittest.TestCase):
    def test_something(self):
        self.assertEqual(1 + 1, 3)

    @unittest.skip("demonstrating skipping")
    def test_skipped(self):
        pass

    @unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        self.assertEqual(mylib.format('foo'), 'foo')

    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
    def test_windows_support(self):
        # windows specific testing code
        pass

在上述代码中,我们使用了 @unittest.skip(reason) 装饰器来跳过测试失败。例如,我们在 test_something 中测试了 1+1 是否等于 3,这个测试将会失败,但是我们在 test_skipped 中使用 skip 装饰器并在 reason 参数中说明了原因(demonstrating skipping),因此这个测试将被跳过不执行。

方法二:使用 pytest 框架

在 pytest 框架中,我们可以使用装饰器 @pytest.mark.skip(reason) 来跳过测试失败。例如:

import pytest

def test_something():
    assert 1 + 1 == 3

@pytest.mark.skip(reason="demonstrating skipping")
def test_skipped():
    pass

@pytest.mark.skipif(sys.version_info < (3, 5), reason="requires python3.5")
def test_version():
    assert sys.version_info >= (3, 5)

@pytest.mark.skip(reason="I don't want to run this test right now.")
def test_skip():
    pass

在上述代码中,我们使用了 @pytest.mark.skip(reason) 装饰器来跳过测试失败。例如,我们在 test_something 中测试了 1+1 是否等于 3,这个测试将会失败,但是我们在 test_skipped 中使用 skip 装饰器并在 reason 参数中说明了原因(demonstrating skipping),因此这个测试将被跳过不执行。

总结

跳过测试失败是在 Python 开发中常见的观念之一。在测试成功率较低时,我们可以忽略某些测试失败,并继续进行开发和测试。在 unittest 和 pytest 框架中,我们可以使用 skip 装饰器来跳过测试失败。这个方法可以让我们更快地进行开发和测试。