将参数从WHEN传递给THEN

时间:2016-01-10 21:14:39

标签: python bdd pytest

如何在pytest bdd中将参数从WHEN传递给那么? 例如,如果我有以下代码:

@when('<n1> is a number divisible by 10')
def n1_is_a_number_divisible_by_10(n1):
  assert (n1 % 10) == 0
  newN1 = n1/10
  return newN1

@then('the result will also be divisible by 3')
def the_result_will_also_be_divisible_by_3(newN1):
  assert newN1 % 3 == 0

如何将newN1从何时传递到当时?

(我已经尝试过将newN1变成一个全局变量......这样可以解决问题,但是在python中通常会让事情变得全局化。)

1 个答案:

答案 0 :(得分:3)

你不能通过返回从“when”到“then”传递任何东西。一般来说,你想避免这种情况。但如果必须,请在两个步骤中使用pytest fixture作为消息框:

@pytest.fixture(scope='function')
def context():
    return {}

@when('<n1> is a number divisible by 10')
def n1_is_a_number_divisible_by_10(n1, context):
  assert (n1 % 10) == 0
  newN1 = n1 / 10
  context['partial_result'] = newN1

@then('the result will also be divisible by 3')
def the_result_will_also_be_divisible_by_3(context):
  assert context['partial_result'] % 3 == 0

“context”夹具的结果传递给“when”步骤,填充,然后传递给“then”部分。它不会每次都重新创建。

作为旁注,测试你的测试是不是最理想的 - 你在“何时”部分这样做,断言可分性。但这只是我想的一些示例代码。