如果跳过test(因为dependsOnGroups),ITest .getTestName()将返回null

时间:2018-04-06 13:29:14

标签: java testng

我想做什么

我正在尝试生成自定义测试报告,该报告会显示自定义测试名称。我这样做是通过实施“ITest策略”来覆盖getTestName()方法来提供自己的方法。

在我的报告中,我有方法名称(来自.getMethodName(),例如testIfStatusCodeIs200)和测试名称(来自.getTestName(),我自定义,并返回例如{{ 1}})。

代码如何显示

Tested endpoint is: http://cakeAPI/api/cakes/cakeId

这是报告生成器逻辑。这是一个非常大的功能,其中大部分功能包括附加和写入HTML文件,所以我自愿删除了我认为对问题不重要的部分:

public class BaseTest implements ITest {

    private String uri = null;

    public BaseTest(String uri) {
       this.uri = uri;
    }


    @Test (groups = { "myGroup" })
    public void test1() {
        // do something
    }


    @Test (dependsOnGroups = { "myGroup"})
    public void test2() {
         // do something
    }

    public String getTestName() {
        return uri;
    }
}

有什么问题

问题在于,如果public class CustomTestNGReporter implements IReporter { public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) { try { // Create test methods summary data. String customTestMethodSummary = this.getTestMehodSummary(suites); //... Append results to html } catch (Exception ex) { ex.printStackTrace(); } } /* Get test method summary info. */ private String getTestMehodSummary(List<ISuite> suites) { try { for (ISuite tempSuite : suites) { Map<String, ISuiteResult> testResults = tempSuite.getResults(); for (ISuiteResult result : testResults.values()) { ITestContext testObj = result.getTestContext(); /* Get failed test method related data. */ IResultMap testFailedResult = testObj.getFailedTests(); String failedTestMethodInfo = this.getTestMethodReport(testFailedResult); /* Get skipped test method related data. */ IResultMap testSkippedResult = testObj.getSkippedTests(); String skippedTestMethodInfo = this.getTestMethodReport(testSkippedResult); /* Get passed test method related data. */ IResultMap testPassedResult = testObj.getPassedTests(); String passedTestMethodInfo = this.getTestMethodReport(testPassedResult); } } } catch (Exception ex) { ex.printStackTrace(); } } /* Get failed, passed or skipped test methods report. */ private String getTestMethodReport(IResultMap testResultMap) { Set<ITestResult> testResultSet = testResultMap.getAllResults(); for (ITestResult testResult : testResultSet) { String testURI = testResult.getTestName(); System.out.println(testURI); // null for skipped tests } return null; } 失败,则会跳过test1(),在这种情况下,test2() getTestName()似乎会返回test2

例如,如果null的测试失败,那么我将跳过testIfStatusCodeIs200。与testIfResponseHas10Elements关联的测试名称将返回自定义测试名称,而testIfStatusCodeIs200的测试名称将返回testIfResponseHas10Elements

即使已经跳过测试,有没有办法'强制'null进行评估?

1 个答案:

答案 0 :(得分:2)

如果您使用最新发布的TestNG版本(6.14.3),则不会看到任何空值。您将至少获得实际的@Test带注释的方法名称。

我已经提交了一个错误,以确保如果测试类中有ITest实现,那么即使对于跳过的方法,TestNG也应始终检索它。

您可以在此处跟踪问题:https://github.com/cbeust/testng/issues/1756

该修补程序应该在即将推出的TestNG版本中提供,即 7.0.0

您可以将自己添加为上述问题的观察者来跟踪它。