如何在行为步骤实现中显式失败该步骤

pyt*_*ser 5 python python-behave

我想在behave遇到异常时显式地使该步骤失败

例如。我正在根据行为文档编写代码 -

from behave import *

@when('verify test fails.*?(?P<param_dict>.*)')
def test_logger(context, param_dict):
    try:
        logger.info("testing the logger. this is info message")
        logger.info(1/0)
    except Exception as e:
        logger.error("arrived at exception: "+str(e))
        fail("failed with exception: "+str(e))
Run Code Online (Sandbox Code Playgroud)

但它抛出这个错误:

NameError:未定义名称“失败”

我也尝试了其他方法,但没有任何效果,例如。context.failed = True (也没有工作)

如果我不尝试显式失败,即使它进入异常块,最终测试结果也会成为 PASS ......这很奇怪。

Ver*_*erv 5

context.failed只是由 Behave 设置的属性,不会按原样执行任何操作。它是一个信息属性,虽然您可以使用它来确定失败情况并抛出断言错误,但它本身不会做任何事情。请参阅上下文。失败

至于fail你提到的方法,它可能来自unittest模块,如这里所见。该模块也用于 Behave 的开发测试(参见他们的 Github)。不过我同意,这应该在他们的文档中得到澄清。

要修复您的错误,您需要导入unittest模块。要显式失败该步骤,您只需在记录消息后引发异常,如下所示:

except Exception as e:
    logger.error("arrived at exception: "+str(e))
    fail("failed with exception: "+str(e))
    raise
Run Code Online (Sandbox Code Playgroud)