根据Wikipedia和各种articles,最佳实践是将测试分为单元测试(首先运行)和集成测试(第二次运行),其中单元测试通常非常快,应该运行对于CI环境中的每个版本,集成测试需要更长的时间运行,并且应该更多地每天运行。
有没有办法在pytest中将它们分开?大多数项目似乎没有多个测试文件夹,因此有没有一种方法可以确保我仅根据情况(CI与每日构建)运行单元和/或集成?在计算测试覆盖率时,我假设我必须同时运行两者。
在尝试将测试划分为这些类别时,我会采用正确的方法吗?在执行此操作的项目中是否有一个很好的例子?
答案 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测试入门
的示例文件结构:通过结构化方法,您不仅限于特定的测试跑步者。来自project/
目录的示例:
使用标准库中的unittest
:
> python -m unittest discover -s tests/integration
使用nose
:
> nose tests/integration:
使用pytest
:
> pytest tests/integration
许多测试运行者具有自动测试发现机制,可以在子目录中找到测试,例如> cd root_dir
,> pytest project/