zoukankan      html  css  js  c++  java
  • TestNg的IReporter接口的使用

    IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不能自已定制一份呢?testng的IReporter接口就接供了这样的功能,我们只需要实现这个接口,并加上监听,就能拿到所有的信息了,你可以把这些信息存数据库,或者自已生成一个html,亦或者写在EXCEL里啊等等,都可以,下面给出IReporter接口的实现方式:

    package com.demo;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.testng.IReporter;
    import org.testng.IResultMap;
    import org.testng.ISuite;
    import org.testng.ISuiteResult;
    import org.testng.ITestContext;
    import org.testng.ITestResult;
    import org.testng.xml.XmlSuite;
    
    public class NewReport implements IReporter{
    	
    	@Override
    	public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
    		List<ITestResult> list = new ArrayList<ITestResult>();
    		for (ISuite suite : suites) {			
    			Map<String, ISuiteResult> suiteResults = suite.getResults();
    			for (ISuiteResult suiteResult : suiteResults.values()) {
    				ITestContext testContext = suiteResult.getTestContext();			
    				IResultMap passedTests = testContext.getPassedTests();
    				IResultMap failedTests = testContext.getFailedTests();
    				IResultMap skippedTests = testContext.getSkippedTests();
    				IResultMap failedConfig = testContext.getFailedConfigurations();	
    				list.addAll(this.listTestResult(passedTests));
    				list.addAll(this.listTestResult(failedTests));
    				list.addAll(this.listTestResult(skippedTests));
    				list.addAll(this.listTestResult(failedConfig));
    			}			
    		}
    		this.sort(list);
    		this.outputResult(list, outputDirectory+"/test.txt");
    	}
    	
    	private ArrayList<ITestResult> listTestResult(IResultMap resultMap){
    		Set<ITestResult> results = resultMap.getAllResults();		
    		return new ArrayList<ITestResult>(results);
    	}
    	
    	private void sort(List<ITestResult> list){
    		Collections.sort(list, new Comparator<ITestResult>() {
    			@Override
    			public int compare(ITestResult r1, ITestResult r2) {
    				if(r1.getStartMillis()>r2.getStartMillis()){
    					return 1;
    				}else{
    					return -1;
    				}				
    			}
    		});
    	}
    	
    	private void outputResult(List<ITestResult> list, String path){		
    		try {
    			BufferedWriter output = new BufferedWriter(new FileWriter(new File(path)));	
    			StringBuffer sb = new StringBuffer();
    			for (ITestResult result : list) {
    				if(sb.length()!=0){
    					sb.append("
    ");
    				}
    				sb.append(result.getTestClass().getRealClass().getName())
    				  .append(" ")
    				  .append(result.getMethod().getMethodName())
    				  .append(" ")
    				  .append(this.formatDate(result.getStartMillis()))
    				  .append(" ")
    				  .append(result.getEndMillis()-result.getStartMillis())
    				  .append("毫秒 ")
    				  .append(this.getStatus(result.getStatus()));
    			}
    			output.write(sb.toString());
    			output.flush();
    			output.close();
    		} catch (IOException e) {			
    			e.printStackTrace();
    		}
    		
    	}
    	
    	private String getStatus(int status){
    		String statusString = null;
    		switch (status) {		
    		case 1:
    			statusString = "SUCCESS";
    			break;
    		case 2:
    			statusString = "FAILURE";
    			break;
    		case 3:
    			statusString = "SKIP";
    			break;
    		default:			
    			break;
    		}
    		return statusString;
    	}
    	
    	private String formatDate(long date){      
           SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           return formatter.format(date);
    	}
    
    }
    

     代码简单易懂,下面给一个测试类:

    package com.demo;
    
    import org.testng.Assert;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Listeners;
    import org.testng.annotations.Test;
    
    @Listeners({com.demo.NewReport.class})
    public class Test15 {
    	
    	@DataProvider
    	public Object[][] dataProvider(){
    		return new Object[][]{{1},{2}};
    	}
    	
    	@Test(dataProvider="dataProvider")
    	public void testAssert1(int a){	
    		Assert.assertEquals(1, a);
    	}	
    	
    	@Test
    	public void testAssert2(){	
    		Assert.assertEquals("2", "2");	
    	}
    
    }
    

     运行后,大家打开test-output文件夹,看是不是多了个test.txt的文件夹。截图如下:

  • 相关阅读:
    为什么Java的main方法必须是public static void?
    2. 直接插入、折半插入、希尔排序及其比较(插入类排序)
    1. 冒泡与选择排序及其比较
    0.排序介绍与性能度量
    (十)更快的排序算法(归并、快排、基数)
    (九)排序(选择、插入、希尔)
    (八)递归
    (七)栈的三种实现
    (六)栈的规则及应用
    (五)如何写测试类
  • 原文地址:https://www.cnblogs.com/zhangfei/p/4514697.html
Copyright © 2011-2022 走看看