Как запустить 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>