【问题标题】:Jenkins + qUnit詹金斯 + qUnit
【发布时间】:2011-10-13 15:34:22
【问题描述】:

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

//编辑:

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

提前致谢:)。

【问题讨论】:

  • this question on QUnit and Jenkins 的副本。简而言之:在您的工作的构建后操作中,检查发布 JUnit 测试结果报告并指定您的 junit XML 文件(或其文件模式)。

标签: linux continuous-integration jenkins qunit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      披露:我是 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 file 上找到更多信息。此外,还有一个showcase 可以通过 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
           }
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          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/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多