• 修改testng源码,添加beforeMethod和afterMethod中的日志到test中(可以不改源码,废弃)


    在使用testng生成报告的时候,只会记录test方法中的日志,但是一般会在beforeMethod、beforeTest、afterMethod、afterTest中做一下数据的处理,这里面的日志没办法在test中显示。查看了testng的源码,发现suite中的getAllInvokedMethods方法会返回所有调用过的方法,包括test、after、before等。拿到了所有方法执行的结果,就可以进行处理,把beforeMethod、beforeTest、afterMethod、afterTest中的数据整合到对应的test中。

    第一步:下载testng源码到本地:

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

    修改接口ITestResult和他的实现类TestResult代码如下:

    在ITestResult添加代码:

    List<String> log = new ArrayList<String>();
    
      void setLog(List<String> log);
      List<String> getLog();

    在TestResult中添加代码:

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

     使用maven打包,要把依赖打进去,所以在pom中添加:

    <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 clean

    mvn package

    生成需要的jar包

    第二步:

    把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);
    }
    }
    }
    }
     
  • 相关阅读:
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    C#MD5判断文件是否修改
    Socket抓包工具WireShark使用
    C#窗体最大化最小化等比例缩放
    QMessageBox
  • 原文地址:https://www.cnblogs.com/Eric-zhao/p/10287827.html
Copyright © 2020-2023  润新知