2014-05-21 27 views
1

我想實現向寫入日誌文件與Log4j如何在測試失敗時寫入日誌文件,使用Log4j

我已經找到一個簡單的解決方案 - 環繞測試體try - catch

@Test(groups = "GMAIL_PAGE") 
public void testAllMailLink() { 
    try { 
     List<WebElement> allMessages = page.takeAllMessage(); 
     page.clickInboxLink(); 
     List<WebElement> inboxMessages = page.takeInboxMessage(); 
     page.clickDraftLink(); 
     List<WebElement> draftMessages = page.takeDraftMessage(); 

     Assert.assertTrue(allMessages.containsAll(inboxMessages), 
       "All messages doesn't contains all inbox messages"); 
     Assert.assertTrue(allMessages.containsAll(draftMessages), 
       "All messages doesn't contains all draft messages"); 
     log.info("test is passed"); 
    } catch (Exception e) { 
     log.error(e); 
    } 
} 

但它也有一些缺點 - 這個測試總是通過,即使它失敗。

如果我在我的機器上工作並能看到控制檯,這沒關係。但是當這個測試被推送到持續集成服務器時該怎麼辦?

當測試失敗時,是否存在任何其他方式將信息寫入日誌文件?

回答

3

添加Assert.fail()下方的log.error(e)

catch (Exception e) { 
    log.error(e); 
    Assert.fail(); 
} 

順便說一句,你打電話Logger#error(Object),它採用e.toString()。在這種情況下,最好是使用描述性的消息,然後通過例外來獲取各自的堆棧跟蹤:

catch (Exception e) { 
    log.error("Some descriptive message should go here.", e); 
    Assert.fail("Some descriptive message should go here as well."); 
} 
+0

您能否提供一些其他的方法登錄電子測試失敗? –

+0

@nazar_art你如何運行你的測試? –

+0

使用testNG在Intellij - 'Cntrl' +'Shift' +'F10'。 –