Мне нужно:
- смотреть тесты
- собирать информацию
- строить отчет о тестах
Тестыбудет запущен через TeamCity.Я создаю объект TestWatcher для прослушивания результатов теста, и этот TestWatcher включен в каждый класс JUnit, который содержит тесты.У меня был слушатель, который слушал, когда весь комплект был закончен, но мне пришлось добавить это программно.Поскольку сейчас я использую TeamCity для запуска тестов и получения результатов, я считаю, что потерял эту возможность.Меня также попросили подготовить отчет в формате PDF с результатами TeamCity.Все, что мне нужно знать, - это когда тесты заканчиваются, чтобы я мог знать, когда начинать создавать свой отчет.Есть ли способ сделать это, просто используя TestWatcher?
Ниже показано, как выглядит мой TestWatcher на данный момент.BaseTestResult - это просто класс, который содержит результаты тестов и упорядочивает их для облегчения их распечатки.Я также использую Selenium, и переменная драйвера имеет тип WebDriver:
@Rule
public TestWatcher watchman = new TestWatcher() {
private BaseTestResult currentTest;
private long startTime;
private long endTime;
@Override
protected void starting(Description d) {
startTime = System.currentTimeMillis();
currentTest = new BaseTestResult(d);
currentTest.setBrowser(type);
if (d.getAnnotation(TestDescription.class) != null) {
currentTest.setDescription(d.getAnnotation(
TestDescription.class).description());
}
currentTest.setSuite(d.getTestClass().getName());
}
@Override
protected void succeeded(Description d) {
currentTest.setSucceeded(true);
}
@Override
protected void failed(Throwable e, Description d) {
currentTest.setThrowable(e);
}
@Override
protected void finished(Description d) {
endTime = System.currentTimeMillis();
currentTest.setRuntime(endTime - startTime);
String fileName = d.getMethodName() + type + ".png";
File srcFile = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.FILE);
String filePath = "./screens/" + fileName;
try {
FileUtils.copyFile(srcFile, new File(filePath));
currentTest.setScreenshotPath(filePath);
} catch (IOException e) {
log.severe(e.toString());
}
if (currentTest.getSucceeded()) {
BaseListener.getSuiteResult().addPassed(currentTest);
} else {
BaseListener.getSuiteResult().addFailed(currentTest);
}
// Quit, the web driver
if (driver != null) {
driver.quit();
}
}
};