我想做什么
我正在尝试生成自定义测试报告,该报告会显示自定义测试名称。我这样做是通过实施“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
进行评估?
答案 0 :(得分:2)
如果您使用最新发布的TestNG版本(6.14.3),则不会看到任何空值。您将至少获得实际的@Test
带注释的方法名称。
我已经提交了一个错误,以确保如果测试类中有ITest
实现,那么即使对于跳过的方法,TestNG也应始终检索它。
您可以在此处跟踪问题:https://github.com/cbeust/testng/issues/1756
该修补程序应该在即将推出的TestNG版本中提供,即 7.0.0
您可以将自己添加为上述问题的观察者来跟踪它。