行为`before_scenario`钩子不记得初始化的变量值

时间:2019-02-04 15:54:50

标签: python cucumber bdd python-behave

我正在使用behave固定装置在测试运行期间创建一个计数器。我在before_all钩子中初始化计数器,然后在每次运行方案时在before_scenario中递增计数器。

我认为before_all在整个测试期间运行一次,如果将变量添加到上下文中,以后可以使用。

在这里,我正在context.i = 0中初始化before_all,但是在before_scenario中,每次运行场景时,context.i的值都会再次设置为0。

environment.py

def before_all(context):
    context.i = 0

def before_scenario(context, scenario):
    context.i = context.i + 1

我希望每次运行都增加i。但这始终设置为1

2 个答案:

答案 0 :(得分:1)

对于那些有类似目的的人。您可以使用 dict 属性并将变量存储为键。这样,每次将新堆栈添加到框架时,上下文字典都会被保留。

def before_all(context):
    context.mydata = {}
    context.i = 0 // will be overridden
    context.mydata['i'] = 1 // will be preserved


def before_scenario(context, scenario):
    context.mydata['i'] += 1
    context.i += 1
    return

答案 1 :(得分:0)

在before_scenario中定义的上下文用户变量只能在场景lifycycle中访问。当跑步者开始下一个场景时,在上一个场景中定义的context.i不再存在,因此它使用在before_all挂钩中定义的变量。 我猜你不能更改在before_all挂钩中定义的上下文用户变量。