【问题标题】:how to write integration tests using pytest and how to repeat the integration tests如何使用 pytest 编写集成测试以及如何重复集成测试
【发布时间】:2023-09-16 21:32:01
【问题描述】:

我是新手,所以如果问题不够具体,请不要介意。

我想知道如何将单元测试合并到 pytest 中的单个集成测试中。 此外,我想在一个测试会话中重复集成测试几次。请让我知道是否有办法在 pytest 中执行此操作。

场景: 我有两个单元测试名称 test_start_call 和 test_end_call 由 pytest 按此顺序调用。

现在我想重复这个过程几次,所以我这样做了:

对于范围内的 i(0,c): pytest.main(一些命令)

效果很好,它将启动测试会话并根据我的需要多次取消测试会话,并且在每个测试会话中进行一次调用。

但是我想在一个测试会话中打几个电话,但自过去两天以来我还没有找到任何方法来做到这一点。我尝试查看 xdist 但我不想并行启动新进程。集成测试应该在单个测试会话中按我想要的次数连续执行单元测试(开始调用和结束调用)。

我被困住了。所以任何帮助都会很棒。谢谢!

【问题讨论】:

标签: python integration-testing pytest


【解决方案1】:

根据您的说法,我不太确定您使用的是正确的工具集。 听起来您要么尝试加载测试某些东西(多次运行它,看看它是否会掉下来),要么尝试做一些更“数据驱动”的事情 - 也就是给定输入值 x 到 y,看看它的行为方式。

如果您尝试做负载测试之类的事情,我建议您查看locust 之类的内容。

Here 是一个合理的博客,其中包含通过不同数据驱动单元测试的不同示例。

同样,不确定这些是否真的是您正在寻找的。​​p>

【讨论】:

    【解决方案2】:

    评论https://docs.pytest.org/en/latest/parametrize.html

    然后将 mult 标记添加到每个测试并在钩子中使用它 pytest_generate_tests 以提供多个测试夹具值将在 --collect-only --mult 3 中可见。以这种方式使用标记将限制多重测试机制,仅标记测试。

    # conftest
    def pytest_addoptions(parser):
        parser.addoption('--mult', default=0, help="run many tests")
    
    def pytest_generate_tests(metafunc):
        count = int(metafunc.config.getoption('--mult'))
        if count and metafunc.get_closest_marker('mult'):
            if 'mult' not in metafunc.fixturenames:
                metafunc.fixturenames.append('mult') 
            metafunc.parametrize("mult", range(count))
    
    # testfoo
    @pytest.mark.mult
    def test_start_call():
        ...
    

    【讨论】:

    • 已更新以删除测试中未使用的固定装置,并希望标记可以选择应该多次运行的测试。
    最近更新 更多