Тесты Watin проваливаются на CC.Net - PullRequest
4 голосов
/ 12 марта 2009

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

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

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

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

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

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

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

Ответы [ 6 ]

10 голосов
/ 07 августа 2009

Мы только что выяснили, как обойти эту проблему. Теперь у нас есть watin-тесты, запущенные через 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 голос
/ 06 августа 2009

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

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

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

0 голосов
/ 07 мая 2014

Это хорошее решение, но оно не решает проблему, если вы пытаетесь загрузить файлы с помощью Watin.

http://blog.kikicode.com/2011/10/run-minimized-batch-file-in-task.html

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

0 голосов
/ 29 октября 2013

Я последовал этому примеру, но, к сожалению, он мне не помог. Поскольку этот вопрос касается nant и я использую msbuild, я открыл отдельный вопрос для этого здесь .

0 голосов
/ 07 января 2011

Не уверен, почему этот ответ был помечен как правильный с недопустимым примером exec.

Я переписал это на:

<exec> <baseDirectory>WatinTestDir</baseDirectory> <executable>cmd.exe</executable> <buildArgs>/interactive /C nunit-launcher.bat Test.dll /xml:../Test-results.xml</buildArgs> <buildTimeoutSeconds>2400</buildTimeoutSeconds> </exec>

Который работает .. но все равно не работает ..

0 голосов
/ 13 марта 2009

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

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

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

EDIT:

Результаты:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...