Listeners
: For implementing a listener class, the class has to implement the
org.testng.ITestListener interface. These classes are notified at runtime by
TestNG when the test starts, finishes, fails, skips, or passes.
Reporters
:
For implementing a reporting class, the class has to implement an
org.testng.IReporter interface. These classes are called when the whole suite
run ends. The object containing the information of the whole test run is passed
to this class when called.
The results of the test run are created in a file
called index.html in the directory specified when launching SuiteRunner. This file points to various other HTML and
text files that contain the result of the entire test run. You can see a typical example here.
It's very easy to generate your own reports with
TestNG with Listeners and Reporters:
Listeners implement the interface
org.testng.ITestListener and are notified in real time of when a test starts,
passes, fails, etc...
Reporters implement the interface
org.testng.IReporter and are notified when all the suites have been run by
TestNG. The IReporter instance receives a list of objects that describe the
entire test run.
For example, if you want to generate a PDF report of
your test run, you don't need to be notified in real time of the test run so
you should probably use an IReporter. If you'd like to write a real-time
reporting of your tests, such as a GUI with a progress bar or a text reporter
displaying dots (".") as each test is invoked (as is explained
below), ITestListener is your best choice.
Here is a listener that displays a "." for
each passed test, a "F" for each failure and a "S" for each
skip:
public class DotTestListener extends
TestListenerAdapter {
private int
m_count = 0;
@Override
public void
onTestFailure(ITestResult tr) {
log("F");
}
@Override
public void
onTestSkipped(ITestResult tr) {
log("S");
}
@Override
public void
onTestSuccess(ITestResult tr) {
log(".");
}
private void
log(String string) {
System.out.print(string);
if
(++m_count % 40 == 0) {
System.out.println("");
}
}
}
In this example, I chose to extend
TestListenerAdapter, which implements ITestListener with empty methods, so I
don't have to override other methods from the interface that I have no interest
in. You can implement the interface directly if you prefer.
java -classpath testng.jar;%CLASSPATH%
org.testng.TestNG -listener org.testng.reporters.DotTestListener
test\testng.xml
and the output:
TestNG JDK 1.5
Total tests run: 226, Failures: 0, Skips: 0
Note that when you use -listener, TestNG will
automatically determine the type of listener you want to use.
The org.testng.IReporter interface only has one
method:
view
sourceprint
public void generateReport(List<ISuite>
suites, String outputDirectory)
Reporters implement the interface
org.testng.IReporter and are notified when all the suites have been run by
TestNG. The IReporter instance receives a list of objects that describe the
entire test run.
For example, if you want to generate a PDF report of
your test run, you don't need to be notified in real time of the test run so
you should probably use an IReporter. If you'd like to write a real-time
reporting of your tests, such as a GUI with a progress bar or a text reporter
displaying dots (".") as each test is invoked (as is explained
below), ITestListener is your best choice.
Here is a listener that displays a "." for
each passed test, a "F" for each failure and a "S" for each
skip:
public class DotTestListener extends
TestListenerAdapter {
private int
m_count = 0;
@Override
public void
onTestFailure(ITestResult tr) {
log("F");
}
@Override
public void
onTestSkipped(ITestResult tr) {
log("S");
}
@Override
public void
onTestSuccess(ITestResult tr) {
log(".");
}
private void
log(String string) {
System.out.print(string);
if
(++m_count % 40 == 0) {
System.out.println("");
}
}
}
In this example, I chose to extend
TestListenerAdapter, which implements ITestListener with empty methods, so I
don't have to override other methods from the interface that I have no interest
in. You can implement the interface directly if you prefer.
java -classpath testng.jar;%CLASSPATH%
org.testng.TestNG -listener org.testng.reporters.DotTestListener
test\testng.xml
and the output:
TestNG
JDK 1.5
Total tests run: 226, Failures: 0, Skips: 0
Note that when you use -listener, TestNG will
automatically determine the type of listener you want to use.
Logging
Reporters
The org.testng.IReporter interface only has one
method:
public void generateReport(List<ISuite>
suites, String outputDirectory)
This method will be invoked by TestNG when all the
suites have been run and you can inspect its parameters to access all the
information on the run that was just completed.
JUnitReports
TestNG contains a listener that takes the TestNG
results and outputs an XML file that can then be fed to JUnitReport. Here is an
example, and the ant task to create this report:
<target name="reports">
<junitreport todir="test-report">
<fileset dir="test-output">
<include name="*/*.xml"/>
</fileset>
<report
format="noframes"
todir="test-report"/>
</junitreport>
</target>
Note: a
current incompatibility between the JDK 1.5 and JUnitReports prevents the frame
version from working, so you need to specify "noframes" to get this
to work for now.
No comments:
Post a Comment