5

如何轻松地将 Jenkins 与 qUnit 集成?我将使用真正的浏览器(如 firefox 和 chrome)来运行测试。我的服务器在 RedHat 6.1 Linux 上运行。我想我有所有需要的插件/库,但我仍然不知道如何让它工作。我第一次与 Jenkins 合作(在服务器端)。

//编辑:

如果有人也可以分享如何构建覆盖率报告的想法,那就太好了。

提前致谢 :)。

4

5 回答 5

7

说 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 作为目标可能是最好的建议。

于 2012-07-13T03:27:57.133 回答
1

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

于 2013-07-18T20:10:39.370 回答
1

披露:我是 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
     }
}
于 2013-08-15T23:20:04.233 回答
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 兼容。

于 2013-07-12T10:43:44.863 回答
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/

于 2013-08-22T19:05:52.767 回答