Java 创建自定义TestNG报告-WebDriver
我正在尝试实现org.testng IReporter接口。我的Java不是很好,基于我在网上找到的一些示例,我能够创建一个Reporter类。我遇到的问题是如何使用它,在哪里调用它,以及如何和哪些参数传递给它 公共类报告器实现了IReporter{Java 创建自定义TestNG报告-WebDriver,java,selenium,report,webdriver,testng,Java,Selenium,Report,Webdriver,Testng,我正在尝试实现org.testng IReporter接口。我的Java不是很好,基于我在网上找到的一些示例,我能够创建一个Reporter类。我遇到的问题是如何使用它,在哪里调用它,以及如何和哪些参数传递给它 公共类报告器实现了IReporter{ public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){ ISuiteR
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());
}
}
我将如何使用我的Reporter在跑步结束时获得定制报告
谢谢!只需在上面展开框架,即可在需要的地方生成结果,.xml、.html、文本文件等。只需在上面展开框架,即可在需要的地方生成结果,.xml、.html、文本文件等。David,如果您通过在套件部分使用xml
<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>
如果您以编程方式调用这些,那么您需要通过您的代码添加它,如文档所示@
如果从命令行调用测试,请参阅
如果您以上述任一方式指定,则TestNG将在所有运行结束时调用此报告程序。David,如果您通过套件部分中的xml调用测试,则可以将自定义报告程序添加到TestNG.xml中
<listeners>
<listener class-name="yourpackage.Reporter"/> </listeners>
如果您以编程方式调用这些,那么您需要通过您的代码添加它,如文档所示@
如果从命令行调用测试,请参阅
如果您以上述任一方式指定,TestNG将在所有运行结束时调用此报告程序。I
基本思想是创建一个侦听器类并在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 );
...
公共类CustomReportListener实现IReporter{
@凌驾
公共无效生成器报告(列表xmlSuites、列表suites、,
字符串输出目录){
System.out.println();
//迭代测试中包含的每个套件
适用于(ISuite:suites){
//下面的代码获取套件名称
字符串suiteName=suite.getName();
//获取上述套件的结果
Map suiteResults=suite.getResults();
对于(ISuiteResult sr:suiteResults.values()){
ITestContext tc=sr.getTestContext();
System.out.println(“通过了套件测试”+“suiteName+”是:+
tc.getPassedTests().getAllResults().size());
}
CustomReport cr=新的CustomReport();
cr.generateReport(xmlSuites,suites,outputDirectory);
...
然后,您可以从该侦听器类创建一个“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扩展了CustomReportListener
{
私有静态最终记录器LOG=Logger.getLogger(CustomReport.class);
私有静态最终SimpleDataFormat dateFormatter=新SimpleDataFormat(“MMM d'在'hh:mm a');
私有字符串reportFileName=Constants.reportFileName;
私人印刷作家m_out;
私人国际摩乌街;
私有整数m_testIndex;
私有int m_方法索引;
私人扫描仪;
@凌驾
公共void生成器报告(列表xml、列表套件、字符串outdir){
试一试{
m_out=createWriter(outdir);
}
捕获(IOE异常){
LOG.error(“输出文件”,e);
回来
}
startHtml(m_out);
生成套件摘要报告(套件);
生成方法摘要报告(套件);
生成方法跟踪报告(套件);
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.
testContext.getPassedTests()
Map r=suite.getResults()
方法getDescription()
方法。getTestClass().getName()
成功
tests.getAllMethods()
概述.getStartDate().getTime()
概述.getIncludedGroups()
等
I
基本思想是创建一个侦听器类并在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 );
...
公共类CustomReportListener实现IReporter{
@凌驾
公共无效生成器报告(列表xmlSuites、列表suites、,
字符串输出目录){
System.out.println();
//迭代测试中包含的每个套件
适用于(ISuite:suites){
//下面的代码获取套件名称
字符串suiteName=suite.getName();
//获取上述套件的结果
Map suiteResults=suite.getResults();
对于(ISuiteResult sr:suiteResults.values()){
ITestContext tc=sr.getTestContext();
System.out.println(“通过了套件测试”+“suiteName+”是:+
tc.getPassedTests().getAllResults().size());
}
CustomReport cr=新的CustomReport();
cr.generateReport(xmlSuites,suites,outputDirectory);
...
然后,您可以从该侦听器类创建一个“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扩展了CustomReportListener
{
私有静态最终记录器LOG=Logger.getLogger(CustomReport.class);
私有静态最终SimpleDataFormat dateFormatter=新SimpleDataFormat(“MMM d'在'hh:mm a');
私有字符串reportFileName=Constants.reportFileName;
私人印刷作家m_out;
私人国际摩乌街;
私有整数m_testIndex;
私有int m_方法索引;
私人扫描仪;
@凌驾
公共无效生成器报告(列表xm)