Определения шагов работают следующим образом:
- Вы создаете новый файл py
- Вы добавляете определение новой функции в этот файл
- В этом если оба ваших файла имеют одинаковое имя функции,
def step_impl
- Вы украшаете свою новую функцию текстом файла функций, который хотите связать с ней
enter the {driver_id}
enter the configured block number
- Когда вы запускаете свое поведение, программа собирает все свои файлы функций и все определения своих шагов, а затем пытается сопоставить два
- В приведенном выше примере Behave находит текст
enter the {driver_id}
и связывает его с функцией step_impl
- Затем Behave находит текст
enter the configured block number
и пытается связать его с определением своей функции, но обнаруживает, что функция step_impl
уже была определена и связана с текстом функции. Не зная, что делать, Behave выдает исключение AmbiguousStep
, чтобы вы знали, что имя функции использовалось дважды.
Чтобы исправить эту проблему, вам нужно убедиться, что имена ваших функций уникальны во всех файлах определения шагов. Итак, в вашем случае у вас есть два файла, каждый из которых определяет функцию с именем step_impl
. Что вам следует сделать, так это переименовать эти функции с уникальными именами, чтобы Behave мог правильно соотносить эти имена во время выполнения. Чтобы имена были уникальными, я рекомендую выбирать имена, максимально соответствующие оформленному тексту. Если бы я писал эти определения, я бы переписал их следующим образом:
driverlogon.py
@when(u'enter the {driver_id}')
def step_enter_the_driver_id(context,driver_id):
SelectDriver.input_driver(driver_id)
triplogon.py
@when(u'enter the configured block number')
def step_enter_the_configured_block_number(context):
ByBlock.block_data(context.block)
Edit # 1:
Спасибо за включение трассировки стека. Из этого следует, что вы определили один и тот же шаг дважды в двух разных файлах:
File "steps\triplogon.py", line 23, in <module>
@when(u'enter the configured block number')
File "c:\program files (x86)\python\lib\site-packages\behave\step_registry.py", line 92, in wrapper
self.add_step_definition(step_type, step_text, func)
File "c:\program files (x86)\python\lib\site-packages\behave\step_registry.py", line 58, in add_step_definition
raise AmbiguousStep(message % (new_step, existing_step))
behave.step_registry.AmbiguousStep: @when('enter the configured block number') has already been defined in
existing step @when('enter the {driver_id}') at steps/driverlogon.py:26
Вы заметите, что в верхней строке написано:
File "steps\triplogon.py", line 23, in <module>
@when(u'enter the configured block number')
Это означает, что шаг enter the configured block number
определен в triplogon.py
Затем последняя строка трассировки говорит:
behave.step_registry.AmbiguousStep: @when('enter the configured block number') has already been defined in
existing step @when('enter the {driver_id}') at steps/driverlogon.py:26
Это означает, что enter the configured block number
также был определен в driverlogon.py
Убедитесь, что шаг был определен только в одном из двух файлов.