Wie Sie sagen, wenn JUnit-Oberflächen, die nur mit einem TestWatcher?
Muss ich:
- Uhr die tests
- Informationen zu sammeln, die
- einen Bericht erstellen, aus der die tests
Werden die tests gestartet werden, über TeamCity. Ich erstelle ein TestWatcher Objekt zu hören, für test-Ergebnisse, und dies TestWatcher ist in jedem der JUnit-Klasse, die tests enthält. Ich hatte ein Zuhörer, die hören würde, wenn die gesamte suite ist fertig, aber ich musste hinzufügen, dass programmgesteuert. Da bin ich jetzt mit TeamCity zum ausführen der tests und Ergebnisse erzielen, ich glaube, ich habe verloren, die Fähigkeit. Ich wurde gebeten, zu produzieren auch ein PDF-Bericht mit der TeamCity Ergebnisse. Alles was ich brauche zu wissen, ist, wenn die tests fertig sind, so kann ich wissen, Wann Sie anfangen den Aufbau meines Berichts. Gibt es trotzdem, um dies zu erreichen, die nur mit einem TestWatcher?
Unten ist das, was meine TestWatcher aussieht wie im moment. BaseTestResult nur eine Klasse enthält, die Ergebnisse der tests, und ordnet Sie in der Reihenfolge ausdrucken zu erleichtern. Ich bin auch mit Selen, und die Treiber-variable ist vom Typ 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();
}
}
};
InformationsquelleAutor Reid Mac | 2012-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun:
Diese Uhren mit der ganzen Klasse statt jeden test. Das bedeutet, dass es gibt Ihnen die Anzahl der tests in einer suite auf den start der suite. Dann, jedes mal, wenn Sie rufen
BaseListener.getSuiteResult().addPassed(currentTest);
oderBaseListener.getSuiteResult().addFailed(currentTest);
können Sie überprüfen, ob Sie bereits Hinzugefügt haben, die Anzahl der tests in einer suite (im Sinne der suite durchgeführt werden).Oder, noch besser,
Wenn Sie mehrere Klassen enthält tests, Sie können erstellen eine AllMyTests Klasse mit allen von denen! Diese AllMyTests Klasse kann dann von JUnit. In diesem Fall, @ClassRule Verhalten, als ein @SuiteRule (die nicht existiert).
Danke für die Antwort, es ist definitiv ein Schritt in die richtige Richtung. Was ist, wenn ich mehrere Klassen? Ich bin der Planung über mehr als eine test-Klasse, und möchte einen Bericht erstellen, aus der die Ergebnisse aller test-Klassen ausführen.
Gonna Bearbeiten Sie die Antwort in einer minute zu beantworten, Ihren Kommentar.
InformationsquelleAutor Petr Janeček
Dieser arbeitete für mich
InformationsquelleAutor Satish