前面说了,在同一个类内,TestNG默认是按照方法名首字母升序执行方法。这种方式虽然写起来会方便,个人觉得太过隐晦,对新手也不是很友好。
我们可以在@Test注解的TestNG方法加上dependsOnMethods = {"方法名"}或dependsOnGroups= {"组名"}来添加依赖关系,当然这些方法名和组名也是支持正则表达式的。
下面的代码使用了dependsOnMethods属性来指定了所依赖的方法。依赖组的写法就留给读者自己去实践辣。
public class TestDependency {
@Test(dependsOnMethods = {"firstMethod"})
public void secondMethod(){
System.out.println("我是secondMethod, 虽然我是第一个声明的,但是我依赖于firstMethod,所以我后跑");
}
@Test
public void firstMethod(){
System.out.println("我是firstMethod,尽管我声明的顺序是后面的,但是我被依赖了,所以我先跑");
}
}
运行结果:
TestNG提供了两种依赖机制:
1.强依赖关系:所有的被依赖的方法必须被成功运行,才会运行到后续的方法。哪怕只有一个前置方法运行失败了,有依赖关
系的后置方法都会被跳过。既有先后顺序关系,也有决定关系。
下面的代码是强依赖关系,由于failMethod会执行失败,所以skipMethod会被跳过。
import org.testng.annotations.Test;
public class TestDependency {
@Test
public void failMethod(){
System.out.println(1/0);
}
@Test(dependsOnMethods = {"failMethod"})
public void skipMethod1(){
System.out.println("这个方法永远不会运行,所以不会有输出");
}
@Test(dependsOnMethods = {"skipMethod1"})
public void skipMethod2(){
System.out.println("这种依赖连带的我也不会被执行");
}
}
执行可以看到控制台的输出:
2.弱依赖关系:不论前置方法是否成功运行,有依赖的后置方法都会得到运行,他们之间仅仅有前后顺序关系,前者的成功与否并不决定后者是否运行。弱依赖关系,需要在TestNG方法注解上,加一个alwaysRun=true属性。我们看下下面的强弱依赖对比
import org.testng.annotations.Test;
public class TestDependency {
@Test
public void failMethod(){
System.out.println(1/0);
}
@Test(dependsOnMethods = {"failMethod"}, alwaysRun=true)
public void skipMethod1(){
System.out.println("经管failMethod执行失败了,但是我是弱依赖,所以我会继续执行");
}
@Test(dependsOnMethods = {"failMethod"})
public void skipMethod2(){
System.out.println("我是强依赖,failMethod失败了,我不能执行");
}
}
控制台输出:
我们还可以在xml文件中使用<dependencies>和<group>标签来定制这些依赖关系。下面是一个使用xml定制依赖多个组的示例。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="testSuite">
<test name="test1">
<groups>
<dependencies>
<group name="group3" depends-on="group1 group2"/>
</dependencies>
</groups>
<classes>
<class name="com.testng.TestDependencyInXML"/>
</classes>
</test>
</suite>
import org.testng.annotations.Test;
public class TestDependencyInXML {
@Test(groups={"group1"})
public void bbbgroup1(){
System.out.println("bbbgroup1");
}
@Test(groups={"group1"})
public void aaagroup1(){
System.out.println("aaagroup1");
}
@Test(groups={"group2"})
public void aaagroup2(){
System.out.println("aaagroup2");
}
@Test(groups={"group2"})
public void bbbgroup2(){
System.out.println("bbbgroup2");
}
@Test(groups={"group3"})
public void dependOnOthers(){
System.out.println("dependOnOthers");
}
}
控制台输出: