java - 如果测试失败,则重试 TestNG 代码中的特定代码段,而不是整个测试

标签 java testng

如果 TestNG 测试失败,我想重试某些方法特定的代码,而不是重试整个测试。

我从这里研究了自定义测试监听器和重试分析器 https://github.com/haojiwu/testng-retry-example 。如果失败,这将重新运行整个测试,我想要一些方法特定的代码。

@Test()
public void testStuff() {
    String var1;
    String var2;

    /* Code specific to this test and should only be ran once. */
    doSomething(param1)

    /* Contains code looking for files that may or not be ready by the time the code is ran. */
    /* I want to try this code then wait and retry up to a max of 3 retries. */
    assertStuff(var1, var2);
}

我想在 doSomething(param1) 中执行代码,如果断言失败,则尝试在assertStuff(var1, var2) 中执行代码,我想等待 5 秒,然后重试assertStuff(var1, var2) 代码如果断言通过,则测试通过,否则最多重试 2 次。

最佳答案

您可能想使用 TestNG retryAnalyzer功能,但仅适用于 assertStuff(var1, var2) 部分。

因此,您应该将 doSomething(param1) 移动到一个单独的方法中,并用 @BeforeClass (或 @BeforeMethod)进行注释:

...
@BeforeClass
public void initSomething() {
    doSomething(param1);
}

@Test(retryAnalyzer = ThreeRetries.class)
public void testStuff() {
    String var1;
    String var2;

    assertStuff(var1, var2);
}

或者,您可以使用 @Test 注释作为强制部分并声明测试之间的依赖关系,例如:

...
@Test
public void initSomething() {
    doSomething(param1);
}

@Test(retryAnalyzer = ThreeRetries.class, dependsOnMethods = "initSomething")
public void testStuff() {
    String var1;
    String var2;

    assertStuff(var1, var2);
}

关于java - 如果测试失败,则重试 TestNG 代码中的特定代码段,而不是整个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56709945/

相关文章:

java - 将 smack 实现到 Android 应用程序中的最佳做法是什么?

java - 如何删除 Android 网格布局之间的空间

java - PDFbox 1.7.0 - 如何在使用 PDFBox 添加新图像的同时保留现有图像?

java - 重新绘制之前不会清除面板

java - 如何执行测试方法中未找到元素的部分之后的代码?

java - 在 Grid 上运行时如何关闭 ChromeDriver?

java - 通过 Groovy 脚本访问 Java 局部变量

java - 如何从java动态创建xml文件中的节点中的节点

java - 继承期间TestNG中@BeforeClass方法执行

java - 从 Jenkins(Maven 项目)执行 TestNG.xml