【发布时间】:2012-01-19 09:25:37
【问题描述】:
所以这是我的困境。我一直在使用 Selenium、TestNG 和 iText 从自动测试运行的结果中生成漂亮的 PDF 报告,但我最近被告知他们不想要竞争库 TestNG 与 JUnit,并被告知开始使用 JUnit .
我正在使用参数运行这些 JUnit 测试,我想知道有没有办法在测试运行之后/期间访问参数?参数是带有浏览器名称的字符串,用于告诉 selenium 要获取哪个 WebDriver,并且很高兴知道某个浏览器中的测试通过/失败。一旦测试运行完成,您可以访问的信息似乎非常有限。
我有一个扩展 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;
}
}
【问题讨论】:
-
我无法帮助您解决您的问题,但我赞赏您使用这些工具。
-
大声笑,谢谢,一点鼓励总是很感激的。 =P
-
这很奇怪。为什么要使用 JUnit 3 的 TestListener,而不是 JUnit 4 的 RunListener?您使用 JUnit 3 有什么原因吗?这意味着您无法访问 JUnit 4 中的所有新内容。
-
我很着急,所以我使用了想到的第一件事。不过我会调查 RunListener。
标签: java unit-testing parameters selenium junit