我正在尝试实现org.testng IReporter接口。我的Java并不是那么好,基于我在网上找到的一些例子,我能够创建一个Reporter类。我遇到的问题是如何使用它以及我在哪里调用它以及如何以及传递给它的参数?
public class Reporter实现了IReporter {
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){
ISuiteResult results =suites.get(0).getResults().get("Sanity Suite");
ITestContext context = results.getTestContext();
IResultMap passedTests = context.getPassedTests();
IResultMap failedTests = context.getFailedTests();
// Print all test exceptions...
for( ITestResult r: failedTests.getAllResults()) {
System.out.println( r.getThrowable());
}
}
}
例如,我有这个WebDriver Selenium TestNG测试:
公共类VerifyTest扩展了TestBase {
@Test
public void test1() {
verifyTrue(false);
verifyEquals("pass", "fail");
verifyFalse(true);
}
@Test
public void test2() {
verifyTrue(false);
assertEquals("pass", "fail");
verifyFalse(true);
}
如何在运行结束时使用我的Reporter获取自定义报告???
谢谢!
答案 0 :(得分:1)
只需展开上方的骨架即可在您需要的位置生成结果,.xml,.html,文本文件等...
答案 1 :(得分:1)
David,如果您通过套件部分中的xml调用测试,可以将自定义报告器添加到testng.xml中。
<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>
如果您以编程方式调用它们,则需要通过代码添加它,如文档@ Running TestNG programmatically
如果从命令行调用测试,请参阅this
如果您使用上述任一方式指定,则在所有运行结束时,TestNG将调用此记者。
答案 2 :(得分:1)
我created a project that is an example of generating a customized report。
基本思想是创建一个Listener类并在testing.xml文件中引用它。
<listeners>
<listener class-name="qa.hs.framework.CustomReportListener"/>
</listeners>
然后创建类:
public class CustomReportListener implements IReporter {
@Override
public void generateReport( List<XmlSuite> xmlSuites, List<ISuite> suites,
String outputDirectory ) {
System.out.println();
//Iterating over each suite included in the test
for (ISuite suite : suites) {
//Following code gets the suite name
String suiteName = suite.getName();
//Getting the results for the said suite
Map<String, ISuiteResult> suiteResults = suite.getResults();
for ( ISuiteResult sr : suiteResults.values() ) {
ITestContext tc = sr.getTestContext();
System.out.println("Passed tests for suite '" + suiteName + "' is:" +
tc.getPassedTests().getAllResults().size());
}
CustomReport cr = new CustomReport();
cr.generateReport( xmlSuites, suites, outputDirectory );
...
然后,从该Listener类中,您可以创建一个“Report Writer”类,使用类似的东西创建任意HTML输出:
public class CustomReport extends CustomReportListener
{
private static final Logger LOG = Logger.getLogger( CustomReport.class );
private static final SimpleDateFormat dateFormatter = new SimpleDateFormat(" MMM d 'at' hh:mm a");
private String reportFileName = Constants.reportFileName;
private PrintWriter m_out;
private int m_row;
private Integer m_testIndex;
private int m_methodIndex;
private Scanner scanner;
@Override
public void generateReport( List<XmlSuite> xml, List<ISuite> suites, String outdir ) {
try {
m_out = createWriter( outdir );
}
catch ( IOException e ) {
LOG.error("output file", e);
return;
}
startHtml(m_out);
generateSuiteSummaryReport(suites);
generateMethodSummaryReport(suites);
generateMethodDetailReport(suites);
endHtml(m_out);
m_out.flush();
m_out.close();
}
最后,从“CustomReport”类中,您的“生成报告”方法都可以访问报告中的所有数据,例如:
testContext.getPassedTests()
Map<String, ISuiteResult> r = suite.getResults()
method.getDescription()
method.getTestClass().getName()
ITestResult.SUCCESS
tests.getAllMethods()
overview.getStartDate().getTime()
overview.getIncludedGroups()
etc.
答案 3 :(得分:1)
使用RealTime报告插件可以实现任何正在运行的测试的实时报告的漂亮报告。非常容易使用,现有代码无需修改,详情请访问此github网址RealTimeReport
您可以找到不同TestNg报告基础的详细信息实现
答案 4 :(得分:0)
您可以使用
@Listeners(ReporterClassName.class)
例如: @Listeners(Reporter.class)
公共类VerifyTest扩展了TestBase