2012-09-16 91 views
14

我有一個雲系統的測試設置,它使用python進程級別控制和junit混合進行內部狀態檢查。從本質上講,我提出了幾個虛擬機作爲雲服務器,然後是作爲雲成員的junit虛擬機,但它驅動測試並檢查內部狀態。我們現有的雲管理內容是由python驅動的,我想保持這一點。從命令行生成JUnit報告

我有一個工作設置,將通過

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests> 

運行JUnit的命令行,但這不會產生一個報告文件。我知道螞蟻能夠生成一個xml報告,但我不想在這個過程中涉及到螞蟻(我已經有足夠的移動部件了)。

有沒有辦法從命令行啓動junit以便生成報告?

理想情況下,我會讓junit測試生成xml報告,python測試生成xml報告,然後將它們合併在一起供我們的CI系統使用。

更新:命令行執行必須支持Windows,Linux和Mac。我們不允許運送外部螞蟻,雖然包裝內部螞蟻可能是一個選項。

+0

Windows或Unix(根據命令行)? –

回答

16

JUnit庫沒有任何XML輸出選項。要實現這樣的事情,你需要編寫你自己的RunListener,它監聽輸出,並在你的情況下寫入XML文件。但是,要以正確的格式獲取XML文件以便它可以被CI系統讀取,我認爲使用ant會更容易,可以通過命令行使用build.xml(JUnitReport) ,或者使用java api:How can i use Apache ANT Programmatically

編輯:最初,我們有四個選項:

  1. 命令行
  2. 使用Ant編程(使用Java API)
  3. 使用XMLJUnitResultFormatter直接與JUnitCore
  4. 創建使用Ant一個自定義的RunListener,它可以生成正確的XML輸出。

鑑於由OP添加的限制,我們不能使用ant命令行,從而消除1

在螞蟻junit任務更加緊密地看後,這似乎是不可能使用這與JUnitCore(添加一個TestListener),因爲ant直接使用測試類的名稱,所以你不能做一個橋類。從XMLJUnitResultFormatter.java

private void formatError(String type, Test test, Throwable t) { 
    ... 
    nested.setAttribute(ATTR_TYPE, t.getClass().getName()); 

    String strace = JUnitTestRunner.getFilteredTrace(t); 
    Text trace = doc.createTextNode(strace); 
    nested.appendChild(trace); 
} 

這消除3.

調用Ant編程,通過Java API。我找不到任何最新的文檔。這似乎很難。因此,最後,我會使用XMLJUnitResultFormatter中的代碼作爲基礎來執行4,一個自定義RunListener。然後,我會在github上發佈它。com,所以這個問題可以正確回答:-)

+0

對不起,我似乎無法使換行符出現...... 如果我理解正確的話,你的建議,我應該: 1)包括螞蟻罐子 2)編寫自定義的主 3)添加螞蟻罐子的RunListener到JUnitCore實例 4)讓它翻轉? 或者是有形式 1)的較短版本包括螞蟻罐子 2)更直接調用它,它會處理JUnitCore部分? – Matt

+1

Ant調用junit,它運行測試。所以你會提供一個build.xml,並調用ant。最簡單的方法是確保ant安裝在系統的某個位置,然後從命令行執行。而不是java ...你會有螞蟻... –

+1

唉,需要安裝ant是我不能做的事情之一。這條消息從最高處下來。 – Matt