2

我正在尝试从测试用例套件运行中生成 TestNG 报告,如果第一次或第二次运行失败,此测试用例最多可以运行 3 次。我能够生成的报告只显示最后一次运行的结果,我想做的是生成一个显示每次运行的报告,所以如果一个测试用例运行了 3 次,则报告中列出了 3 次。这是我到目前为止的代码:

 LinkedList<Map<String, ISuiteResult>> componentResults = new LinkedList<Map<String, ISuiteResult>>();
 LinkedHashMap<String, String> testNames = new LinkedHashMap<String, String>();
 List<String> mustPassTests = getMustPass(testSuite);
 Map<String, ISuiteResult> r = testSuite.getResults();
 componentResults.add(r);


    for(ISuiteResult r2 : r.values()) {

        ITestContext testContext = r2.getTestContext();

        String testName = testContext.getName();

        ITestNGMethod[] methods = testContext.getAllTestMethods();
        Calendar startCal = Calendar.getInstance();
        startCal.setTime(testContext.getStartDate());
        long start = startCal.getTimeInMillis();
        Calendar endCal = Calendar.getInstance();
        endCal.setTime(testContext.getEndDate());
        long end = endCal.getTimeInMillis();
        duration += end-start;

        for(int i = 0; i < methods.length; i++) {
            testNames.put(methods[i].getMethodName(), testName);
        }
    }

我想我可以使用调用方法的列表,不包括配置方法,但是映射不接受重复的键。

 for(IInvokedMethod invoked : invokedMethods){
      String invokedName = invoked.getTestMethod().getMethodName();
      if(!invokedName.contains("after")){
           if(!invokedName.contains("before")){
           testNames.put(invoked.getTestMethod().getMethodName(), testName);
           }
      }
 }

有什么方法可以使用另一个主键来让我列出每次运行而不是测试用例结果?

4

2 回答 2

2

您可以使用selenium testing-framework - QAF 以前的 ISFW,它基于 testng 并根据您的需要提供描述性报告。这是一些快照。 概述 详细报告

于 2013-09-18T18:46:01.763 回答
0

最后,通过引入以下更改,我能够找到解决问题的方法:

 List<IInvokedMethod> invokedMethods = testSuite.getAllInvokedMethods();
    LinkedHashMap<String, String> testNames = new LinkedHashMap<String, String>();
    Map<String, ISuiteResult> r = testSuite.getResults();

    for(ISuiteResult r2 : r.values()) {

        ITestContext testContext = r2.getTestContext();
        String testName = testContext.getName();
        ITestNGMethod[] methods = testContext.getAllTestMethods();
        Calendar startCal = Calendar.getInstance();
        startCal.setTime(testContext.getStartDate());
        long start = startCal.getTimeInMillis();
        Calendar endCal = Calendar.getInstance();
        endCal.setTime(testContext.getEndDate());
        long end = endCal.getTimeInMillis();
        duration += end-start;

        for(int i = 0; i < methods.length; i++) {
            System.out.println(methods[i].getMethodName());
            testNames.put(methods[i].getMethodName(), testName);
        }
    }

    for(IInvokedMethod invoked : invokedMethods){
        if(!invoked.getTestMethod().toString().contains("after")){
            if(!invoked.getTestMethod().toString().contains("before")){
                testNames.put(invoked.getTestResult().getName(), invoked.getTestResult().getTestContext().getName());
            }       
        }
    }

我现在使用的是调用方法的列表,不包括配置方法,由 after 和 before 注释标识

于 2013-10-17T14:11:07.660 回答