#python #python-behave
#python #python-ведет себя
Вопрос:
Я совершенно новичок в Python и автоматизированном тестировании, поэтому в качестве доказательства концепции я тестирую простой метод, который исправляет некоторые опечатки в названиях логова Cub Scout на правильное название логова.
Мой файл функций:
Feature: denConverter method
Scenario: Invalid Names
Given the den name xyz
When the denConverter method is run
Then denConverter should return None
Scenario Outline: Valid Names
Given the den name <initialName>
When the denConverter method is run
Then denConverter should return <endName>
Examples: Possible Entries
| initialName | endName |
| Wolf | Wolf |
| Wolves | Wolf |
| Lion | Lion |
| Tiger | Tiger |
| Bear | Bear |
| Webelos | Webelos |
| AoL | AoL |
| Arrowoflight | AoL |
| Arrowoflights | AoL |
| Bears | Bear |
Мой файл шагов:
from behave import *
from DenScheduler import denConverter
class DenName:
def __init__(self):
input_name = ""
output_name = ""
@given('the den name "{initialName}"')
def step_impl(context, initialName):
context.den_name = DenName()
context.den_name.input_name = initialName
pass
@given('the den name xyz')
def step_impl(context):
context.den_name = DenName()
context.den_name.input_name = "xyz"
pass
@when('the denConverter method is run')
def step_impl(context):
context.den_name.output_name = denConverter(context.den_name.input_name)
assert True is not False
@then('denConverter should return "{endName}"')
def step_impl(context, endName):
assert context.den_name.output_name == endName
@then('denConverter should return None')
def step_impl(context):
assert context.den_name.output_name == None
Когда я запускаю behave, все тесты в схеме сценария «Допустимые имена» завершаются с ошибкой следующим образом:
Scenario Outline: Valid Names -- @1.1 Possible Entries # features/denConverter.feature:15
Given the den name Wolf # None
When the denConverter method is run # None
Then denConverter should return Wolf # None
@given(u'the den name Wolf')
def step_impl(context):
raise NotImplementedError(u'STEP: Given the den name Wolf')
@then(u'denConverter should return Wolf')
def step_impl(context):
raise NotImplementedError(u'STEP: Then denConverter should return Wolf')
Я уверен, что упускаю что-то очевидное, но я застрял на этом в течение нескольких часов, пытаясь выяснить, что происходит не так. На этой заметке я замечаю, что в некоторых примерах используется @given(u’given statement’), в то время как другие используют @given(‘данное утверждение’), без «u», и я не уверен, для чего «u». Я пробовал как с «u», так и без него.
Ответ №1:
Есть 2 варианта решения этой проблемы. Либо обновив корнишон, либо заключив ваши параметры в «», как:
Given the den name "xyz"
или удалив то же самое из декоратора, например:
@given('the den name {initialName}')
Как правило, название шага корнишона должно совпадать с названием в оформленной строке. Итак, 2 ниже идут вместе:
@given('the den name "{initialName}"')
Given the den name "xyz"
или следующие два:
@given('the den name {initialName}')
Given the den name xyz
Обычно мы определяем параметры внутри символов комментария:»», и они по умолчанию распознаются как строки внутри метода. Кроме того, читателю такой функции будет более понятно, где находятся границы этих параметров.
Параметры, размещенные без знаков «», могут быть распознаны как цифры, если вы введете число, подобное:
Given the den name 100
Что полезно, когда вы работаете с некоторыми числами.