在TestNG中使用getRetryAnalyzerClass时,重试未执行的方法,该方法是从IRetryAnalyze



请求在以下方面帮助我,

操作系统: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); 
}
}
  1. 在RetryFailedTC类中,为IRetryanalyzer接口的未实现方法编写代码
  2. 在测试方法中,使用注释@test(retryanalyzer = Retry FailedTC.class )作为测试方法

它会起作用的。

Class<? extends IRetryAnalyzer> retry = itestannotation.getRetryAnalyzerClass();

正在提供预期输出。

每当在@Test注释中提到具有Retry classretryanalyzer时,则retry将具有在@Test注释中提到的类名,否则它将具有org.testng.internal.annotations.DisabledRetryAnalyzer

目前,如果你只是删除重试行,如果条件允许,它将正常工作

最新更新