Как запустить модульные тесты Dojo DOH через Jenkins?

Кто-нибудь пробовал интегрировать модульные тесты Dojo DOH с Jenkins?

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

  1. Начните DOH-тесты с этапа пост-сборки в Jenkins и дождитесь результатов
  2. Запустите сами тесты в браузере без головы (например, Crowbar)
  3. Анализировать число успехов / ошибок из HTML-кода, возвращенного Crowbar
  4. Найдите (или напишите) плагин Jenkins, который (а) не выполнит сборку, если будут неудачные тесты, (б) отобразит результаты теста, (в) возможно интегрирует результаты в плагин игры CI

Вопросы:

  1. Это было сделано раньше?
  2. Видите ли вы какие-либо проблемы с планом выше?
  3. Знаете ли вы о плагине Jenkins, который поможет, или мне придется создавать свой собственный?

3 ответа

Решение

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 в util/doh/ в вашей установке Dojo.
  • Положил selenium-server.jar на каждом тестовом компьютере, затем запустите java -jar selenium-server.jar -multiWindow поэтому он слушает сообщения управления браузером.
  • редактировать seleniumRunner.config.js и изменить browsers а также rootUrl в соответствии с вашими настройками. rootUrl должен быть доступен с каждой тестовой машины.
  • бежать ./seleniumRunner.sh seleniumRunner.config.js из util/doh/ на вашей рабочей станции
  • Он загрузит конфигурацию, запустит браузеры на каждой машине, запустит модульные тесты из ядра Dojo и напечатает статистику прохождения / неудачи / ошибки для каждого.
  • Каждый браузер запускается и отслеживается в отдельном потоке (не обязательно, но слишком круто, чтобы сопротивляться этому).

Вопросы:

  • если я не запускаю сервер selenium в многооконном режиме, Safari и Firefox будут открывать диалоговые окна печати (!?!) при загрузке тестовой страницы. Но Safari никогда не инициализировал тестовую страницу, если она была в многооконном режиме. На OSX и Windows. г.
  • Opera на OSX неправильно настроила прокси Selenium (localhost:4444 для справки).
  • IE не любил делать dojo.connect() через команды селена JavaScript по некоторым причинам.

2. Кажется разумным для меня.

3. Плагин Jenkins Selenium

Этот плагин превращает ваш кластер Jenkins в кластер Selenium2 Grid, так что вы можете использовать свои гетерогенные кластеры Jenkins для проведения тестов Selenium. Этот плагин является решением "под ключ" - для его работы не требуется никакой дополнительной установки или настройки. Плагин автоматически устанавливает Selenium Grid на всех подчиненных и устанавливает сетку самостоятельно.

Для запуска тестов DOH я разработал инструмент, который интегрируется в CI и может запустить браузер.

http://codeblog.bigbrowser.net/dojo-testing-d-o-h-with-continuous-integration/

Может быть, вы можете попробовать это тоже.

Я объяснил, где скачать и как его запустить.

Вот как я это сделал с 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> 
Другие вопросы по тегам