testng自定义报告
效果图:
代码:
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 P***esuTmp,PassgetName;
/**开始时间*/
public Date StartDate ;
/**结束时间*/
public Date EndDate ;
@Override
public void generateReport(List
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
.append(HtmlHelper.getCssString("."))
.append("
\n").append("
").append(title).append("
\n").append("
手机品牌名称 | 手机系统版本 | 测试包名 | 版本号 | 通过数 | 失败数 | 跳过 | 合计 | 开始时间 | 结束时间 | "+Mobile_phone+" | "+MobileSystem+" | "+versionName+" | "+package_name+" | ");"+Passed+" | "+Failed+" | "+Skipped+" | "+CountNum+" | "+StartDate+" | "+EndDate+" | \n");
---|
")
.append("
").append("
"+"执行用例数:"+CountNum+" |
---|
.append("
详 情
").append("
序列号 | 状 态 | 用例类名 | 详情信息 | 截图 |
---|---|---|---|---|
"+i+" | 通 过 | "+P***esuTmp+" | "+"详情信息:"+PassgetName+" | 通过数无需截图 |
序列号 | 状 态 | 用例类名 | 详情信息 | 截图 |
"+i+" | 失败 | "+f.getTestClass().getName()+" | "+"测试方法名: "+f.getName() + " 失败详情: "+ f.getThrowable()+" | 截图路径: |
序列号 | 状 态 | 用例类名 | 详情信息 | 截图 |
"+i+" | 跳过 | "+s.getName()+" | "+"详情信息:"+s.getThrowable()+" | 该用例跳过没有截图 |
");
sb1.append("
自动化测试部String res1 = sb1.toString();
try {
Files.write((Paths.get(reportPath)), res1.getBytes("utf-8"), StandardOpenOption.APPEND);
FileWriter writer = new FileWriter(".//test-output//results.txt", false);
writer.write(Passed+":");
writer.write(Failed+":");
writer.write(Skipped+"");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String formateDate() {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
return sf.format(date);
}
}