Jenkins + qUnit

5
如何轻松地将Jenkins与qUnit集成?我将使用真实的浏览器(如Firefox和Chrome)来运行测试。我的服务器运行在RedHat 6.1 Linux上。我认为我已经拥有了所有必要的插件/库,但我仍然不知道如何使它工作。这是我第一次在服务器端使用Jenkins。
//编辑:
如果有人能分享如何构建覆盖率报告的想法,那将是非常棒的。
提前致谢:).

在Jenkins中使用QUnit和JsCoverage的问题已经有人提出过了,具体可以参考这个Stack Overflow链接。简单来说,在你的任务的后置构建操作中,勾选“发布JUnit测试结果报告”,并指定你的JUnit XML文件(或它们的文件模式)。 - Martijn Rutten
5个回答

7
说到Jenkins和QUnit只是其中一部分。您仍然需要一个网络浏览器,并且需要一种方法将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测试并获取JUnit输出的方法,无需修改即可在Selenium、Webdriver或PhantomJS中正常工作。
编辑:现在几个月过去了,对我来说,Webdriver是Selenium的未来(当时我可能应该明白这一点,但我没有)。此外,PhantomJS现在通过GhostDriver与WebDriver配合使用,因此仅支持WebDriver并选择PhantomJS作为目标可能是未来的最佳建议。

1

声明:我是Arquillian项目的贡献者。

您可以使用Arquillian Qunit Extension开源扩展程序在Jenkins上执行QUnit测试。一般来说,Arquillian Qunit Extension可以轻松地在持续集成环境中使用。在这个GitHub repo上,您可以找到一个真实的例子,说明如何使用Arquillian Qunit ExtensionTravis CI无头机器上执行QUnit测试。

Arquillian是JBoss社区项目。

Arquillian Qunit Extension是一个Arquillian扩展,可自动化QUnit JavaScript测试。 Arquillian Qunit Extension与JUnit测试框架无缝集成。

您可以在README文件中找到更多信息。此外,还有一个showcase,可以通过Maven执行,并显示如何设置测试用例。

使用此扩展,您可以选择在QUnit测试执行期间部署存档和/或在单个执行中执行一个或多个QUnit测试套件。此外,您可以使用@InSequence注释定义QUnit测试套件执行顺序。

例如,假设您想执行两个QUnit测试套件(qunit-tests-ajax.html和qunit-tests-dom.html),并且这些测试套件中包含的QUnit测试执行Ajax请求到Web服务。显然,在执行测试时,您需要将此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
     }
}

1

这个问题已经发布一年多了,但是有一个Jenkins插件可以用于TestSwarm。我的初步理解是,你可以使用TestSwarm在所有主要浏览器上持续运行QUnit测试。它在GitHub上开源。


0
如果使用真实的浏览器: 可以使用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兼容。

0

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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接