我浏览 stackoverflow 已经有几天了,试图找到如何重新运行整个测试类,而不仅仅是一个@Test步骤。许多人说 TestNG 和 不支持此功能IRetryAnalyzer,而有些人已经发布了解决方法,但实际上并没有用。有没有人设法做到这一点?并且只是为了澄清其原因,以避免回答说不支持的目的:TestNG 不仅是开发人员的工具。意思是 sw 测试人员也用于 e2e 测试。E2e 测试可以包含依赖于前一个测试的每个步骤。所以是的,重新运行整个测试类是有效的,而不是简单的@Test,这很容易通过IRetryAnalyzer.
我想要实现的一个例子是:
public class DemoTest extends TestBase {
@Test(alwaysRun = true, description = "Do this")
public void testStep_1() {
driver.navigate().to("http://www.stackoverflow.com");
Assert.assertEquals(driver.getCurrentUrl().contains("stackoverflow)"));
}
@Test(alwaysRun = true, dependsOnMethods = "testStep_1", description = "Do that")
public void testStep_2() {
driver.press("button");
Assert.assertEquals(true, driver.elementIsVisible("button"));
}
@Test(alwaysRun = true, dependsOnMethods = "testStep_2", description = "Do something else")
public void testStep_3() {
driver.press("button2");
Assert.assertEquals(true, driver.elementIsVisible("button"));
}
}
Run Code Online (Sandbox Code Playgroud)
假设 …
这按预期工作,测试失败(由于haltTesting())并重复2x
public class A0001_A0003Test extends TestControl {
private Kunde kunde = Kunde.FR_WEHLITZ;
@Test(retryAnalyzer = TestRepeat.class, groups = {TestGroups.FAILED}, description = "verify adress")
public void testkundenDaten_Angaben() throws Exception {
bifiTestInitial();
testActions.selectKunde(kunde);
haltTesting();
}
}
Run Code Online (Sandbox Code Playgroud)
但因为我在一个类中有多个测试,所以我在类级别定义了重复分析器
@Test(retryAnalyzer = TestRepeat.class)
public class A0001_A0003Test extends TestControl {
private Kunde kunde = Kunde.FR_WEHLITZ;
@Test(groups = {TestGroups.FAILED}, description = "verify adress")
public void testkundenDaten_Angaben() throws Exception {
bifiTestInitial();
testActions.selectKunde(kunde);
haltTesting();
}
}
Run Code Online (Sandbox Code Playgroud)
但随后测试不再重复,文档说:
类级别@Test注解的作用是使该类的所有公共方法即使没有注解也成为测试方法。如果您想添加某些属性,您仍然可以在方法上重复 @Test 注释。
所以这应该是可能的,还是我期待错误的结果?