Тесты Watin терпят неудачу на CC.Net

Asked
Viewd6273

4

Я запускаю тесты Watin с xUnit на CC.Net под Windows Server 2003.

У меня есть множество тестов, которые отлично работают на модулях разработки с TestDriven.Net и на сервере с приложением xUnit gui. Однако, когда CC.Net запускает тесты (как часть задачи MSBuild), функция

 ie.ContainsText("some text to find");
 

никогда не возвращает ожидаемое значение. Другие функции и свойства объекта IE работают нормально: кнопка (...). Click (), TextBox (...). Value и т. Д.

Мне известно, что для учетной записи службы требуется «Разрешить службе взаимодействовать с рабочим столом».

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

Это проблема с разрешениями на сервере, или я что-то пропустил в конфигурации?

6 ответов

10

Мы только что выяснили, как обойти эту проблему. Теперь у нас есть контрольные тесты, запущенные через CruiseControl.net как сервис.

Нам нужно, чтобы наша служба cc.net запускалась от имени конкретного пользователя, чтобы получить доступ к веб-сайту, который мы тестируем, из-за способа настройки безопасности. Поскольку служба работает от имени пользователя домена, флажок «Разрешить пользователю взаимодействовать с рабочим столом» на вкладке безопасности службы отключен. Мы не хотим просто запускать командный процесс от всегда вошедшего в систему пользователя, потому что мы хотим, чтобы процесс запускался автоматически при перезагрузке. Теперь мы разобрались

Мы решили эту проблему, создав пакетный файл для вызова nunit-console.exe. Параметры для nunit-console.exe передаются в пакетный файл как параметры, который затем передает параметры. Вторая и последняя строка командного файла возвращает код возврата, возвращенный программой nunit-console.exe. Пакетный файл по сути выглядит так:

  nunit-console.exe %1 %2
 exit /b %ERRORLEVEL%
 

Количество параметров, которые вы передаете в nunit-console, может отличаться в зависимости от ваших потребностей.

Мы используем nant для наших сборок, поэтому мы заменили нашу существующую задачу nant для вызова nunit-console задачей exec, которая вызывает cmd.exe, которая выглядит следующим образом:

    <exec program="cmd.exe" failonerror="true">
      <arg value="/interactive" />
      <arg value="/c" />
      <arg value="[batch file name]" />
      <arg value="[parameter one value]" />
      <arg value="[parameter two value" />
   </exec>
 

Я не знаю, как эта же задача будет выглядеть в msbuild, но я уверен, что вы можете найти ее. Конечный результат - это команда, которая выглядит так:

    cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]
 

В качестве альтернативы вы можете использовать nant и просто создавать задачи msbuld nant для вызова существующих сборок.

Параметр / interactive для cmd.exe является ключевым, он запускает пакетный файл в процессе, который имеет разрешение на взаимодействие с рабочим столом. На самом деле я не уверен, требуется ли параметр '/ c', но он работает как есть. Мы по-прежнему говорим nunit записывать результаты в тот же XML-файл, чтобы наша задача слияния не нуждалась в изменении, а отправка результатов теста в круиз-контроль работала отлично.

1

Watin полагается на автоматизацию браузера для выполнения своей работы, поэтому параметр «разрешить службе взаимодействовать с рабочим столом».

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

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

0

Я получил несколько предложений офлайн:

  1. Попытайтесь запустить тесты с помощью msbuild на сервере.
  2. Попробуйте запустить CC.Net с консоли, а не как службу.

Будет редактировать результаты.

Результаты:

  1. Я полностью могу запускать тесты с помощью msbuild на сервере.
  2. Когда я запускаю ccnet.exe из командной строки, тесты проходят нормально. Однако, когда я настраиваю задачу для запуска ccnet.exe из командной строки при запуске, тесты зависают и никогда не завершаются (в конечном итоге истекает время ожидания).

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