假设我有一个主python-behave特征文件,在这个文件中,我检查是否存在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子句中执行了一个功能,此步骤将始终成功运行。我相当确定这是因为它没有检查任何条件,并且如果执行了一个behave脚本,无论它是否失败,这一步都会通过。
为了解决这个问题,我想在此步骤中或在environment.py文件的after_feature()函数中添加一行,以检查是否通过了已执行的behave特性。
Behave的API确实说它包含一个从功能文件创建的功能对象,它返回一个"status“变量,告诉您功能是通过了还是失败了。但是,状态变量似乎只能在environment.py文件中访问。
我的想法是,我会找到一种方法,使用behave的功能而不是os.system从步骤中执行一个功能对象,然后检查它的状态,但我不知道这是否可能。或者,我理解我可以编写一个功能文件,该文件按顺序执行25个场景,但在该文件中包含所有场景。但是,我希望避免这样做,因为出于单独测试的目的,主脚本被分成25个较小的脚本。此外,将几个小功能和一个大功能放在同一个文件夹中,以某种任意的顺序运行,这也不是一个好主意。
如何从environment.py或steps.py中检查来自另一个文件的特征是否通过或失败?
编辑:我想另一个想法是找到一种方法,将发送到命令行的文本输出到一个针对功能的日志文件中,并读取最后几行,以确定是否有任何功能或步骤失败,尽管这似乎是一种间接的方式。
发布于 2015-07-26 08:23:09
最大的问题是--你到底为什么需要它?如果特征X依赖于特征Y,那么它们都将失败。如果额外的功能是某种诊断功能,为什么不每次都运行它呢?“额外的诊断”是我可以想象的唯一可能有用的场景(仍然在BDD约定中),但坦率地说,它应该每次都运行,以确保一切都像预期的那样工作。
遗憾的是,如果因为某些原因你不能拥有它,最好的处理方法是在BDD之外,但是在你的CI内部(持续集成,例如TeamCity)。因此,您可以在构建步骤中创建每组功能,并且可以为失败的特定步骤设置触发器。
但我的感觉是,您只是拥有不完全是BDD的.feature文件,而现在您正在尝试修改工具以与之匹配。因此,可能最好的解决方案是重新考虑它们。
发布于 2015-12-08 13:05:22
我不知道你是否还在寻找答案,
我个人不建议使用主功能文件。
我建议在运行behave的顶层文件夹中设置另一个名为environment.py的python脚本。
在此文件中,您可以使用类似以下内容:
def after_feature(context, feature):
if context.failed:
print('Failed')
else:
print('Passed')顾名思义,behave会在每个功能文件执行完毕后调用此函数
或者,如果您正在寻找有关通过/失败和功能名称的更通用日志:
def after_feature(context, feature):
print('The feature: ' + feature.name + ' ' + feature.status)https://stackoverflow.com/questions/31617684
复制相似问题