自定义testng Report

package com.report;

import java.sql.*;
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;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
 
public class Report implements IReporter{
    static String mySqlUrl= GlobalSettings.MySqlUrl;
    static String mySqlUserName=GlobalSettings.mySqlUserName;    
    static String mySqlPassword=GlobalSettings.mySqlPassword;     
    
    @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);
        setPrjName();
        this.outputResult(list, outputDirectory+"/test.txt");
    }

    public void setPrjName() {
//        GlobalSettings.REPORT_PRJ_NAME = "test";
    }

    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){      
        Connection conn=getConn();
        String projectName = GlobalSettings.REPORT_PRJ_NAME;
        String strInsert="";
        strInsert = "insert into test_log(ProjectName,ModuleName,TestName,BeginTime,EndTime,LastTime,Status,Description,BatchNo) values(?,?,?,?,?,?,?,?,?)";
        try {
            String date = new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
            String batchNo = date;
            Statement sta = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = sta.executeQuery("SELECT BatchNo from test_log WHERE ProjectName = '" + projectName + "' AND BatchNo like '" + date + "%' ORDER BY BatchNo DESC LIMIT 1");
            resultSet.last();
            int rowCount = resultSet.getRow();
            resultSet.first();
            if (1 == rowCount){
                String dbBatchNo = resultSet.getString(1);
                if (dbBatchNo.indexOf("_") != -1){
                    String str = dbBatchNo.split("_")[1];
                    if (!str.equals("")){
                        try{
                            batchNo = batchNo + "_" + addZeroToIntStr(Integer.parseInt(str) + 1,3);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }else {
                    batchNo = batchNo + "_" + addZeroToIntStr(1, 3);
                }
            }
            PreparedStatement prest = (PreparedStatement) conn.prepareStatement(strInsert);
            for (ITestResult result : list) {
                prest.setString(1, projectName);
                prest.setString(2, result.getMethod().getXmlTest().getName());
                prest.setString(3, result.getMethod().getMethodName());
                Timestamp startTime=new Timestamp(result.getStartMillis());
                Timestamp endTime=new Timestamp(result.getEndMillis());
                prest.setTimestamp(4, startTime);
                prest.setTimestamp(5, endTime);
                Float tempLast=(float) (result.getEndMillis()-result.getStartMillis());
                Float lastTime=tempLast/1000;
                prest.setString(6,lastTime.toString());
                prest.setString(7, this.getStatus(result.getStatus()));
                prest.setString(8, result.getMethod().getDescription());
                prest.setString(9, batchNo);
                prest.execute();
                conn.commit();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            close(conn);
        }
    }
     
    public 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;
    }

    
    /** 
     * 创建连接 
     * @return 
     */  
    public static Connection getConn(){  
        try {          
                Class.forName("com.mysql.jdbc.Driver");          
                Connection conn = (Connection) DriverManager.getConnection(mySqlUrl, mySqlUserName, mySqlPassword);       
                conn.setAutoCommit(false);    
                return conn;  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }
        return null;  
    }  
    /** 
     * 关闭连接 
     * @return 
     */  
    public static void close(Connection conn){  
         try {    
             if(conn!=null){  
                 conn.close();    
             }  
         } catch (SQLException e) {    
             e.printStackTrace();    
         }  
    }

    public static String addZeroToIntStr(Integer num, int zeroNum) {
        if(num==null) {
            return null;
        }else if(zeroNum<=0) {
            return num+"";
        }else {
            String numStr = num + "";
            int numLength  = numStr.length();
            if(zeroNum>numLength) {
                for(int i=0; i<(zeroNum-numLength); i++) {
                    numStr = "0" + numStr;
                }
            }
            return numStr;
        }
    }
 
}

posted on 2018-01-24 15:42  hong_0632  阅读(453)  评论(0编辑  收藏  举报

导航