如何轻松地将 Jenkins 与 qUnit 集成?我将使用真正的浏览器(如 firefox 和 chrome)来运行测试。我的服务器在 RedHat 6.1 Linux 上运行。我想我有所有需要的插件/库,但我仍然不知道如何让它工作。我第一次与 Jenkins 合作(在服务器端)。
//编辑:
如果有人也可以分享如何构建覆盖率报告的想法,那就太好了。
提前致谢 :)。
如何轻松地将 Jenkins 与 qUnit 集成?我将使用真正的浏览器(如 firefox 和 chrome)来运行测试。我的服务器在 RedHat 6.1 Linux 上运行。我想我有所有需要的插件/库,但我仍然不知道如何让它工作。我第一次与 Jenkins 合作(在服务器端)。
//编辑:
如果有人也可以分享如何构建覆盖率报告的想法,那就太好了。
提前致谢 :)。
说 Jenkins 和 QUnit 只是难题的一部分。您仍然需要一个 Web 浏览器和一种从 QUnit 结果到磁盘上获取 JUnit 样式 XML 文件的方法。虽然有用于控制众多浏览器的 Selenium 和 Webdriver,但最简单的入门方法是使用 PhantomJS (http://phantomjs.org/)。PhantomJS 是一个基于 webkit 的无头浏览器,仅用于此类任务。
如果您浏览此页面 ( http://code.google.com/p/phantomjs/wiki/WhoUsesPhantomJS ) 的“测试框架”部分,您将看到几个用于运行 QUnit 的脚本(一些支持 JSCoverage)。phantomjs-jscoverage-qunit 脚本看起来会击中您想要击中的所有要点,United 也是如此。两者看起来都需要一些摆弄才能让他们继续前进。
唉,我还没有发现任何方法可以运行 QUnit 测试并为 Selenium、WebDriver 或 PhantomJS 获取 JUnit 输出,无需修改即可工作。
编辑:现在几个月后,我很清楚 webdriver 是 Selenium 的未来(当时我可能应该很清楚,但事实并非如此)。此外,PhantomJS 现在通过 GhostDriver 与 WebDriver 一起使用,因此仅支持 WebDriver 并选择 PhantomJS 作为目标可能是最好的建议。
这个问题发布已经一年多了,但是有一个TestSwarm的Jenkins 插件。我外行的理解是,您可以使用 TestSwarm 在所有主要浏览器上连续运行您的 QUnit 测试。它在GitHub上开源。
披露:我是 Arquillian 项目的贡献者。
您可以使用Arquillian Qunit Extension开源扩展在 Jenkins 上执行您的 QUnit 测试。一般来说,Arquillian Qunit Extension可以很容易地用于持续集成环境中。在这个GitHub存储库中,您可以找到一个真实示例,说明如何使用 Arquillian Qunit Extension在Travis CI无头机器上执行 QUnit 测试。
Arquillian是一个 JBoss 社区项目。
Arquillian Qunit Extension是一个Arquillian扩展,可自动执行 QUnit JavaScript 测试。Arquillian Qunit Extension与 JUnit 测试框架透明集成。
您可以找到有关此README 文件的更多信息。此外,还有一个可以通过 Maven 执行的展示,并展示了如何设置您的测试用例。
使用此扩展,您可以选择在 QUnit 测试执行期间部署存档和/或在单次执行中执行一个或多个 QUnit 测试套件。此外,您可以使用 @InSequence 注释定义 QUnit 测试套件执行顺序。
例如,假设您要执行两个 QUnit 测试套件(qunit-tests-ajax.html 和 qunit-tests-dom.html),并且这些测试套件中包含的 QUnit 测试执行对 Web 服务的 Ajax 请求。显然,在执行测试时,您需要此 Web 服务在主机上。Arquillian 可以自动将 Web 服务部署到容器中。在这种情况下,您的 Arquillian 测试用例将如下所示:
@RunWith(QUnitRunner.class)
@QUnitResources("src/test/resources/assets")
public class QUnitRunnerTestCase {
private static final String DEPLOYMENT = "src/test/resources/archives/ticket-monster.war";
/**
* Creates the Archive which will be finally deployed on the AS.
*
* @return Archive<?>
*/
@Deployment()
public static Archive<?> createDeployment() {
return ShrinkWrap.createFromZipFile(WebArchive.class, new File(DEPLOYMENT));
}
/**
* Execute the qunit-tests-ajax.html QUnit Test Suite.
*/
@QUnitTest("tests/ticketmonster/qunit-tests-ajax.html")
@InSequence(1)
public void qunitAjaxTests() {
// empty body - only the annotations are used
}
/**
* Execute the qunit-random-tests.html QUnit Test Suite.
*/
@QUnitTest("tests/ticketmonster/qunit-random-tests.html")
@InSequence(2)
public void qunitRandomTests() {
// empty body - only the annotations are used
}
}
如果使用真实浏览器:使用 bunyip ( https://github.com/ryanseddon/bunyip ) 在多个浏览器中同时运行 QUnit 测试。它建立在 Yeti 之上,可以提供与 JUnit XML 兼容的报告——因此 Jenkins 可以读取
如果使用 PhantomJS(几乎就像一个真正的基于 WebKit 的无头浏览器):刚刚在https://stackoverflow.com/a/17553889/998008分享了将 QUnit 测试运行器任务添加到 Apache Ant 构建脚本的演练。Jenkins 在从 VCS 拉取项目工作副本时运行脚本。您需要在 Jenkins 项目中指定输出文件的位置。输出与 JUnit XML 兼容。
BlanketJS是一个很棒的代码覆盖工具,可以很好地与 QUnit 配合使用。我已经使用它大约一年了。
对于 Jenkins 集成,我使用 grunt,如果 grunt 任务失败,则退出 0,如果通过,则退出 1,因此它与 Jenkins 完美集成。
没有现有的 Grunt 插件可以同时处理 Blanket 和 QUnit,所以我最终编写了自己的 Grunt 插件。该插件支持“强制执行”最小阈值,否则 Grunt 任务将失败。
我在这里写了一篇包含所有详细信息的博客文章:http: //www.geekdave.com/2013/07/20/code-coverage-enforcement-for-qunit-using-grunt-and-blanket/