Итак, у вас есть 2 проблемы, и я попытаюсь решить их обе:
Проблема 1:
Хорошо иметь одинаковые, дословные Given
/When
/Then
во многих ваших файлах функций; то, как вы реализуете их в своих определениях шагов, имеет значение. Есть два пути, которые я бы рассмотрел: (1) использование параметров шага а>; (2) используя объект context
шага, чтобы указать, какой файл функций или сценарий вы используете. Что касается (2), рассмотрите возможность настройки сценария следующим образом:
Feature: Buying toys
@checkout_page
Scenario: Proceed to checkout page
Given Toys are in the shopping cart
When I enter code and click submit button <--- Same step
Then the items will be checked out
@purchase_page
Scenario: Proceed to purchase page
Given Toys are in the shopping cart
When I enter code and click submit button <--- Same step
Then the items will be purchased
Отсюда вы можете использовать объект context
поведения, чтобы сохранить тег и использовать его в своей реализации шага:
В окружении.py:
def before_scenario(context, scenario):
context.current_scenario_tags = scenario.tags # This is a list
# ... other stuff maybe
Поэтапная реализация:
@When("I enter code and click submit button")
def step_impl(context):
# Assuming that the logic to enter the code and set up the clicking action
# is identical in most regards, you should pull it out of the following for loop
# and place it here. This may help shorten your step implementations.
# vvvvvvvvvvvvvvvvvvvvv
# HERE
# ^^^^^^^^^^^^^^^^^^^^^
for tag in context.current_scenario_tags:
if tag == "checkout_page":
# Then handle the checkout_page scenario
break
elif tag == "purchase_page":
# Then handle the purchase_page scenario
break
*В зависимости от того, какие теги вы уже используете, вы можете просто выполнить break
операторов, а не перебирать остальные теги в цикле, предполагая, что вы уже знаете конкретные теги, которые ищете.
Это не решает вашу проблему реализации шага длиной в 400 строк, но, как говорится, «вы не можете съесть свой пирог и съесть его».
Проблема 2:
Это было рассмотрено выше, но вот несколько вещей о поведении и о том, как он ищет файлы функций и файлы шагов, из документации:
поведение работает с тремя типами файлов:
- функциональные файлы, написанные вашим бизнес-аналитиком / спонсором / кем-либо с вашими сценариями поведения в нем, и
- каталог «steps» с реализациями шагов Python для сценариев.
- опционально некоторые элементы управления окружающей средой (код для запуска до и после шагов, сценариев, функций или всего матча стрельбы).
Поэтому требуется каталог feature/
, как и подкаталог feature/steps/
. Ответ — нет, поведение не позволяет вам создавать категориальные папки или подкаталоги в каталоге feature/steps/
. Имейте в виду, что при поиске реализации шага, связанного с шагом в файле функций, поведение ищет все файлы Python в каталоге feature/steps/
, но не рекурсивно в подкаталогах каталога. Наличие хорошего соглашения об именах определенно может иметь большое значение здесь!
person
natn2323
schedule
22.08.2018