2016-07-22 14 views
5

Прежде всего, прошу прощения, если я трачу ваше время, потому что это выглядит как простой шаг, который я не могу понять даже после некоторых исследований.Автоматизация тестирования TestStack.White UI в Windows Slave с использованием Jenkins

ОК, вот чего я пытаюсь достичь, я написал некоторые тесты пользовательского интерфейса, используя TestStack.White, я хотел бы выполнить это на Slave Jenkins в качестве другого пользователя, поскольку приложение ведет себя по-разному на основе ролей, которые назначаются им в Active Directory.

Итак, после небольшого поиска в google я нашел следующие ссылки, которые имеют отношение к тому, чего я пытаюсь достичь.

Похоже, что я должен установить TightVNC на Дженкинс ведомым и должны подключаться к подчиненному от Jenkins Master и выполнить тесты на рабу ,

Который подводит меня к моему первому вопросу, как мне добиться этого от работы Дженкинса?

О регистрации в качестве разных пользователей, я понимаю, что могу использовать для «autologon.exe» для достижения этого. Так что просто интересно, как я могу это сделать на Windows Slave от Jenkins Master. Моя компания не разрешает SSH для экземпляров Windows (подчиненные машины), я не могу удаленно выполнять SSH от Jenkins Master.

Я понимаю, что я, возможно, не смотрю на это правильно, поэтому любая помощь будет высоко оценена.

Заранее благодарим за ваше время и совет.

+1

Я думаю, что основная проблема с запуском UI-тестов, необслуживаемых на сервере, заключается в том, что вам нужен интерактивный сеанс. То есть должен быть пользователь, вошедший в систему в интерактивном сеансе, который не заблокирован или в противном случае «безголовый» в настоящее время, иначе многие вещи просто не работают. Использование виртуальной машины часто является подходящим подходом, но добавляет еще большую сложность. В нашем собственном продукте мы решили проблему, вообще не выполняя тесты пользовательского интерфейса, а вместо этого синтезируя наши собственные абстрактные входные события в правильном порядке, чтобы сделать остальную часть кода правильной тонкой, тем самым перешагнув проблему сеанса. – Joey

ответ

1

Спасибо всем за ваши комментарии и ответы, в основном это то, что я сделал, чтобы он работал на меня,

  1. Установите VNC соединение с клиентом VNC на Дженкинс рабыни, это было сделано вручную, а не через Дженкинс.
  2. Используйте приложение «Кофеин», чтобы предотвратить блокировку окон, он имитирует событие с ключом на F15 (каждые xx секунд), поэтому в моем проекте нет прерывания с задачей тестирования.
  3. Запустите соединение JNLP с мастером Jenkins и «Caffeine» как часть входа в систему через VNC-соединение.
  4. Закрытие соединения VNC (не отключение), это было сделано вручную не через Дженкинса.
  5. Позвольте сборке работать как разные пользователи, используя PSExec на ведомых устройствах.

Это, кажется, работает нормально до сих пор, я не ответил раньше, так как я хотел контролировать работу в течение нескольких дней, прежде чем отправлять свой ответ здесь.

1

Я готов сделать что-то похожее на это, но я создаю коммуникационный слой в нашем приложении автоматизации пользовательского интерфейса, чтобы наша машина сборки (наша компания развернула собственную машину сборки) могла отправлять запрос TCP туда и обратно. Я собираюсь развернуть автоматизацию пользовательского интерфейса и создать сборку, а затем запустить виртуальную машину. Шаблон сборки будет иметь сценарий запуска, который запускает оба наших приложения из общего ресурса. Как только виртуальная машина запущена, я собираюсь связаться с приложением UI Automation, чтобы сказать ей, чтобы она начала, и она сообщит мне, когда это будет сделано, чтобы я мог снести виртуальную машину. Я собираюсь сэкономить все результаты теста на долю для целей отчетности.

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

Если бы я собирался сделать это в Дженкинсе, я бы заглянул в систему плагинов Дженкинса. Система плагинов, насколько я знаю, использует Java, поэтому вы можете создать некоторый тип коммуникационного уровня и интерфейс с некоторым типом виртуальной машины. Если у вас нет возможности запускать и останавливать виртуальную машину, вам нужно будет заглянуть в начало и остановить процессы на удаленной машине, пока маскарадирует как пользователь. Я знаю, что это можно сделать на C#, но я никогда не рассматривал его на Java.