是否有一种使用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
答案 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
清除功能将在每个灯具作用域之后运行(此处为功能)。