Дженкинс на тестах Windows и GUI без RDC
У нас есть конфигурация ведущий-ведомый для Дженкинса. Наш проект.NET построен на ведомом экземпляре Jenkins, работающем под Windows.
Существует множество тестов с графическим интерфейсом, но они запускаются только при открытом сеансе подключения к удаленному рабочему столу (RDC).
При попытке запустить тесты без RDC Дженкинс не показывает никакого прогресса в тестировании. Затем, однако, я подключаюсь к рабочему столу Slave и вижу главное окно запущенного приложения, однако среда тестирования пользовательского интерфейса (White) не может выполнять никаких действий.
Раб Jenkins запускается через Java Web Start.
Я читал на нескольких сайтах, что, к сожалению, невозможно запустить тесты GUI без сеанса RDC.
Я просто хочу подтвердить, что это правда, и задаться вопросом, есть ли обходной путь.
4 ответа
Ваши подчиненные машины должны быть на рабочем столе, прежде чем тест сможет работать правильно. У нас была такая же проблема.
Решение состояло в том, чтобы запустить тестовую машину и выполнить автоматический вход на рабочий стол. Чтобы гарантировать, что тест будет запускаться ТОЛЬКО после того, как рабочий стол станет доступен, мы добавили запланированное задание, настроенное для запуска при входе пользователя в систему, которое будет запускать подчиненное устройство Jenkins через Java Web Start. Таким образом, Дженкинс будет видеть раба только после запуска рабочего стола. После этого все заработало нормально.
У меня есть кластер Jenkins, выполняющий различные виды тестирования GUI, win32, swing, selenium. Они проводят тысячи тестов в автоматическом режиме 24x7. Вот мое решение:
Как сохранить тестирование графического интерфейса - RDC не работает, приложения с графическим интерфейсом будут хорошо работать только при активном сеансе RDC. Я пробовал разные способы, так что не пытайтесь повторить попытку. Ваш тест прервется после того, как окно RDC будет свернуто или отключено. Решение до сих пор заключается в установке VNC Server (я использую UltraVNC) в качестве службы и убедитесь, что он запускается во время входа в систему. Также убедитесь, что вы не подключаетесь к своей тестовой машине с RDC, поскольку RDC прервет сеанс VNC. Если возможно, подключите его и к VNC-клиенту. Но это зависит от вас. Что я делаю, когда мне нужно что-то отладить на машине, я подключаю к ней RDC и перезапускаю, чтобы убедиться, что #2 и #3 установлены.
Автоматический вход в систему - в SysInternalsSuite есть инструмент autologon.exe, запустите его на своем подчиненном устройстве.
Авторегистрация ведомого - вам нужен Swarm Plugin - https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin. Напишите простой пакет и поместите ярлыки в папку автозагрузки. Каждый раз, когда ваша машина автоматически запускается, она автоматически регистрируется как подчиненная.
Я на самом деле объединяю #2 и #3 как простой командный файл:
autologon.exe <user> <domain> <password>
REM Here to make sure the logonCount is properly generated
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0xFFFF /f
start /min java -jar I:\CDC\jenkins\swarm-client-1.9-jar-with-dependencies.jar -executors 1 -fsroot c:\Jenkins -labels "Prod Win7 %ComputerName%" -master <Jenkins URL> -name farm-%ComputerName% -username <username> -password <password>
Есть другой способ сделать это без автоматического входа в систему Windows (работает у меня на нескольких машинах).
1. Перейдите в Управление компьютером -> Службы и приложения -> Службы -> Ведомый Jenkins -> Свойства
2. На вкладке " Вход в систему" выберите " Локальная системная учетная запись" и установите флажок " Разрешить службам взаимодействовать с рабочим столом".
3. Закройте это окно, нажав кнопку ОК, и перезапустите подчиненную службу Jenkins.
4. Перейдите в каталог, где находится ваше тестовое приложение, и выберите " Свойства" в исполняемом файле приложения.
5. На вкладке Безопасность нажмите Изменить...
6. В новом окне нажмите Добавить.
7. В новом окне нажмите Locations... и выберите Local computer (самый верхний вариант в списке), нажмите OK
8. Поместите ЛОКАЛЬНЫЙ СЕРВИС в белую область окна и нажмите " Проверить имена", нажмите " ОК".
9. Разрешите Полный контроль для этого пользователя, нажмите OK, закройте все окна
Это должно быть все. Дайте мне знать, если это работает для вас.
Как уже говорилось в других ответах, нужна конфигурация, при которой машина Windows автоматически выполняет вход в систему для реального пользователя, подробности см. В других ответах. Однако этого мне было недостаточно, мне нужно было настроить сервер UltraVNC на работу в качестве службы для решения проблем.
На сайте упоминается, что вход в систему через RDP является проблемой для этого трюка, то есть подключения к VNC или перезагрузки после доступа RDP.