2013-12-10 47 views
0

我正在考慮將硒測試的詳細報告生成。我想實現的是類似於robot-framework生成的報告,即:在測試執行過程中調用的每個方法提供成功或失敗的信息。Java/JUnit - 跟蹤每個通過和失敗的方法

所以,如果測試方法是:

@Test 
public void sampleTest() { 
    LoginToApp.logInAsAdmin(); 
    Tree.selectOnTree("something"); 
    Misc.takeScreenshot("file.png"); 
} 

logInAsAdmin()調用一些其他方法:

public static void logInAsAdmin() { 
    logIn(getAdminUserName(), getAdminPass()); 
    Click.clickElementByTestId("test"); 
} 

selectOnTree()也:

public static void selectOnTree(String elementId) { 
    findPathToElement(elementId); 
    Click.clickElementByTestId(elementId); 
} 

,並且例如,單擊樹項時測試失敗(因此,selectOnTree()中的clickElementByTestId()失敗)。我想用所有執行的方法獲得很好的報告,提供哪些方法稱爲它的信息(調用的層次結構很重要)。某事像:

sampleTest - FAILED 
    logInAsAdmin - PASSED 
    logIn - PASSED 
    clickElementByTestId - PASSED 
    selectOnTree - FAILED 
    findPathToElement - PASSED 
    clickElementByTestId - FAILED 

從JUnit的使用TestWatcher是不夠的,因爲它僅提供了測試方法的名稱失敗,並沒有關於後續的方法調用的信息。一種簡單但不方便的方法是簡單地修改每種方法,將其「執行狀態」發送給某種記者。有沒有其他更優雅的方法可以達到同樣的效果?

回答

0

我發現AOP(面向方面​​的編程)是問題的答案。通過使用AspectJ,可以「攔截」每個方法調用,獲取其名稱,參數等,而不會造成代碼混淆。

0

您可以通過實現從org.openqa.selenium.support.events

存在,你可以把打印的必要信息

public class MyWebDriverEventListener implements WebDriverEventListener { 

    public void afterChangeValueOf(WebElement element, WebDriver selenium) {} 
    public void afterClickOn(WebElement element, WebDriver selenium) {} 
    public void afterFindBy(By by, WebElement element, WebDriver selenium) {} 
    public void afterNavigateBack(WebDriver selenium) {} 
    public void afterNavigateForward(WebDriver selenium) {} 
    public void afterNavigateTo(String url, WebDriver selenium) {} 
    public void afterScript(String script, WebDriver selenium) {} 
    public void beforeChangeValueOf(WebElement element, WebDriver selenium) {} 
    public void beforeClickOn(WebElement element, WebDriver selenium) {} 
    public void beforeFindBy(By by, WebElement element, WebDriver selenium) {} 
    public void beforeNavigateBack(WebDriver selenium) {} 
    public void beforeNavigateForward(WebDriver selenium) {} 
    public void beforeNavigateTo(String url, WebDriver selenium) {} 
    public void beforeScript(String script, WebDriver selenium) {} 
    public void onException(Throwable error, WebDriver selenium) {} 
} 

查看方法列表中WebDriverEventListener接口實現類似的東西更多詳情here