修改testng源碼,添加beforeMethod和afterMethod中的日誌到test中(能夠不改源碼,廢棄)

在使用testng生成報告的時候,只會記錄test方法中的日誌,可是通常會在beforeMethod、beforeTest、afterMethod、afterTest中作一下數據的處理,這裏面的日誌沒辦法在test中顯示。查看了testng的源碼,發現suite中的getAllInvokedMethods方法會返回全部調用過的方法,包括test、after、before等。拿到了全部方法執行的結果,就能夠進行處理,把beforeMethod、beforeTest、afterMethod、afterTest中的數據整合到對應的test中。java

第一步:下載testng源碼到本地:git

git clone -b testng-6.8.9 git@github.com:cbeust/testng.gitgithub

修改接口ITestResult和他的實現類TestResult代碼以下:maven

在ITestResult添加代碼:ide

List<String> log = new ArrayList<String>();

  void setLog(List<String> log);
  List<String> getLog();

在TestResult中添加代碼:ui

private List<String> log;
public void setLog(List<String> log) {
    this.log = log;
  }

  public List<String> getLog() {
    return log;
  }

 使用maven打包,要把依賴打進去,因此在pom中添加:this

<plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
 </plugin>

  

mvn cleanspa

mvn package日誌

生成須要的jar包code

第二步:

把jar包放到咱們的工程目錄中(新建lib目錄,放到lib下)

工程中pom添加,同時刪掉原來有的testng依賴:

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.8.8</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/lib/testng-6.8.8.jar</systemPath>
</dependency>

第三步:如何使用

新建類實現IReporter接口:

package test.service;import org.testng.*;import org.testng.xml.XmlSuite;import java.util.*;public class CustomReporter implements IReporter{    @Override    public void generateReport(List<XmlSuite> xmlSuite, List<ISuite> suites, String s) {        List<ITestResult> list = new ArrayList<>();        List<IInvokedMethod>  allInvokedMethodsList = new ArrayList<>();        for (ISuite suite : suites) {            Map<String, ISuiteResult> suiteResults = suite.getResults();            List<IInvokedMethod>  allInvokedMethods = suite.getAllInvokedMethods();            //排序            Collections.sort(allInvokedMethods, new Comparator<IInvokedMethod>() {                @Override                public int compare(IInvokedMethod o1, IInvokedMethod o2) {                    return Long.valueOf(o1.getTestResult().getStartMillis()).compareTo(Long.valueOf(o2.getTestResult().getStartMillis()));                }            });        }        for(int i=0;i<allInvokedMethodsList.size();i++){            IInvokedMethod iInvokedMethod = allInvokedMethodsList.get(i);            ITestResult itestResult = iInvokedMethod.getTestResult();            ITestNGMethod iTestNGMethod = itestResult.getMethod();            if(iTestNGMethod.isTest()){                if(i-1>=0){                    ITestResult tmpTestResult = allInvokedMethodsList.get(i-1).getTestResult();                    if(tmpTestResult.getMethod().isBeforeTestConfiguration() || tmpTestResult.getMethod().isBeforeMethodConfiguration()){                        List<String> log = new ArrayList<>();                        log.addAll(Reporter.getOutput(tmpTestResult));                        log.addAll(Reporter.getOutput(itestResult));                        itestResult.setLog(log);                    }                }                if(i+1<allInvokedMethodsList.size()){                    ITestResult tmpTestResult = allInvokedMethodsList.get(i+1).getTestResult();                    if(tmpTestResult.getMethod().isAfterClassConfiguration() || tmpTestResult.getMethod().isAfterMethodConfiguration()){                        List<String> log = new ArrayList<>();                        log.addAll(Reporter.getOutput(itestResult));                        log.addAll(Reporter.getOutput(tmpTestResult));                        itestResult.setLog(log);                    }                }                list.add(itestResult);            }        }    }}
相關文章
相關標籤/搜索