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

2022-03-01 00:00:00 python pytest integration-testing

问题描述

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

我想知道如何将单元测试合并到pytest中的单个集成测试中。 此外,我还想在一个测试会话中多次重复集成测试。请让我知道是否有办法在pytest中做到这一点。

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

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

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

这样可以很好地启动测试会话,并在每个测试会话中进行一个调用的情况下尽可能多次地拆卸测试会话。

但是我想在单个测试会话中进行多个调用,并且到目前为止,我还没有找到任何方法来实现这一点,因为在过去的两天里我还没有找到这样做的方法。我尝试查看xdist,但我不想并行启动新进程。集成测试应该在单个测试会话中连续执行单元测试(启动调用和结束调用)任意次数。

我被卡住了。所以任何帮助都是最好的。谢谢!


解决方案

审阅https://docs.pytest.org/en/latest/parametrize.html

然后将MULT标记添加到每个测试,并在挂钩pytest_GENERATE_TESTS中使用它以提供多个测试,固定值将在--Collect-Only--MULT 3中可见。以此方式使用MARKER将多个测试机制约束为仅标记的测试。

# 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():
    ...

相关文章