支持多行的 step

steps.feature

  1. Feature: Multiline steps
  2. Scenario: Multiline step using sub indentation
  3. Given I have a step with:
  4. Some
  5. Extra
  6. Lines
  7. Then the text should be parsed with correct indentation

如果后面几行相对于 step 的第一行有缩进,那么就可以认为这个 step 有多行
tips:pycharm 对于这种换行会爆红,忽略即可

  1. Given I have a step with:
  2. Some
  3. Extra
  4. Lines

那么这个 given step 的名字就会为:'I have a step with:\nSome\nExtra\nLines'

test_steps.py

  1. from pytest_bdd import given, then, parsers, scenarios
  2. scenarios('steps.feature')
  3. @given(parsers.parse("I have a step with:\n{text}"), target_fixture="i_have_text")
  4. def i_have_text(text):
  5. return text
  6. @then("the text should be parsed with correct indentation")
  7. def text_should_be_correct(i_have_text, text):
  8. print(i_have_text)
  9. print(text)
  10. assert i_have_text == text == 'Some\nExtra\nLines'

命令行运行

  1. pytest -sq test_steps.py

运行结果

  1. Some
  2. Extra
  3. Lines
  4. Some
  5. Extra
  6. Lines
  7. .
  8. 1 passed in 0.01s

补充一个重点

@when、@then 可以直接使用 @given 中的步骤参数

  1. # 比如这里的 text 就是上面 @given 的步骤参数 {text} 的名字
  2. @then("the text should be parsed with correct indentation")
  3. def text_should_be_correct(i_have_text, text):