2011-12-13 100 views
2

所以这是我的困境。我一直在使用Selenium,TestNG和iText从自动化测试运行的结果中生成漂亮的PDF报告,但最近我被告知他们不希望竞争库TestNG与JUnit竞争,并被告知开始使用JUnit 。JUnit参数化测试在测试后获取参数

我正在运行这些JUnit测试的参数,我想知道有没有办法在测试运行后/期间访问参数?参数是带有浏览器名称的字符串,用于告诉Selen WebDriver可以获取哪些内容,并且很高兴知道测试在某个浏览器中通过/失败。一旦测试运行完成,JUnit在您可访问的信息中似乎非常有限。

我有一个类,它扩展了junit.framework.TestListener,它侦听每个测试的开始/停止,这里是我可以收集测试信息的地方。

currentTest是类型BaseTestResult这是我写的一个类,只是将测试结果存储在列表中。

import junit.framework.AssertionFailedError; 
import junit.framework.Test; 
import junit.framework.TestListener; 
import junit.framework.TestResult; 
import utilities.reporting.BaseReporting; 
import utilities.reporting.BaseTestResult; 
import utilities.reporting.ResultsPerSuite; 

public class BaseListener implements TestListener { 

    private ResultsPerSuite resultsPerSuite; 
    private BaseReporting baseReporter; 
    private BaseTestResult currentSuite; 
    private BaseTestResult currentTest; 
    private long startTime; 
    private long endTime; 
    private long suiteStartTime; 
    private long suiteEndTime; 

    public BaseListener() { 
     baseReporter = new BaseReporting(); 
     resultsPerSuite = new ResultsPerSuite(); 
     currentTest = new BaseTestResult(null, null); 
    } 

    public void startSuite(Test suite) { 
     suiteStartTime = System.currentTimeMillis(); 
     currentSuite = new BaseTestResult(suite); 
    } 

    @Override 
    public void startTest(Test arg0) { 
     startTime = System.currentTimeMillis(); 
     currentTest = new BaseTestResult(arg0);  
    } 

    @Override 
    public void addError(Test arg0, Throwable arg1) { 
     currentTest.addError(new BaseTestResult(arg0, arg1)); 

    } 

    @Override 
    public void addFailure(Test arg0, AssertionFailedError arg1) { 
     currentTest.addFailed(new BaseTestResult(arg0, arg1)); 

    } 

    @Override 
    public void endTest(Test arg0) { 
     endTime = System.currentTimeMillis(); 
     currentTest.setRuntime(startTime - endTime); 
     // If both empty, then test passed, so add to passed results. 
     if (currentTest.getFailed().isEmpty() 
       && currentTest.getErrors().isEmpty()) { 
      resultsPerSuite.addPassed(currentTest); 
     } else { 
      resultsPerSuite.addFailed(currentTest); 
     } 
    } 

    public void endSuite(TestResult testEventDriver) { 
     suiteEndTime = System.currentTimeMillis(); 
     currentSuite.setRuntime(suiteEndTime - suiteStartTime); 
     resultsPerSuite.setSuite(currentSuite); 

     baseReporter.printToConsole(resultsPerSuite); 

    } 

    /** 
    * @return the allTestResults 
    */ 
    public ResultsPerSuite getAllTestResults() { 
     return resultsPerSuite; 
    } 

} 
+0

我无法帮助您解决您的问题,但我赞赏您使用这些工具。 –

+0

大声笑,谢谢,一点鼓励总是赞赏。 = P –

+0

这很奇怪。为什么使用TestListener,它是JUnit 3,而不是RunListener,它是JUnit 4?您有使用JUnit 3的原因吗?这意味着你无法访问JUnit 4中的所有新东西。 –

回答

1

我不知道如何得到它做你是从TestListener里面找什么不平凡创建自己Runner。但是你可以用TestRule来处理它。

由于您似乎在使用监听器将结果发送到外部服务,因此您可能会有更好的运气,特别是通过与自己的监听器进行通信的TestWatcher进行绑定。它可以访问本地类成员变量,并可以很容易地报告它们。

+0

感谢您的帮助,我不得不介绍一个静态变量,我不是静态变量的粉丝,但它的工作原理。 –