package com.tester.config;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.ResourceCDN;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.model.TestAttribute;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.ChartLocation;
import com.aventstack.extentreports.reporter.configuration.Theme;
import org.testng.*;
import org.testng.xml.XmlSuite;
import java.io.File;
import java.util.*;
public class ExtentTestNGIReporterListener implements IReporter {
//生成的路径以及文件名
private static final String OUTPUT_FOLDER = "test-output/";
private static final String FILE_NAME = "index.html";
private ExtentReports extent;
@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
init();
boolean createSuiteNode = false;
if(suites.size()>1){
createSuiteNode=true;
}
for (ISuite suite : suites) {
Map<String, ISuiteResult> result = suite.getResults();
//如果suite里面没有任何用例,直接跳过,不在报告里生成
if(result.size()==0){
continue;
}
//统计suite下的成功、失败、跳过的总用例数
int suiteFailSize=0;
int suitePassSize=0;
int suiteSkipSize=0;
ExtentTest suiteTest=null;
//存在多个suite的情况下,在报告中将同一个一个suite的测试结果归为一类,创建一级节点。
if(createSuiteNode){
suiteTest = extent.createTest(suite.getName()).assignCategory(suite.getName());
}
boolean createSuiteResultNode = false;
if(result.size()>1){
createSuiteResultNode=true;
}
for (ISuiteResult r : result.values()) {
ExtentTest resultNode;
ITestContext context = r.getTestContext();
if(createSuiteResultNode){
//没有创建suite的情况下,将在SuiteResult的创建为一级节点,否则创建为suite的一个子节点。
if( null == suiteTest){
resultNode = extent.createTest(r.getTestContext().getName());
}else{
resultNode = suiteTest.createNode(r.getTestContext().getName());
}
}else{
resultNode = suiteTest;
}
if(resultNode != null){
resultNode.getModel().setName(suite.getName()+" : "+r.getTestContext().getName());
if(resultNode.getModel().hasCategory()){
resultNode.assignCategory(r.getTestContext().getName());
}else{
resultNode.assignCategory(suite.getName(),r.getTestContext().getName());
}
resultNode.getModel().setStartTime(r.getTestContext().getStartDate());
resultNode.getModel().setEndTime(r.getTestContext().getEndDate());
//统计SuiteResult下的数据
int passSize = r.getTestContext().getPassedTests().size();
int failSize = r.getTestContext().getFailedTests().size();
int skipSize = r.getTestContext().getSkippedTests().size();
suitePassSize += passSize;
suiteFailSize += failSize;
suiteSkipSize += skipSize;
if(failSize>0){
resultNode.getModel().setStatus(Status.FAIL);
}
resultNode.getModel().setDescription(String.format("Pass: %s ; Fail: %s ; Skip: %s ;",passSize,failSize,skipSize));
}
buildTestNodes(resultNode,context.getFailedTests(), Status.FAIL);
buildTestNodes(resultNode,context.getSkippedTests(), Status.SKIP);
buildTestNodes(resultNode,context.getPassedTests(), Status.PASS);
}
if(suiteTest!= null){
suiteTest.getModel().setDescription(String.format("Pass: %s ; Fail: %s ; Skip: %s ;",suitePassSize,suiteFailSize,suiteSkipSize));
if(suiteFailSize>0){
suiteTest.getModel().setStatus(Status.FAIL);
}
}
}
// for (String s : Reporter.getOutput()) {
// extent.setTestRunnerOutput(s);
// }
extent.flush();
}
private void init() {
//文件夹不存在的话进行创建
File reportDir= new File(OUTPUT_FOLDER);
if(!reportDir.exists()&& !reportDir .isDirectory()){
reportDir.mkdir();
}
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
// 设置静态文件的DNS
//怎么样解决cdn.rawgit.com访问不了的情况
htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
htmlReporter.config().setDocumentTitle("api自动化测试报告");
htmlReporter.config().setReportName("api自动化测试报告");
htmlReporter.config().setChartVisibilityOnOpen(true);
htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
htmlReporter.config().setTheme(Theme.STANDARD);
htmlReporter.config().setCSS(".node.level-1 ul{ display:none;} .node.level-1.active ul{display:block;}");
extent = new ExtentReports();
extent.attachReporter(htmlReporter);
extent.setReportUsesManualConfiguration(true);
}
private void buildTestNodes(ExtentTest extenttest, IResultMap tests, Status status) {
//存在父节点时,获取父节点的标签
String[] categories=new String[0];
if(extenttest != null ){
List<TestAttribute> categoryList = extenttest.getModel().getCategoryContext().getAll();
categories = new String[categoryList.size()];
for(int index=0;index<categoryList.size();index++){
categories[index] = categoryList.get(index).getName();
}
}
ExtentTest test;
if (tests.size() > 0) {
//调整用例排序,按时间排序
Set<ITestResult> treeSet = new TreeSet<ITestResult>(new Comparator<ITestResult>() {
@Override
public int compare(ITestResult o1, ITestResult o2) {
return o1.getStartMillis()<o2.getStartMillis()?-1:1;
}
});
treeSet.addAll(tests.getAllResults());
for (ITestResult result : treeSet) {
Object[] parameters = result.getParameters();
String name="";
//如果有参数,则使用参数的toString组合代替报告中的name
for(Object param:parameters){
name+=param.toString();
}
if(name.length()>0){
if(name.length()>50){
name= name.substring(0,49)+"...";
}
}else{
name = result.getMethod().getMethodName();
}
if(extenttest==null){
test = extent.createTest(name);
}else{
//作为子节点进行创建时,设置同父节点的标签一致,便于报告检索。
test = extenttest.createNode(name).assignCategory(categories);
}
//test.getModel().setDescription(description.toString());
//test = extent.createTest(result.getMethod().getMethodName());
for (String group : result.getMethod().getGroups())
test.assignCategory(gr
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JAVA接口自动化测试MyBatis+MySQL实现用例管理.zip (80个子文件)
JAVA接口自动化测试MyBatis+MySQL实现用例管理
AutoTest2
AutoTest2.iml 3KB
pom.xml 3KB
src
test
java
main
resources
mapper
SQLMapper.xml 3KB
moco-runner-0.11.0-standalone.jar 6.12MB
userManager.json 3KB
application.properties 309B
databaseConfig.xml 1KB
testng.xml 1KB
java
com
tester
utils
DatabaseUtil.java 812B
ConfigFile.java 1KB
cases
GetUserInfoListTest.java 3KB
LoginTest.java 3KB
GetUserInfoTest.java 3KB
AddUserTest.java 3KB
UpdateUserInfoTest.java 3KB
model
GetUserListCase.java 193B
UpdateUserInfoCase.java 302B
GetUserInfoCase.java 140B
LoginCase.java 204B
User.java 644B
AddUserCase.java 278B
InterfaceName.java 118B
config
ExtentTestNGIReporterListener.java 9KB
TestConfig.java 697B
test-output
index.html 14KB
.idea
uiDesigner.xml 9KB
libraries
Maven__org_testng_testng_6_10.xml 470B
Maven__org_xerial_sqlite_jdbc_3_8_11_1.xml 533B
Maven__mysql_mysql_connector_java_5_1_6.xml 555B
Maven__org_apache_httpcomponents_httpcore_4_1_2.xml 551B
Maven__commons_codec_commons_codec_1_4.xml 524B
Maven__org_mongodb_bson_3_0_4.xml 467B
Maven__org_mongodb_mongodb_driver_3_0_4.xml 537B
Maven__org_apache_httpcomponents_httpmime_4_5_2.xml 551B
Maven__com_aventstack_extentreports_3_0_6.xml 542B
Maven__org_apache_httpcomponents_httpclient_4_1_2.xml 565B
Maven__org_mongodb_mongodb_driver_core_3_0_4.xml 572B
Maven__org_jsoup_jsoup_1_8_3.xml 466B
Maven__org_json_json_20170516.xml 476B
Maven__org_projectlombok_lombok_1_16_14.xml 519B
Maven__org_freemarker_freemarker_2_3_23.xml 528B
Maven__com_beust_jcommander_1_48.xml 494B
Maven__org_mybatis_mybatis_3_4_4.xml 488B
Maven__com_google_guava_guava_20_0.xml 487B
Maven__com_relevantcodes_extentreports_2_41_1.xml 561B
Maven__commons_logging_commons_logging_1_1_1.xml 560B
Maven__com_vimalselvam_testng_extentsreport_1_3_1.xml 595B
workspace.xml 54KB
misc.xml 439B
compiler.xml 643B
modules.xml 258B
target
classes
mapper
SQLMapper.xml 3KB
moco-runner-0.11.0-standalone.jar 6.12MB
userManager.json 3KB
application.properties 309B
databaseConfig.xml 1KB
testng.xml 1KB
com
tester
utils
DatabaseUtil.class 1003B
ConfigFile.class 2KB
cases
GetUserInfoListTest.class 4KB
AddUserTest.class 3KB
GetUserInfoTest.class 4KB
UpdateUserInfoTest.class 4KB
LoginTest.class 4KB
model
LoginCase.class 2KB
User.class 4KB
InterfaceName.class 1KB
AddUserCase.class 4KB
UpdateUserInfoCase.class 4KB
GetUserInfoCase.class 2KB
GetUserListCase.class 3KB
config
ExtentTestNGIReporterListener.class 10KB
TestConfig.class 1KB
ExtentTestNGIReporterListener$1.class 1KB
AutoTest2-1.0-SNAPSHOT.jar 5.5MB
archive-tmp
maven-status
maven-compiler-plugin
compile
default-compile
createdFiles.lst 0B
inputFiles.lst 1KB
testCompile
default-testCompile
inputFiles.lst 0B
AutoTest2-1.0-SNAPSHOT-jar-with-dependencies.jar 22.5MB
maven-archiver
pom.properties 109B
generated-sources
annotations
共 80 条
- 1
资源评论
度假的小鱼
- 粉丝: 8312
- 资源: 58
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功