Неоднозначный шаг в Python Behave

Мой бизнес-пользователь любит использовать тогда предложение «Это должно быть создано», где оно определяется контекстом сценария. Например:

Given I have gift certificate for "<name>"
When I enter the gift certificate
Then It should be created

or

Given Customer order return for order "<order_no>"
When I create the customer order return
Then It should be created

В «Тогда это должно быть создано» я хотел бы получить либо созданный подарочный сертификат, либо возврат заказа клиента для сравнения. Однако у них совершенно другой API и объект.

Во-первых, есть ли способ сделать это в Python Behave, не получая «Exception AmbiguousStep:»?

Если нет, что было бы для этого лучшей практикой в ​​мире BDD, не заставляя пользователя постоянно повторять себя, говоря: «Затем следует создать подарочный сертификат» или «Затем следует создать возврат заказа клиента»?

Спасибо.


person suriyanto    schedule 02.07.2015    source источник


Ответы (1)


В конкретном случае, который вы нам здесь даете, я бы написал шаги более подробно, чтобы избежать «этого». Поэтому я бы написал «Тогда должен быть создан подарочный сертификат» и т. Д. Я предпочитаю избегать зависимости шагов от состояния, передаваемого через context.

Однако...

Бывают случаи, когда сделать это будет проблематично. В вашем случае, возможно, политика работы с вашим бизнес-пользователем делает так, что просить больше подробностей не очень хорошо. Или могут быть технические причины, которые делают то, что я предложил выше, нежелательным или совершенно неработоспособным.

Если вы не можете использовать более подробные шаги, вы можете сделать так, чтобы шаг Then it should be created зависел от поля context, для которого установлено значение, которое предоставит шагу достаточно информации для выполнения его работы. Это может быть что-то вроде context.created_object. Шаг, на котором создается объект, установит в этом поле соответствующее значение, чтобы Then it should be created мог выполнять свою работу. Что именно вы будете там хранить, зависит от специфики вашего приложения.

Для одного моего приложения, где я проверяю внешний вид контекстного меню на основе щелчков мышью в окне браузера, иногда я записываю ссылку на элемент DOM, на котором пользователь щелкнул правой кнопкой мыши, что вызвало меню . Иногда это объект, предоставляющий координаты x, y. Это то, что нужно моему приложению для выполнения проверок. В этом случае предпочтительнее передавать информацию через context, потому что Selenium снова и снова запрашивает DOM на более поздних этапах, что может быть очень дорого по сети. После десятков тестов он может легко добавить минуты к запуску набора тестов, а затем учесть, что набор должен выполняться для нескольких комбинаций браузера, ОС и версии браузера.

person Louis    schedule 15.07.2015