假设我有一个主要的 python 行为特征文件,在所述文件中,我检查是否存在 25 个,给予或接受,特征文件,以正确的顺序运行它们中的每一个,然后验证一些后置条件。
如果可能的话,我希望能够在单个功能文件中测试多个功能。我写了这一步:
@when(u'Feature {name} is executed')
def step_meta_feature(context, name):
context.script_start_time = datetime.datetime.now()
print("Testing feature " + name)
os.system("behave " + name + ".feature --no-capture")
context.script_end_time = datetime.datetime.now()
目前,只要在主功能文件的@when 子句中执行某个功能,此步骤将始终成功运行。我相当肯定这是因为它没有检查任何条件,如果执行了一个行为脚本,无论它是否失败,这一步都会通过。
为了解决这个问题,我想在这一步或 environment.py 文件的 after_feature() 函数中添加一行,以检查执行的行为特征是否通过。
Behave 的 API 确实说它包含一个从特性文件创建的特性对象,它返回一个“状态”变量,告诉你特性是通过还是失败。但是,该状态变量似乎只能在 environment.py 文件中访问。
我的想法是,我会找到一种方法来使用行为的功能而不是 os.system 从步骤中执行功能对象,然后检查其状态,但我不知道这是否可能。或者,我知道我可以编写一个按顺序执行 25 个场景的功能文件,但文件中包含所有场景。但是我想避免这样做,因为主脚本被分成 25 个较小的脚本用于单独的测试目的。此外,拥有几个较小的功能和一个大功能以执行同一文件夹中所有较小功能的功能并以任意顺序运行也不是一个好主意。
如果来自另一个文件的功能通过或失败,我如何从 environment.py 或 steps.py 中检查?
编辑:我猜的另一个想法是找到一种方法将发送到命令行的文本输出到功能日志文件并阅读最后几行以查找是否有任何功能或步骤失败,尽管这看起来像迂回的做事方式。