Вопрос: SpecFlow + WatiN + NUnit + TeamCity для Windows Server 2008 R2


Недавно я столкнулся с некоторыми проблемами при создании полностью автоматизированной среды для создания / тестирования / развертывания в ночное время. Чтобы объяснить установку короче. Мы используем Mercurial как систему управления версиями, а TeamCity - как сервер сборки. В настоящее время у него только один агент сборки на отдельной машине, чтобы все было просто.

Идея такова: каждую ночь запускается сборка TeamCity. Вытягивает последнюю версию из Mercurial-репозитория, запускает сборку, запускает модульные тесты, развертывает для тестирования сервера, запускает приемочные тесты (на агенте сборки) против только что развернутого тестового сервера и, если все это проходит, разворачивает лот на промежуточный сервер. У меня все работает, кроме приемочных испытаний. Это делается с помощью SpecFlow и WatiN. Everyhting отлично работает на машинах разработки (Windows 7 32 бит). Однако, когда я пытаюсь запустить приемочные тесты (NUnit в TeamCity), отчеты бегунов не работают с шагами [Browser] .ContainsText (browserText). Все шаги до этого выполнялись правильно, и если я реплицирую шаги в том же браузере в агенте сборки (получив полный доступ администратора), я вижу, что текст присутствует. Поэтому, насколько мне известно, тест должен пройти.

я нашел это threadoverflow thread  что заставило меня думать, что я, возможно, что-то не так сработал, когда я поддерживаю экземпляр браузера. Чтобы объяснить: у меня есть набор общих шагов, таких как «когда я нажимаю кнопку X» или «когда я ввожу текст X в поле Y» и тот, у кого есть проблема », тогда мне показывают X». Поскольку я делаю как можно больше тестов для повторного использования, я также обобщил условие сценария @requires_browser, которое затем определяется следующим образом:

[BeforeScenario("requires_browser")]
public void RequiresBrowserBeforeFeature()
{
    Settings.MakeNewIeInstanceVisible = false;
    ScenarioContext.Current.Set<Browser>(new IE(true));
}

[AfterScenario("requires_browser")]
public void RequiresBrowserAfterFeature()
{
    ScenarioContext.Current.Get<Browser>().Close();
    ScenarioContext.Current.Get<Browser>().Dispose();
}

а затем общий шаг:

[Then("I am shown \"(.*)\"")]
public void ThenIAmShown(string text)
{
    Assert.IsTrue(ScenarioContext.Current.Get<Browser>().ContainsText(text));
}

Из этого я могу определить другие общие шаги, которые вводят текст в текстовые поля, кнопки и т. Д. Все это отлично работает в среде разработки, работающей в visual studio 2010 [как администратор].

Я ошибаюсь, думая, что ScenarioContext следует сохранить до завершения теста?

То, что я пробовал до сих пор:

  1. Настройка службы агента сборки для работы в качестве локальной системы (SYSTEM). Это вызывает проблему, как описано - метод ThenIAmShown (строковый текст) всегда будет терпеть неудачу. Он поддерживает взаимодействие с локальным рабочим столом.

  2. Конфигурированная служба агента сборки для работы в качестве администратора сети (полные права администратора). Эта настройка даже не запускает тесты. Исключением я получаю:

    Сбой метода TearDown. WatiN.Core.Exceptions.BrowserNotFoundException: Не удалось найти ограничение соответствия окна IE: время ожидания при подключении к вновь созданному экземпляру IE. Поиск истек через 30 секунд. TearDown: System.Collections.Generic.KeyNotFoundException: данный ключ отсутствовал в словаре. в WatiN.Core.IE.CreateIEPartiallyInitializedInNewProcess () в WatiN.Core.IE.CreateNewIEAndGoToUri (Uri uri, IDialogHandler logonDialogHandler, Boolean createInNewProcess) ...

  3. Уже добавлены сборки Interop.SHDocVw.dll и Microsoft.mshtml.dll в каталог bin (Copy To Output в ссылках проекта).

  4. Запуск пользовательского интерфейса NUnit от агента сборки. Это запускает модульные тесты, как ожидалось. Приводит меня к мысли, что может быть проблема с безопасностью. Runnint NUnit 2.0.5 для Windows Server 2008 R2 Enterprise.

У кого-нибудь была эта проблема?


7


источник


Ответы: