你也可以将单元测试和集成测试进行结构分离,并放置在特定的目录中。以下是A. Shaw在articlePython测试入门一文中提供的示例文件结构:
采用结构化方法,您可以:
@pytest.mark
标记各种测试。示例
这里我们仅对集成测试运行各种测试运行器。请参见上图中的示例 project/
目录。
使用标准库中的unittest
:
λ python -m unittest discover -s tests/integration
使用 nose
:
λ nose tests/integration
pytest
:λ pytest tests/integration
在 tests/
目录下显式调用测试运行器以运行所有测试:
λ pytest tests/
另外,许多测试运行器都具有自动测试发现机制,可以在子目录中找到测试。
λ cd ..
λ pytest project/
是的,您可以使用 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
标记修饰您的单元测试,但我发现这样稍微有点繁琐/冗长)
请参阅文档以获取更多信息。
[tool.pytest.ini_options] markers = ["integtest"]
(包括换行符)。 - JeroenDV
nose
测试运行器,它也可以处理这种发现。请查阅每个库的文档,因为命令行调用会有所不同。 - pylangpytest
也具有自动测试发现功能。 - pylangpytest tests/unit tests/integration
来执行单元测试之后再执行集成测试。 - Doopy