如何仅在 TESTNG 生成 junit 报告后才执行语句?

how to execute statements only after junit reports are generated by TESTNG?

我正在将 testng 生成的 junit 报告转换为其他格式。

我为此编写了这段代码:

@AfterTest
public void execute()
{
    String junitReport = "TEST-"+this.getClass().getCanonicalName()+".xml";
    TestManagerLogger obj = new TestManagerLogger();
    obj.convertLog(junitReport);

}

但这不起作用,因为在执行此方法之前不会生成报告。 有什么方法可以只在报告生成后调用此方法吗?

我的测试用例:

@Test(dataProvider = "jobCount")
public void testJobCount(String Scenario, String URL,String methodType, String status) {
    URL = URL.replaceFirst("ip", ip);
    String logonToken=LogonUtility.logon();
    String result=  ResponseGenerator.response(URL, logonToken, methodType);
    List<HashMap> valuesFromExcel = StringSplitter.getKeyValuePairs(status);// Returns hashmap containing key values ex: failed =0 , total =3
    List<HashMap> valuesFromRest = new ArrayList<HashMap>();
    Document doc = StringSplitter.convertStringToDocument(result);
    javax.xml.xpath.XPath xPath = XPathFactory.newInstance().newXPath();
    NodeList node,node1;
    try{
        node =(NodeList)xPath.evaluate("/feed/entry/content/attrs/attr[@name='status_type']", doc, XPathConstants.NODESET);
        node1 = (NodeList) xPath.evaluate("/feed/entry/content/attrs/attr[@name='count']", doc, XPathConstants.NODESET);
        HashMap<String,String> hm = new HashMap<String,String>();

        for(int i=0;i<node.getLength();i++)
        {
            hm.put(node.item(i).getTextContent(),node1.item(i).getTextContent() );
        }
        valuesFromRest.add(hm);
        if(valuesFromRest.equals(valuesFromExcel))
        {
            AssertJUnit.assertTrue(true);

        }
        else
        {
            AssertJUnit.assertTrue(false);
        }


    }catch(Exception e) {
        e.printStackTrace();
    }


}

预期XML报告

<logfile>
<logrecord>
    <case>scenario</case>
    <etime>Execution time</etime>
</logrecord>
</logfile>

场景在测试用例中作为参数传递

你应该做的是实现你自己的记者:http://testng.org/doc/documentation-main.html#logging-reporters

public class TestManagerReporter implements IReporter {

  public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
    // print <logfile>
    for (ISuite suite : suites) {
      for (IInvokedMethod method : suite.getAllInvokedMethods()) {
        if (method.isTestMethod()) {
          ITestResult result = method.getTestResult();
          if (result.getStatus() == SUCCESS) {
            // print <logrecord>
            // print <case>
            // print result.getName()
            // print </case>
            // print <etime>
            // print result.getEndMillis() - result.getStartMillis() 
            // print </etime>
            // print </logrecord>
          }
        }
      }
    }
    // print </logfile>
  }
}