Python 行为可选参数
Python Behave optional argument
我正在尝试使用 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: 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
features/steps/question_cfparse.特征
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"
features/steps/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
解析器不是一个好的选择,如果你有多个可选 parameters
一个接一个
可选部分的正则表达式:(?: exclude "(?P<excluded>[^"]*?)")?
如果所有步骤都没有使用 Regex 解析器,请将步骤匹配器恢复为默认值 'parse'
。
use_step_matcher('re')
@given('Verify text "(?P<text_to_clean>[^"]*?)"(?: exclude "(?P<excluded>[^"]*?)")?')
def step_verify_text(context, text_to_clean, excluded):
context.verified = verify_string(text_to_clean, excluded)
use_step_matcher('parse')
我正在尝试使用 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: 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
features/steps/question_cfparse.特征
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"
features/steps/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
解析器不是一个好的选择,如果你有多个可选 parameters
一个接一个
可选部分的正则表达式:(?: exclude "(?P<excluded>[^"]*?)")?
如果所有步骤都没有使用 Regex 解析器,请将步骤匹配器恢复为默认值 'parse'
。
use_step_matcher('re')
@given('Verify text "(?P<text_to_clean>[^"]*?)"(?: exclude "(?P<excluded>[^"]*?)")?')
def step_verify_text(context, text_to_clean, excluded):
context.verified = verify_string(text_to_clean, excluded)
use_step_matcher('parse')