如何通过Jenkins运行Dojo DOH单元测试?

时间:2011-03-10 06:38:29

标签: javascript unit-testing dojo jenkins doh

有没有人尝试将Dojo DOH单元测试与Jenkins集成?

我想做以下事情,但如果已经完成,不想重新发明它。所以,我在想:

  1. 从Jenkins的构建后步骤开始进行DOH测试并等待结果
  2. 在无头浏览器(例如Crowbar)
  3. 中自行运行测试
  4. 从Crowbar
  5. 返回的HTML中解析成功/错误计数
  6. 查找(或编写)一个Jenkins插件,如果有失败的测试,(a)将失败,(b)渲染测试结果,(c)可能将结果集成到CI游戏插件中
  7. 的问题:

    1. 之前是否已完成?
    2. 您认为上述大纲有任何问题吗?
    3. 你知道Jenkins插件会有所帮助,还是我必须自己制作?

3 个答案:

答案 0 :(得分:3)

1。 Automated Dojo testing - DOH & Selenium-RC(Rob Coup - 2008/01/03)

  

安排:

     
      
  • 有一个配置文件,用于定义要启动的浏览器,它们所在的计算机以及要运行的测试。
  •   
  • 通过Selenium-RC
  • 启动每个浏览器   
  • 通过普通的DOH浏览器运行器运行测试。
  •   
  • 使用Selenium从DOH中提取结果。
  •   
  • 整理各种浏览器的结果并生成有用的内容。
  •   
     

解决方案:

     
      
  • 在您的Dojo安装中删除seleniumRunner.js, seleniumRunner.config.js, seleniumRunner.sh(如果您在Windows上,则为.bat),并selenium-java-client-driver.jar util / doh /
  •   
  • 在每台测试计算机上放置selenium-server.jar,然后运行java -jar selenium-server.jar -multiWindow,以便侦听浏览器控制消息。
  •   
  • 修改seleniumRunner.config.js并更改browsersrootUrl以符合您的设置。需要从每台测试机器访问rootUrl
  •   
  • 从工作站上的 util / doh / 运行./seleniumRunner.sh seleniumRunner.config.js
  •   
  • 它将加载配置,启动每台计算机上的浏览器,从Dojo核心运行单元测试,并打印每个的通过/失败/错误统计信息。
  •   
  • 每个浏览器都在一个单独的线程中启动和监控(不是绝对必要的,但是太酷了,无法抗拒)。
  •   
     

的问题:

     
      
  • 除非我在multiWindow模式下运行selenium服务器,每当测试页面出现时,Safari和Firefox都会弹出打印对话框(!?!)   加载。但Safari从未初始化测试页面,如果它在   multiWindow模式。在OSX和Windows上。嘎。
  •   
  • OSX上的Opera没有正确设置Selenium代理(localhost:4444以供参考)。
  •   
  • 由于某些原因,IE不喜欢通过selenium javascript命令执行dojo.connect()
  •   

2。对我来说似乎很合理。

3。 Jenkins Selenium plugin

  

此插件将您的Jenkins群集变为Selenium2 Grid群集,   这样你就可以利用你的异构Jenkins集群来携带   硒测试。这个插件是一个交钥匙的解决方案 - 没有额外的   安装和配置是必要的,以使其工作。该   插件会自动在所有从站上安装Selenium Grid并进行设置   单独建立一个网格。

答案 1 :(得分:2)

为了运行D.O.H测试,我开发了一个集成到ci中的工具,可以启动浏览器。

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

也许你也可以尝试一下。

我已经解释了在哪里下载以及如何运行它。

答案 2 :(得分:1)

以下是我使用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测试运行器,具有特定于我们要测试的目录中的测试的参数。

这只是一种很好的结构化方法,您也可以在JUnit测试的PATHNAME字段中指定此URL。

<!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>