aut*_*ier 2 java testng selenium annotations
我有以下@AfterSuit方法。如果我删除alwaysRun=true,TestNG就不会执行它。
@AfterSuite(alwaysRun=true)
public void finishsuit()
{
System.out.println("completed suit");
}
Run Code Online (Sandbox Code Playgroud)
我检查了alwaysRun的文档,它说:
对于 after 方法(afterSuite、afterClass、...):如果设置为 true,则即使先前调用的一个或多个方法失败或被跳过,此配置方法也将运行。
这就是我的理解:如果当前套装中指定@Test的任何类中定义的任何方法失败,则除非我们指定,否则不会执行。<test>@AfterSuitalwaysRun=true
但就我而言,没有一个@Test失败。而且我的仍然@AfterSuite没有执行alwaysRun=true
您可能正在组中运行测试方法,而 AfterSuite 不属于任何组,这就是您需要alwaysRun=true.
但因为我发现您对 AlwaysRun 行为有点困惑,所以我将继续解释......
对于 @BeforeXXXX 方法,如果您想要运行该方法(尽管它不属于您正在运行的组),则需要分配alwaysRun。例如。
public class TestConfig {
@BeforeSuite
public void beforeSuite() {
doSomething();
}
}
public class TestClassA extends TestConfig {
@Test(groups = { "groupA" })
public void testA() {
doTest();
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我们运行组“groupA”,则 @BeforeSuite 方法不是我们正在执行的组的一部分,除非我们指定alwaysRun = true。
这同样适用于 @AfterXXXX 方法,此外,如果您想运行它们,尽管它们的 @Before 对应项已失败或任何依赖方法失败,则它们需要 alwaysRun=true 。例如:
public class TestClassA {
@BeforeSuite( groups = { "testA" })
public void beforeSuite() {
doSomethingBefore();
throw new RuntimeException();
}
@Test( groups = { "testA" })
public void testA() {
doTest();
}
@AfterSuite( groups = { "testA" })
public void afterSuite() {
doSomethingAfter();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,@AfterSuite方法将不会运行,因为它的对应方法@BeforeSuite失败了。如果@AfterSuite位于@BeforeClass失败的类上,则同样适用。但如果我们添加alwaysRun=truetestng 将忽略任何先前的失败并继续进行。
这些都不适用于@TEST方法。@BeforeXXXX 和 @AfterXXXX 方法将忽略任何 @Test 结果运行,除非您指定测试依赖项。
最后,@Test 方法中的alwaysRun 的行为方式与ignoreMissingDependencies=true. 例如:
@Test
public void testA() {
doTestA();
}
@Test(dependsOnMethods = { testA }))
public void testB() {
doTestB();
}
Run Code Online (Sandbox Code Playgroud)
同样,在这种情况下 testB 将不会运行,因为它依赖于@TestA,除非我们分配alwaysRun = true(或ignoreMissingDependency = true)。
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |