如何使用 pytest 编写集成测试以及如何重复集成测试

how to write integration tests using pytest and how to repeat the integration tests

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

我想知道如何在 pytest 中将单元测试组合成单个集成测试。 此外,我想在单个测试会话中重复集成测试几次。如果有办法在 pytest 中执行此操作,请告诉我。

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

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

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

它工作正常,它将启动测试会话并根据需要多次终止测试会话,每个测试会话中进行一次调用。

但我想在一次测试会话中进行多次调用,自从过去两天以来我还没有找到任何方法来执行此操作。我尝试查看 xdist 但我不想并行启动新进程。集成测试应该在单个测试会话中连续执行单元测试(开始调用和结束调用)多次。

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

从你所说的来看,我不太确定你使用的是正确的工具集。 听起来你要么试图加载测试某些东西(运行 多次并查看它是否失败),要么试图做更多的事情 "data driven" - 也就是给定输入值 x 到 y,看看如何它的行为。

如果您正在尝试做负载测试之类的事情,我建议您研究一下 locust.

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

同样,不确定这些是否真的是您要找的东西。

回顾https://docs.pytest.org/en/latest/parametrize.html

然后向每个测试添加 mult 标记并在钩子中使用它 pytest_generate_tests 以提供多个测试 fixture 值将在 --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():
    ...