Как запустить Dojo блок-тесты DOH через Jenkins?
Кто-нибудь пытался интегрировать Dojo DOH unit-tests с Jenkins?
Я хотел бы сделать следующее, но не хочу его повторно изобретать, если это уже сделано. Итак, я думаю:
- Удалите DOH-тесты с этапа после сборки в Jenkins и дождитесь результатов.
- Запустите сами тесты в браузере без браузера (например, Crowbar)
- Разбор суммы succes/error из HTML, возвращаемого Crowbar
- Найдите (или напишите) плагин Jenkins, который (а) завершит сбой сборки, если будут неудачные тесты, (б) выдаст результаты теста, (в) возможно интегрировать результаты в плагин игры CI
Вопросы:
- Это было сделано раньше?
- Вы видите какие-либо проблемы с контуром выше?
- Знаете ли вы о плагине Jenkins, который поможет, или мне нужно будет создать собственный?
Ответы
Ответ 1
1. Автоматизированное тестирование Dojo - DOH и Selenium-RC (Rob Coup - 2008/01/03)
План:
- У вас есть файл конфигурации, определяющий, какие браузеры запускать, какие машины они запускают и какие тесты запускать.
- Запуск каждого браузера через Selenium-RC
- Запустите тесты с помощью обычного браузера браузера DOH.
- Используйте Selenium для извлечения результатов из DOH.
- Объедините результаты из разных браузеров и произведите что-то полезное.
Решение:
- Отбросьте
seleniumRunner.js, seleniumRunner.config.js, seleniumRunner.sh
(или .bat
, если вы в Windows), и selenium-java-client-driver.jar
в утилиту/doh/в настройке Dojo. - Поместите
selenium-server.jar
на каждый тестовый компьютер, затем запустите java -jar selenium-server.jar -multiWindow
, чтобы он прослушивал сообщения управления браузером. - Измените
seleniumRunner.config.js
и измените browsers
и rootUrl
в соответствии с вашими настройками. rootUrl
должен быть доступен с каждой тестовой машины. - запустите
./seleniumRunner.sh seleniumRunner.config.js
из утилиты/doh/на вашей рабочей станции. - Он загрузит конфигурацию, запустит браузер на каждой машине, запустит модульные тесты из ядра Dojo и распечатает статистику проходов/сбоев/ошибок для каждого.
- Каждый браузер запускается и контролируется в отдельном потоке (не обязательно, но слишком круто, чтобы противостоять).
Вопросы:
- Если я не запустил сервер selenium в режиме multiWindow, Safari и Firefox появятся диалоговые окна Print (!?!) всякий раз, когда тестовая страница загружен. Но Safari никогда не инициализировала тестовую страницу, если она была в multiWindow режим. В OSX и Windows. г.
- Opera OSX не настроила прокси-сервер Selenium должным образом (
localhost:4444
для справки). - IE не любил делать
dojo.connect()
через команды senenium javascript по какой-то причине.
2. Мне кажется разумным.
3. Плагин Jenkins Selenium
Этот плагин превращает ваш кластер Jenkins в кластер Selenium2 Grid, так что вы можете использовать свои гетерогенные кластеры Дженкинса для переноса вне Селен. Этот плагин является решением "под ключ" - никаких дополнительных установка и настройка необходимы, чтобы заставить его работать. плагин автоматически устанавливает селенную сетку на всех ведомых устройствах и устанавливает вверх по сетке самостоятельно.
Ответ 2
Для запуска тестов D.O.H я разработал инструмент, который интегрируется в ci и может запустить браузер.
http://codeblog.bigbrowser.net/dojo-testing-d-o-h-with-continuous-integration/
Maybee вы можете дать это и попробовать.
Я объяснил, где скачать и как его запустить.
Ответ 3
Вот как я это сделал с HTMLUnit. Селен не требуется.
Он запускается как обычный JUnit-тест (который может легко запускаться автоматически вашим CI-сервером) и выводит журнал DOH, если есть ошибка теста.
public class JavascriptTest {
private static final int MAX_RUNNING_TIME = 10 * 1000;
//The test runner
public static final String PATHNAME = "src/main/webapp/library/mystuff/dojo/util/tests/runTests.html";
//Runs all of the Dojo Objective Harness (D.O.H.) javascript tests.
//The tests are currently grouped into test modules, and the parent module is "util.tests.module" (in module.js)
//As you can see in the URL pathname, we pass that module name to the testRunner and it runs all the javascript tests.
@Test
public void runAllJavascriptTests() throws Exception {
final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);
final HtmlPage page = webClient.getPage("file://" + new File(PATHNAME).getAbsolutePath());
waitForTestsToRun(webClient, page);
String log = page.getElementById("logBody").asText();
assertTrue(log, page.asText().contains("WOOHOO!!")); //D.O.H. will display WOOHOO!! if all tests are successful.
}
private void waitForTestsToRun(WebClient webClient, HtmlPage page) {
webClient.waitForBackgroundJavaScript(500);
int runningTime = 0;
while(testsAreRunning(page) && runningTime < MAX_RUNNING_TIME){
webClient.waitForBackgroundJavaScript(500);
runningTime += 500;
}
}
private boolean testsAreRunning(HtmlPage page) {
//Check if the "Tests Running" div is visible.
return "".equals(page.getElementById("playingMsg").getAttribute("style"));
}
}
И ниже - содержимое runTests.html. В основном это просто перенаправление на тестовый бегун DOJO с параметрами, специфичными для тестов в каталоге, который мы хотим проверить.
Это просто хороший способ структурирования вещей, вы также можете указать этот URL-адрес в поле PATHNAME в тесте JUnit.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Dojox Unit Test Runner</title>
<!--The "testModule" param tells the runner which test module to run-->
<!--The "paths" param adds our dojo module paths, otherwise it would just look in the default dojo modules for code to test.-->
<meta http-equiv="REFRESH" content="0;url=../../../../dojo-release-1.7.2-src/util/doh/runner.html?testModule=util.tests.module&paths=util,../../mystuff/dojo/util;mystuff,../../mystuff/dojo"></HEAD>
<BODY>
Redirecting to D.O.H runner.
</BODY>
</HTML>