Как запустить историю несколько раз с разными параметрами

  1. Я разработал историю jBehave, чтобы протестировать рабочий процесс, реализованный в нашей системе. Допустим, эта история называется customer_registration.story.

  2. Эта история является отправной точкой для некоторых других более сложных рабочих процессов, поддерживаемых нашей системой. Эти более сложные рабочие процессы также рассматриваются в разных историях. Допустим, у нас есть один из наших более сложных рабочих процессов, описанных в customer_login.story.

Итак, customer_login.story будет выглядеть примерно так:

Story: Customer Login

Narrative:

In order to access ABC application
As a registered customer
I want to login into the application

Scenario: Successfully login into the application

GivenStories: customer_registration.story

Given I am at the login page
When I type a valid password
Then I am able to see the application main menu

Все работает отлично и я доволен этим.

3. История в пункте 1 выше (регистрация клиентов) — это то, что мне нужно запустить на разных наборах данных. Допустим, наша система поддерживает i18n, и нам нужно проверить, что история регистрации клиентов работает нормально для всех поддерживаемых языков, скажем, мы хотим проверить, что наша регистрация клиентов работает нормально как с en-gb, так и с zh-tw.

Поэтому мне нужно реализовать multi_language_customer_registration.story, которая будет выглядеть примерно так:

Story: Multi language customer registration

Narrative:

In order to access ABC application
As a potential customer
I want to register for using the application

Scenario: Successfully customer registration using different supported languages

GivenStories: customer_registration.story

Then some clean up step so the customer registration story can run again

Examples:
|language|
|en-gb   |
|zh-tw   |

Любая идея о том, как я мог бы достичь этого? Обратите внимание, что что-то вроде ниже не вариант, так как мне нужно выполнить шаг очистки между запусками.

GivenStories:  customer_registration.story#{0},customer_registration.story#{1}

Перемещение шага очистки внутрь истории регистрации клиента также не вариант, так как тогда история входа перестанет работать.

Заранее спасибо.

P.S. Как вы могли догадаться, на самом деле истории, которые мы создали, более сложны, и их рефакторинг — непростая задача, но я рад сделать это для реальной выгоды.


person Julian    schedule 24.05.2012    source источник


Ответы (3)


Во-первых, BDD — это не то же самое, что тестирование. Я бы не стал использовать его для каждого отдельного сценария i18n. Вместо этого изолируйте бит, который имеет дело с i18n и модульным тестом, вручную проверьте пару и назовите это выполненным. Если вам действительно нужно больше тщательности, используйте его с парой языков, но не делайте этого со всеми из них — достаточно примеров, чтобы дать вам некоторую безопасность.

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

Сценарии, показывающие, для чего пользователь входит в систему, обычно более привлекательны и интересны для бизнеса (вы разговариваете с бизнесом, верно?).

В противном случае, вот три способа, которыми вы можете настроить контекст (Дано):

  • Путем взлома данных (таким образом, доступ к базе данных напрямую)
  • Через пользовательский интерфейс (или контроллер, если вы автоматизируете с этого уровня)
  • Используя существующие данные.

Вы также можете посмотреть, существуют ли данные, и если нет, настроить их. Так, например, если ваш клиент зарегистрирован, и вы не хотите, чтобы он был зарегистрирован, вы можете удалить его регистрацию как часть настройки контекста (выполнение шага Given); или если вам нужно, чтобы он был зарегистрирован, а он нет, вы можете пройти через пользовательский интерфейс, чтобы зарегистрировать его.

Наконец, в JBehave есть аннотация @AfterScenario, которую можно использовать для обозначения шага очистки. для этого сценария. Шаги можно использовать повторно - вы можете вызывать шаги сценария из другого шага в коде, а не использовать механизм JBehave (в любом случае это более удобно для сопровождения, IMO), и это позволит вам избежать очистки регистрации при входе в систему.

Надеюсь, один из этих вариантов вам подойдет!

person Lunivore    schedule 30.05.2012

С тактической точки зрения я бы сделал так:

В вашем файле .story

Given I set my language to {language}
When I type a valid password {pass}
Then I am able to see the application main menu

Examples:
|language|pass|
|en-gb   |password1|
|zh-tw   |kpassword2|

Затем в вашем файле Java

@Given ("I set my language to $lang")
@Alias ("I set my language to {language}")

// метод идет сюда

@When ("I type a valid password $pwrd")
@Alias ("I type a valid password {pass}")

// метод идет сюда

@Then ("I am able to see the application main menu")
person MDJ    schedule 11.09.2012

большинство фреймворков модульного тестирования поддерживают это.

Посмотрите, как в mstest можно указать DataSource, nunit похож https://github.com/leblancmeneses/RobustHaven.IntegrationTests< /а>

к сожалению, некоторые из фреймворков bdd, которые я видел, пытаются заменить существующие фреймворки модульного тестирования, когда вместо этого они должны работать вместе для повторного использования инфраструктуры.

https://github.com/leblancmeneses/BddIsTddDoneRight — свободный синтаксис bdd, который можно использовать с mstest/nunit. и работает с существующими тест-раннерами.

person Leblanc Meneses    schedule 24.05.2012
comment
Спасибо за ваш пост, но я ищу решение jBehave. Мы на стороне Java (не то, чтобы это действительно имело значение), и в JUnit вы также можете делать много вещей. Однако проблема, которую я опубликовал здесь, является частью комплексного набора тестов. JBehave инициирует запросы REST и WS или нажимает кнопки на различных веб-страницах, выполняя в точности то же, что и пользователь и/или клиентское приложение в реальном мире. Когда я сказал, что был бы рад сделать некоторую работу по рефакторингу, я не имел в виду переписывание более чем одного года хорошей работы, разрабатывающей все эти сценарии :-) - person Julian; 26.05.2012
comment
взгляните на github.com/leblancmeneses/RobustHaven.IntegrationTests, пока не в java - у вас есть полный исходный код, который можно преобразовать в java. Мы используем selenium и watin и можем построить несколько больших составных рабочих процессов: . Ваши существующие записанные сценарии попадут внутрь посетителя, который посетит каждый узел в композите для выполнения рабочего процесса. - person Leblanc Meneses; 26.05.2012