有没有人尝试将Dojo DOH单元测试与Jenkins集成?
我想做以下事情,但如果已经完成,不想重新发明它。所以,我在想:
答案 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
并更改browsers
和rootUrl
以符合您的设置。需要从每台测试机器访问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。对我来说似乎很合理。
此插件将您的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>