如何在pytest中将单元测试和集成测试分开

时间:2019-02-27 05:27:13

标签: python unit-testing testing integration-testing pytest

根据Wikipedia和各种articles,最佳实践是将测试分为单元测试(首先运行)和集成测试(第二次运行),其中单元测试通常非常快,应该运行对于CI环境中的每个版本,集成测试需要更长的时间运行,并且应该更多地每天运行。

有没有办法在pytest中将它们分开?大多数项目似乎没有多个测试文件夹,因此有没有一种方法可以确保我仅根据情况(CI与每日构建)运行单元和/或集成?在计算测试覆盖率时,我假设我必须同时运行两者。

在尝试将测试划分为这些类别时,我会采用正确的方法吗?在执行此操作的项目中是否有一个很好的例子?

2 个答案:

答案 0 :(得分:5)

是的,您可以使用pytest.mark装饰器标记测试。

示例:

def unit_test_1():
    # assert here

def unit_test_2():
    # assert here

@pytest.mark.integtest
def integration_test():
    # assert here

现在,从命令行中,您可以仅对单元测试运行pytest -m "not integtest",仅对集成测试运行pytest -m integtest,对于所有测试都运行普通pytest

(如果需要,您也可以用pytest.mark.unit装饰单元测试,但我发现这有点乏味/冗长)

有关更多信息,请参见documentation

答案 1 :(得分:2)

您还可以将单元测试和集成测试实际分离到特定目录中。这是A. Shaw的article Python测试入门

的示例文件结构:

enter image description here

通过结构化方法,您不仅限于特定的测试跑步者。来自project/目录的示例:

使用标准库中的unittest

> python -m unittest discover -s tests/integration

使用nose

> nose tests/integration:

使用pytest

> pytest tests/integration

许多测试运行者具有自动测试发现机制,可以在子目录中找到测试,例如> cd root_dir> pytest project/