Как запустить тесты specflow на сервере сборки?

Как запустить тесты specflow с помощью Nunit 2.6.1 на сервере сборки?

Кроме того, как вы поддерживаете и организуете эти тесты для успешного запуска на сервере сборки с несколькими программистами автоматизации, кодирующими отдельные тесты?


person user1663771    schedule 12.09.2012    source источник
comment
Какой сервер сборки (CI) вы используете? Вы читали эту запись в блоге об интеграции с TeamCity?   -  person lurkerbelow    schedule 13.09.2012
comment
Я использую TFS 2010 в качестве нашего сервера сборки.   -  person user1663771    schedule 13.09.2012
comment
Каков ваш конвейер сборки прямо сейчас? Есть ли в разработке какие-либо другие тесты nUnit?   -  person Marcelo Oliveira    schedule 21.09.2012


Ответы (1)


Попробую пока ответить на вторую часть вашего вопроса:

«Как вы поддерживаете и организуете эти тесты для успешного запуска на сервере сборки с несколькими программистами автоматизации, кодирующими отдельные тесты?»

Такого рода тесты могут превратиться в беспорядок, и вот почему:

  • шаги используются для создания контекстов (для теста сценария)
  • шаги можно вызывать из любого сценария в любом порядке

Благодаря этим двум простым фактам эту модель легко сравнить с процедурным/структурным программированием. Контекст сценария ничем не отличается от некоторых глобальных переменных, а шаги — это некие методы, которые можно вызывать в любое время в любом месте.

Что моя команда делает, чтобы избежать огромного беспорядка в файлах шагов, так это делает их настолько глупыми, насколько это возможно. Все, что делает шаг, — это анализ и вызов служб, которые будут выполнять реальную значимую работу и содержать контекст текущего теста. Мы называем эти службы «xxxxDriver» (где xxxx — объект домена, с которым мы имеем дело).

глупый пример:

[Given("a customer named (.*)")]
public void GivenACustomer(string customerName)
{
  _customerDriver.CreateCustomer(customerName);
}


[Given("an empty schedule for the customer (.*)")]
public void GivenEmptySchedule(string customerName)
{
  var customer = _customerDriver.GetCustomer(customerName);
  _scheduleDriver.CreateForCustomer(customer);
}

«xxxxxDriver» будет содержать все репозитории, веб-шлюзы, заглушки, макеты или все, что связано с соответствующим объектом домена. Еще одна важная деталь заключается в том, что если вы внедрите эти драйверы в пошаговые файлы, specflow создаст их экземпляр для каждого сценария и будет использовать его среди всех пошаговых файлов.

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

В кодовой базе specflow есть наглядный пример. (посмотрите в папке с драйверами) https://github.com/techtalk/SpecFlow/tree/master/Tests/TechTalk.SpecFlow.Specs

person Marcelo Oliveira    schedule 21.09.2012