java 自定义报告_testng自定义报告

效果图:

b0f1f3d58e568c5117bc9cb82c44e1f6.png

代码:

package com.rpoter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.nio.file.StandardOpenOption;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.List;

import java.util.Map;

import java.util.Set;

import org.testng.IReporter;

import org.testng.ISuite;

import org.testng.ISuiteResult;

import org.testng.ITestContext;

import org.testng.ITestResult;

import org.testng.reporters.HtmlHelper;

import org.testng.xml.XmlSuite;

public class Reporter implements IReporter {

private String reportPath;

/** 手机型号 */

private String Mobile_phone = "小米手机";

/** 测试包名 */

private String package_name = "com.systoon.beijingtoon";

/** 版本号 */

private String versionName = "1.8.1";

/** 手机系统版本 */

private String MobileSystem = "安卓5.6";

/** 通过 */

public int Passed = 0;

/** 失败 */

public int Failed = 0;

/** 跳过 */

public int Skipped = 0;

/**用例总共合计*/

public int CountNum = 0;

/**通过结果*/

public  String PssResuTmp,PassgetName;

/**开始时间*/

public Date StartDate ;

/**结束时间*/

public Date EndDate ;

@Override

public void generateReport(List xmlSuites, List suites, String outputDirectory) {

File htmlReportDir = new File("test-output/Test-report");

if (!htmlReportDir.exists()) {

htmlReportDir.mkdirs();

}

String reportName = formateDate() + ".html";

reportPath = htmlReportDir + "/" + reportName;

File report = new File(htmlReportDir, reportName);

if (report.exists()) {

try {

report.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

StringBuffer sb = new StringBuffer();

String title = "UI自动化测试用例运行结果列表";

sb.append("\n

UI自动化测试报告")

.append(HtmlHelper.getCssString("."))

.append("

\n")

.append("

").append(title).append("

\n")

.append("

.append("

手机品牌名称手机系统版本测试包名版本号通过数失败数跳过合计 开始时间 结束时间 \n");

String res = sb.toString();

try {

Files.write((Paths.get(reportPath)), res.getBytes("utf-8"));

} catch (IOException e) {

e.printStackTrace();

}

StringBuilder sb1 = new StringBuilder();

for (ISuite suite : suites) {

Map tests = suite.getResults();

for (ISuiteResult r : tests.values()) {

ITestContext overview = r.getTestContext();

System.err.println("suite: " + overview.getName());

System.err.println("Stard Time: "+overview.getStartDate());

StartDate = overview.getStartDate();

System.err.println("End Time: "+overview.getEndDate());

EndDate = overview.getEndDate();

CountNum =  overview.getAllTestMethods().length;

System.err.println("all methods num : "+overview.getAllTestMethods().length);

//passed

Passed = overview.getPassedTests().size();

System.err.println("passed: " + overview.getPassedTests().size());

Set passedSet = overview.getPassedTests().getAllResults();

for(ITestResult p : passedSet){

System.err.println("class: " +p.getTestClass().getName() + " | method: "+p.getName());

}

//failed

Failed = overview.getFailedTests().size();

System.err.println("failed: " + overview.getFailedTests().size());

Set failedSet = overview.getFailedTests().getAllResults();

for(ITestResult f : failedSet){

System.err.println("class: " +f.getTestClass().getName()+ " | method: "+f.getName() + " | error: "+ f.getThrowable());

}

//skipped

Skipped = overview.getSkippedTests().size();

System.err.println("skipped: " + overview.getSkippedTests().size());

Set skippedSet = overview.getSkippedTests().getAllResults();

for(ITestResult s : skippedSet){

System.err.println("---- " +s.getName() );

System.err.println(s.getThrowable());

}

System.err.println("==================================");

}

}

String reportN = "/"+formateDate() +"index"+".html";

sb1.append("

"+Mobile_phone+""+MobileSystem+""+versionName+""+package_name+"");

sb1.append("

"+Passed+""+Failed+""+Skipped+""+CountNum+""+StartDate+""+EndDate+"\n");

sb1.append("


")

.append("

") 
 

.append("

.append("

"+"执行用例数:"+CountNum+"")

.append("

")

.append("

详 情

")

.append("

.append("

序列号 状 态用例类名详情信息截图\n");

/**详细通过数*/

for (ISuite suite : suites) {

Map tests = suite.getResults();

for (ISuiteResult r : tests.values()) {

ITestContext overview = r.getTestContext();

CountNum =  overview.getAllTestMethods().length;

Set passedSet = overview.getPassedTests().getAllResults();

int i=0;

for(ITestResult p : passedSet){

System.err.println("class: " +p.getTestClass().getName() + " | method: "+p.getName());

PssResuTmp = p.getTestClass().getName();

PassgetName =p.getName();

sb1.append("

"+i+" 通 过"+PssResuTmp+""+"详情信息:"+PassgetName+" 通过数无需截图");

i++;

}

}

}

sb1.append("

序列号 状 态用例类名详情信息截图\n");

/**详细失败数*/

for (ISuite suite : suites) {

Map tests = suite.getResults();

for (ISuiteResult r : tests.values()) {

ITestContext overview = r.getTestContext();

CountNum =  overview.getAllTestMethods().length;

int i=0;

Set failedSet = overview.getFailedTests().getAllResults();

for(ITestResult f : failedSet){

System.err.println("class: " +f.getTestClass().getName()+ " | method: "+f.getName() + " | error: "+ f.getThrowable());

sb1.append("

"+i+" 失败"+f.getTestClass().getName()+""+"测试方法名: "+f.getName() + " 失败详情: "+ f.getThrowable()+"截图路径:");

i++;

}

}

}

sb1.append("

序列号 状 态用例类名详情信息截图\n");

/**详细跳过数*/

for (ISuite suite : suites) {

Map tests = suite.getResults();

for (ISuiteResult r : tests.values()) {

ITestContext overview = r.getTestContext();

CountNum =  overview.getAllTestMethods().length;

Set skippedSet = overview.getSkippedTests().getAllResults();

int i=0;

for(ITestResult s : skippedSet){

System.err.println("---- " +s.getName() );

System.err.println(s.getThrowable());

sb1.append("

"+i+" 跳过"+s.getName()+""+"详情信息:"+s.getThrowable()+" 该用例跳过没有截图");

i++;

}

}

}

sb1.append("


");

sb1.append("

自动化测试部
\n");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值