Мы только что выяснили, как обойти эту проблему. Теперь у нас есть 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-файл, чтобы наша задача слияния не нуждалась в изменении, и передача результатов теста в круиз-контроль работает отлично.