Python Behave 可选参数

标签 python cucumber python-behave

我正在尝试使用 Cucumber (Behave) 编写测试。 'given' 语句需要能够带一个可选参数,它用于验证字符串中的内容。

这两种情况的示例功能语法是:

Given Verify text "this is a test string"
When String validation is "success"
Then Store form contents.

Given Verify text "this is a test string" exclude "test,trial,hello"
When String validation is "success"
Then Store form contents.

我尝试实现的步骤是:

# Verify text "this is a test string" exclude "test,trial,hello"

@given('Verify text "{text_to_clean}" {?: exclude "{excluded}')
def step_verify_text(context, text_to_clean, excluded):
    context.verified = verify_string(text_to_clean, excluded)

我该怎么做?我尝试使用 ? 的可选符号,但我无法弄明白。我需要做什么才能使用可选参数?

我在 macOS Catalina 上使用 Mac。

最佳答案

注意 feature 文件名和steps 文件夹中的文件名应该匹配。

例如:如果 feature 文件名是 question_regex.feature 那么 steps 文件夹中的文件名应该是 question_regex.py

1。选项 - 正则表达式分析器

features/question_regex.feature

Feature: regex question

  Scenario: first question regex
    Given Verify text "this is a string"
    Then parameter "excluded" is ""

  Scenario: second question regex
    Given Verify text "this is a test string" exclude "test,trial,hello"
    Then parameter "excluded" is "test,trial,hello"

features/steps/question_regex.py

from behave import use_step_matcher, given, when, then
use_step_matcher("re")

@given('Verify text "(?P<text_to_clean>.*?)"((?: exclude )"(?P<excluded>.*?)")?')
def step_verify_text(context, text_to_clean, excluded):
    context.myvar = excluded

@then('parameter "(?P<name>.*?)" is "(?P<result>.*?)"')
def step_verify_text(context, name, result):
    return getattr(context, name, None) == result

2。选项 - CFParse

特征/步骤/question_cfparse.feature

Feature: cfparse question

  Scenario: first question cfparse
    Given Verify text 2 "this is a test string"
    Then normal parameter "excluded" is ""

  Scenario: second question cfparse
    Given Verify text 2 "this is a test string" exclude "test,trial,hello"
    Then normal parameter "excluded" is "test,trial,hello"

  Scenario: second question cfparse
    Given Verify text 3 "this is a test string" exclude "hi,hello,I"
    Then normal parameter "excluded" is "hi,hello,I"

功能/步骤/question_cfparse.py

from behave import given, when, then, use_step_matcher, register_type
import parse
use_step_matcher("cfparse")

@parse.with_pattern(r'(?: exclude )"(.*?)"')
def parse_word_optional(text):
    print(text)
    return text.strip()

@parse.with_pattern(r'(?: exclude )')
def parse_exclude(text):
    return text.strip()

@parse.with_pattern(r'"(.*?)"')
def parse_word_between_quote(text):
    return text.strip()

register_type(my1_=parse_exclude)
register_type(quote_word=parse_word_between_quote)
register_type(my_=parse_word_optional)

@given('Verify text 2 "{text_to_clean}"{ignore1:my1_?}{excluded:quote_word?}')
def step_verify_text(context, text_to_clean, ignore1, excluded):
    context.excluded = excluded

@given('Verify text 3 "{text_to_clean}"{excluded:my_?}')
def step_verify_text(context, text_to_clean, excluded):
    context.excluded = excluded

@then('normal parameter "{name}" is {result:quote_word*}')
def step_verify_text(context, name, result):
    return getattr(context, name, None) == result

注意 如果您有多个可选的参数一个接一个地出现,cfparse 解析器不是一个好的选择

关于Python Behave 可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65430742/

相关文章:

python - 如何从 Python 中为运行者指定输入文件?

Python - 函数向量比在每个元素上调用 for 循环慢。 Numpy 比原生 Python 慢

python - flask 管理员 : Customize table name for the admin interface

ruby-on-rails - expect() 在 rspec/cucumber 中做了什么?

python - 使用 Pycharm 调试 python-behave 步骤

python - Allure 框架图未显示

python - InvalidS3ObjectException : Unable to get object metadata from S3?

java - 在这种情况下,当我尝试运行单个测试用例脚本时,为什么会打开多个浏览器实例?

testing - Gherkin 'Then' 语句是否应该引用 'I'

python - 行为 : How to import steps from another file?