(五)TestNG 定制依赖关系

本文介绍了TestNG如何设置方法间的依赖关系,包括强依赖和弱依赖。强依赖意味着所有前置方法必须成功执行,后继方法才会运行;而弱依赖即使前置方法失败,后置方法也会执行。此外,通过dependsOnMethods和dependsOnGroups属性可以指定依赖的具体方法或组,并通过XML配置文件进一步定制依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面说了,在同一个类内,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");
	}
	
}

控制台输出:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值