如果测试通过,可以进行pytest夹具清理吗?

时间:2017-11-29 19:48:15

标签: python pytest

是否有一种使用def ListofConnections2(key : String): List[String] = mm.get(key) match { case None => Nil case Some(keys) => keys.toList ++ keys.flatMap(ListofConnections2) } 灯具(特别是pytest)的好方法,只有在测试通过时才进行清理?

我正在测试一些terraform,并希望保持测试目录中的状态文件,以防它失败,我必须清理aws资源。

我可以使用pytest-tmpdir样式,但不愿意。

无法弄清楚如何在send中使用yield语法,尽管看起来很可能。

现在我是

xtest

2 个答案:

答案 0 :(得分:1)

您可以使用pytest_runtest_makereport钩子来设置测试项目中测试阶段的结果,并创建一个夹具来检查设置和测试执行的状态。如果两者都通过,则可以调用清除逻辑。

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    rep = outcome.get_result()  
    setattr(item, "rep_" + rep.when, rep)

@pytest.yield_fixture
def teardown(request):
    yield
    item = request.node
    if item.rep_setup.passed:
        try:
            call_status = item.rep_call.passed
            if call_status:
                <YOUR CLEAN_UP STEPS>
        except AttributeError:
            <YOUR CLEAN_UP STEPS>

答案 1 :(得分:0)

您可以使用addfinalizer进行清理。

@pytest.fixture(scope='function')
def tf_ut(request, tmpdir):
    tmp_dir = tempfile.mkdtemp(dir=test_root) # test_root is a session dir that contains the test dirs
    logging.debug('test fixture directory: %s', tmp_dir)
    shutil.copy(os.path.join(PROJECT_ROOT, 'terraform-provider-http'), tmp_dir)
    shutil.copy(os.path.join(PROJECT_ROOT, 'terraform-provider-bwafapi'), tmp_dir)
    tf = Terraform(working_dir=tmp_dir)
    tf.init(PROJECT_ROOT)

    def cleanup(tmpdir):
        if request.node.rep_setup.passed:
           #clean up tmpdir

    request.addfinalizer(cleanup)

    return tf

清除功能将在每个灯具作用域之后运行(此处为功能)。

相关问题