请求在以下方面帮助我,
操作系统:Windows 8.1 Pro
Java版本:1.8.0_141
Maven依赖项:-
*Selenium:3.141.59
*TestNG:7.0
问题1:当我使用从"IAnnotationTransformer"实现的"getRetryAnalyzerClass"时,当测试失败时,不会执行从"IRetryAnalyzer"执行的"重试"方法
但如果我使用"getRetryAnalyzer",则会执行重试方法。
public class RetryListener implements IAnnotationTransformer {
@SuppressWarnings({ "rawtypes" })
@Override
public void transform(ITestAnnotation itestannotation, Class testClass, Constructor testConstructor, Method testMethod) {
Class<? extends IRetryAnalyzer> retry = itestannotation.getRetryAnalyzerClass();
if (retry == null) {
itestannotation.setRetryAnalyzer(RetryFailedTC.class);
}
当我调试时,我看到第一次运行时的IRetryAnalyzer retry = itestannotation.getRetryAnalyzer();
变成null
,因此进入if条件
但在Class<? extends IRetryAnalyzer> retry = itestannotation.getRetryAnalyzerClass();
中,第一次运行时为class org.testng.internal.annotations.DisabledRetryAnalyzer
,因此它不在条件内。
问题2:当我使用IRetryAnalyzer retry = itestannotation.getRetryAnalyzer()
时,执行后我得到以下错误。
===============================================
Suite
Total tests run: 2, Passes: 0, Failures: 1, Skips: 0, Retries: 1
===============================================
[TestNG] Reporter [FailedReporter passed=0 failed=0 skipped=0] failed <br>
at java.util.HashMap.putMapEntries(Unknown Source) <br>
at java.util.HashMap.putAll(Unknown Source) <br>
at org.testng.xml.XmlClass.setParameters(XmlClass.java:231) <br>
at org.testng.reporters.FailedReporter.createXmlClasses(FailedReporter.java:199) <br>
at org.testng.reporters.FailedReporter.createXmlTest(FailedReporter.java:150) <br>
at org.testng.reporters.FailedReporter.generateXmlTest(FailedReporter.java:124) <br>
at org.testng.reporters.FailedReporter.generateFailureSuite(FailedReporter.java:64) <br>
at org.testng.reporters.FailedReporter.generateReport(FailedReporter.java:49) <br>
at org.testng.TestNG.generateReports(TestNG.java:1062) <br>
at org.testng.TestNG.run(TestNG.java:1005) <br>
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) <br>
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) <br>
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77) <br>
感谢您提前提供的帮助。
请尝试以下代码和步骤。
public class RetryListener implements IAnnotationTransformer {
@SuppressWarnings({ "rawtypes" })
@Override
public void transform(ITestAnnotation itestannotation, Class testClass, Constructor testConstructor, Method testMethod) {
itestannotation.setRetryAnalyzer(RetryFailedTC.class);
}
}
- 在RetryFailedTC类中,为IRetryanalyzer接口的未实现方法编写代码
- 在测试方法中,使用注释
@test(retryanalyzer = Retry FailedTC.class )
作为测试方法
它会起作用的。
Class<? extends IRetryAnalyzer> retry = itestannotation.getRetryAnalyzerClass();
正在提供预期输出。
每当在@Test
注释中提到具有Retry class
的retryanalyzer
时,则retry
将具有在@Test
注释中提到的类名,否则它将具有org.testng.internal.annotations.DisabledRetryAnalyzer
。
目前,如果你只是删除重试行,如果条件允许,它将正常工作