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; } } }