如何在 pytest 中将单元测试和集成测试分开
How to keep Unit tests and Integrations tests separate in pytest
根据 Wikipedia and various articles,最佳做法是将测试分为单元测试(运行 首先)和集成测试(运行 第二),其中单元测试通常非常快并且在 CI 环境中的每个构建都应该 运行,但是集成测试需要更长的时间才能 运行,而且应该更像是每天 运行。
有没有办法在pytest中划分这些?大多数项目似乎没有多个测试文件夹,所以有没有办法根据情况确保我只有 运行 单元、集成或两者(CI vs 每日构建)?在计算测试覆盖率时,我假设我必须 运行 两者。
我尝试将测试划分为这些类别的方法是否正确?是否有某个项目的一个很好的例子已经做到了这一点?
是的,您可以使用 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
装饰你的单元测试,但我觉得有点 tedious/verbose)
有关详细信息,请参阅 documentation。
您还可以在结构上将 单元和集成测试分离到特定目录中。这是来自 A. Shaw 的 article Getting Started With Testing Python:
中的示例文件结构
通过结构化方法,您:
- 不需要手动标记各种带有属性的测试或
@pytest.mark
。
- 不限于特定测试运行ner。请参阅下面的示例。
例子
这里我们 运行 各种测试 运行 人员单独进行集成测试。请参见上图中的示例 project/
目录。
使用标准库中的 unittest
:
λ python -m unittest discover -s tests/integration
与nose
:
λ nose tests/integration
与pytest
:
λ pytest tests/integration
许多测试 运行ners 有一个自动测试发现机制,可以在子目录中找到测试。这提供了 运行 所有测试的选择,例如
λ cd <root_dir>
λ pytest project/
根据 Wikipedia and various articles,最佳做法是将测试分为单元测试(运行 首先)和集成测试(运行 第二),其中单元测试通常非常快并且在 CI 环境中的每个构建都应该 运行,但是集成测试需要更长的时间才能 运行,而且应该更像是每天 运行。
有没有办法在pytest中划分这些?大多数项目似乎没有多个测试文件夹,所以有没有办法根据情况确保我只有 运行 单元、集成或两者(CI vs 每日构建)?在计算测试覆盖率时,我假设我必须 运行 两者。
我尝试将测试划分为这些类别的方法是否正确?是否有某个项目的一个很好的例子已经做到了这一点?
是的,您可以使用 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
装饰你的单元测试,但我觉得有点 tedious/verbose)
有关详细信息,请参阅 documentation。
您还可以在结构上将 单元和集成测试分离到特定目录中。这是来自 A. Shaw 的 article Getting Started With Testing Python:
中的示例文件结构通过结构化方法,您:
- 不需要手动标记各种带有属性的测试或
@pytest.mark
。 - 不限于特定测试运行ner。请参阅下面的示例。
例子
这里我们 运行 各种测试 运行 人员单独进行集成测试。请参见上图中的示例 project/
目录。
使用标准库中的 unittest
:
λ python -m unittest discover -s tests/integration
与nose
:
λ nose tests/integration
与pytest
:
λ pytest tests/integration
许多测试 运行ners 有一个自动测试发现机制,可以在子目录中找到测试。这提供了 运行 所有测试的选择,例如
λ cd <root_dir>
λ pytest project/