2011-10-13 66 views
5

如何輕鬆整合Jenkins與qUnit?我將使用真正的瀏覽器(如Firefox和Chrome)來運行測試。我的服務器在RedHat 6.1 Linux上運行。我想我都需要插件/庫,但我仍然不知道如何使它工作。我正在與詹金斯第一次合作(在服務器端)。Jenkins + qUnit

//編輯:

這將是美好的,如果有人可以分享想法如何構建覆蓋報告過。

感謝提前:)。

+0

重複的(http://stackoverflow.com/questions/9482493/qunit-jscoverage-jenkings)上QUnit和詹金斯這個問題。簡而言之:在作業的後期構建操作中,選中發佈JUnit測試結果報告並指定您的junit XML文件(或其文件模式)。 –

回答

7

說詹金斯和QUnit只是問題的一部分。您仍然需要一個Web瀏覽器和一種從QUnit結果獲取JUnit樣式XML文件到磁盤的方法。雖然Selenium和Webdriver用於控制衆多瀏覽器,但最簡單的方法是使用PhantomJS(http://phantomjs.org/)。 PhantomJS是一款基於webkit的無頭瀏覽器,適用於這類任務。

如果您瀏覽此頁面的「Test Frameworks」部分(http://code.google.com/p/phantomjs/wiki/WhoUsesPhantomJS),您將看到幾個用於運行QUnit的腳本(部分支持JSCoverage)。 phantomjs-jscoverage-qunit腳本看起來像會擊中你想要擊中的所有主要點,United也是如此。看起來他們需要一些擺弄才能讓他們走。

唉,我還沒有發現運行QUnit的測試並獲得JUnit的輸出,無論是硒,webdriver的,或PhantomJS將只是無需修改任何工作方法。

編輯:現在,幾個月後,它已經成爲我很清楚,webdriver的是硒的未來(大概應該已經很清楚,我回去以後,但它不是)。此外,PhantomJS現在可以通過GhostDriver與WebDriver協同工作,因此僅支持WebDriver並選擇PhantomJS作爲目標可能是最好的建議。

0

如果使用真實瀏覽器: 使用bunyip(https://github.com/ryanseddon/bunyip)在多個瀏覽器中同時運行QUnit測試。它是建立在雪人的頂部,可以提供JUnit的XML兼容報告 - 從而可讀詹金斯

如果使用PhantomJS(無頭的瀏覽器,其作用幾乎像基於一個真實的WebKit): 這裏只是https://stackoverflow.com/a/17553889/998008共享步行通過上將QUnit測試運行器任務添加到Apache Ant構建腳本中。 Jenkins在從VCS提取項目工作副本的同時運行腳本。您需要在Jenkins項目中指定輸出文件的位置。輸出與JUnit XML兼容。

1

這個問題發佈已經過了一年多了,但TestSwarm有個Jenkins plugin。我的外行人的理解是,您可以使用TestSwarm在所有主流瀏覽器中持續運行您的QUnit測試。它開放於GitHub

1

披露:我是的Arquillian項目的貢獻者。

您可以使用Arquillian Qunit Extension開源擴展在Jenkins上執行您的QUnit測試。通常,Arquillian Qunit Extension可以很容易地用於持續集成環境。在這GitHub repo你可以找到一個真實的例子Arquillian Qunit Extension可以用來執行Travis CI無頭機器的QUnit測試。

Arquillian是一個JBoss社區項目。

Arquillian Qunit Extension是一個Arquillian擴展,它自動執行QUnit JavaScript測試。 Arquillian Qunit Extension與JUnit測試框架透明集成。

你可以找到關於此README file更多信息。另外,還有一個可以通過Maven執行的showcase,並顯示如何設置測試用例。

使用這個擴展,你必須在QUnit測試執行部署歸檔和/或在一個單一的執行執行一個或多個QUnit的測試套件的選項。此外,您可以使用@InSequence批註定義QUnit Test Suite執行順序。例如,假設您想要執行兩個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 
    } 
} 
0

BlanketJS是一個神奇的代碼覆蓋工具與QUnit效果很好。我已經使用它大約一年了。

對於詹金斯的整合,我用咕嚕如果繁重的任務失敗,其以0退出,以及1如果通過,因此它與詹金斯完美結合。

有沒有現有的步兵插件處理毛毯和QUnit在一起,所以我結束了寫我自己咕嚕插件。該插件支持最小閾值的「執行」,否則Grunt任務將失敗。

我寫了一篇博客文章在這裏所有的細節:http://www.geekdave.com/2013/07/20/code-coverage-enforcement-for-qunit-using-grunt-and-blanket/