前面是通过java代码指定重跑,本节是讲解通过实现IAnnotationTransformer接口实现失败案例重跑
创建MyRetry 实现IRetryAnalyzer 接口
package Listener;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class MyRetry implements IRetryAnalyzer {
// 设置当前失败执行的次数
private int retryCount = 1;
// 设置最大失败执行次数
private static int maxRetryCount = 3;
@Override
public boolean retry(ITestResult iTestResult) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}
创建MyRetryListener 实现IAnnotationTransformer 接口
package Listener;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.IAnnotationTransformer;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class MyRetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
IRetryAnalyzer myRetry = iTestAnnotation.getRetryAnalyzer();
if (myRetry == null) {
iTestAnnotation.setRetryAnalyzer(MyRetry.class);
}
}
}
执行的测试用例:
package TestNg;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class TestAssert {
@Test
public void TestAssert() {
Assert.assertEquals("2", 2);
}
@Test
public void TestAssertNotNull() {
int a=3;
Assert.assertNotNull(a);
}
@Test
public void TestAssertSame() {
String expected="aaa";
String actual="aaa";
Assert.assertSame(actual, expected,"实际结果跟预期结果不一样");
}
@Test
public void TestAssertTrue() {
Assert.assertTrue(1==2);
}
@Test
public void TestAssertAll(){
System.out.println("Test start");
SoftAssert assertion = new SoftAssert();
assertion.assertEquals(12, 13,"两者不相等");
System.out.println("Test complete");
System.out.println(3+8);
assertion.assertAll();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<test verbose="2" preserve-order="true" name="D:/IdeaProject/interfaceRestAssured">
<classes>
<class name="TestNg.TestAssert">
</class>
</classes>
</test>
<!-- <listeners>
<listener class-name="report.ExtentReport"></listener>
</listeners>-->
<!-- 这是reportNG的监听类-->
<!-- <listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter"></listener>
<listener class-name="org.uncommons.reportng.JUnitXMLReporter"></listener>
</listeners>-->
<listeners>
<listener class-name="Listener.MyRetryListener"></listener>
</listeners>
</suite>
执行testng.xml
查看执行结果如下:失败的用例重新执行了两次