TestNG - @AfterMethod 的优先级

TestNG - priority of @AfterMethod

是否可以按特定顺序调用@AfterMethod 方法? 我有一个示例代码:

public class PriorityTest {

@BeforeClass(alwaysRun = true)
public void setUp() throws Exception {
    System.out.println("BeforeClass PriorityTest.java");
}

@Test
public void defaultPriority(){
    System.out.println("default");
}
@Test (priority = 3)
public void t1(){
    System.out.println("t1");
}
@Test (priority = 2)
public void t2(){
    System.out.println("t2");
}
@Test (priority = 1)
public void t3(){
    System.out.println("t3");
}
@Test (priority = -1)
public void t_1(){
    System.out.println("t -1");
}

@AfterMethod
public void after2(){
    System.out.println("after2");
}
@AfterMethod
public void after1(){
    System.out.println("after1");
}

}

@Test 的优先级工作得很好。我想用@AfterMethod 做同样的事情,但是当我写代码时@AfterMethod (priority = 1) 是编译错误。当我 运行 没有优先级时,总是按字母顺序排列(只有方法名称很重要)。 这是输出: BeforeClass PriorityTest.java t -1 after1 after2 default after1 after2 t3 after1 after2 t2 after1 after2 t1 after1 after2

是否可以按特定顺序调用该方法(例如特殊参数或注释)?

PS。我知道我可以写一个 AfterMethod 然后按特定顺序调用方法,但我想到了很多 AfterMethod 注释。

尝试使用 dependsOnMethods:

@AfterMethod(dependsOnMethods= { "after2" })
public void after1(){
    System.out.println("after1");

@AfterMethod 不支持 priority 参数。但它有 dependsOnMethodsdependsOnGroups 可以代替使用。

dependsOnMethods

The list of methods this method depends on. There is no guarantee on the order on which the methods depended upon will be run, but you are guaranteed that all these methods will be run before the test method that contains this annotation is run. Furthermore, if any of these methods was not a SUCCESS, this test method will not be run and will be flagged as a SKIP. If some of these methods have been overloaded, all the overloaded versions will be run.

dependsOnGroups

The list of groups this method depends on. Every method member of one of these groups is guaranteed to have been invoked before this method. Furthermore, if any of these methods was not a SUCCESS, this test method will not be run and will be flagged as a SKIP.

在你的情况下 dependsOnMethods 可以使用。

@AfterMethod
public void after2(){
    System.out.println("after2");
}
@AfterMethod(dependsOnMethods = "after2")
public void after1(){
    System.out.println("after1");
}