2013-12-10 32 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