TestNG依赖项详解(五)
每个CASE都不是独立的,这就像同步任务一样,总得有个顺序的过程,自动化测试尤其如此,为什么这样说了?每个测试用例都不是独立
的,都会涉及到不同业务场景之间的关联。再举一个更加简单的案例,就是HTTP的交互,在API的自动化测试中,我们对一个系统的操作,首
先是要进入到这个系统,那么我们就需要获取登录成功后的的token信息,我们才能够对系统做一系列的操作。当然这样的案例还是有很多的。
让我们庆幸的是作为主流的测试框架TestNG它提供的这样的能力,这样我们就可以很完美的在业务中进行整合和应用。在TestNG的框架中,依
赖还是在两个维度来展开,一个是测试用例之间的关系,另外一个是我们可以通过testng.xml配置文件来实现我们的诉求。
我们先来看依赖性的测试,行代码的角度来深度了解依赖性测试到底是什么,案例代码如下:
package test.depend; import org.testng.annotations.Test; import org.testng.Assert; public class DependTest { @Test(dependsOnMethods = "test_two") public void test_one() { System.out.println("This Is A Test One"); } @Test public void test_two() { System.out.println("This Is A Test Two"); } }
在如上的代码中可以看到,test_one的测试用例执行是依赖test_two的,那么也就意味了什么,意味了我们在执行test_one的测试用例
的时候,它首先会执行test_two的测试用例,再次执行test_one的测试用例,这就是依赖性。当然在TestNG测试框架中依赖性分为依赖
测试方法和依赖测试组,我们这地方主要是依赖测试方法这部分。我们单独的执行test_one测试用例,其实内部就先执行test_two的测试
用例,然后执行test_one的测试用例,当然如果我们只是执行test_two,因为它没有任何的依赖项,是其他测试用例依赖它,并不是它依
赖其他测试用例,所以单独执行test_two的测试用例,就只会执行test_two的测试用例。如上就是依赖性的实际案例应用。当然实际的业务
可能更加复杂,比如执行一个测试场景,依赖项可能会有多个测试步骤,那么也就是说一个测试用例可以依赖N个测试用例,具体案例代码
如下:
package test.depend; import org.testng.annotations.Test; import org.testng.Assert; public class DependTest { @Test(dependsOnMethods = {"test_two","test_three"}) public void test_one() { System.out.println("This Is A Test One"); } @Test public void test_two() { System.out.println("This Is A Test Two"); } @Test public void test_three() { System.out.println("This Is A Test Three"); } }
再次看如上的代码,可以看到,测试用例test_one依赖test_two和test_three,所以单独的执行test_one后,它的顺序就是test_two->
test_three->test_one,执行后的结果信息如下所示:

在如上的测试结果信息中,可以看到执行的结果和我们预期的是一致的。
在上面讲的都是在同一个类中的测试方法之间的依赖关系,还有一种方式就是继承件的依赖关系,简单点理解就是不同类之间的测试方
法的依赖,我们还是通过具体的案例代码来说明这部分的应用,类DependFather.class的源码为:
package test.depend; import org.testng.annotations.Test; import org.testng.Assert; public class DependFather { @Test() public void test_one() { System.out.println("This Is A Test One"); } @Test public void test_two() { System.out.println("This Is A Test Two"); } }
被继承的类,也就是子类的源码为:
package test.depend; import org.testng.annotations.Test; public class DependTest extends DependFather { @Test(dependsOnMethods={"test_one"}) public void test_four() { System.out.println("This Is A Test Four"); } @Test public void test_five() { System.out.println("This Is A Test Five"); } }
我们可以看到,子类测试方法test_four依赖的测试方法test_one是基类的测试方法,我们单独执行test_four,它
首先会执行基类的测试方法test_one,再执行子类的测试方法test_four,这也就是通过不同的类来实现继承式的依
赖,这点功能我个人觉得是非常强大的。
下面我们来看通过组的方式来实现依赖,其实我个人觉得通过组的方式,其实最终本质上还是通过测试方法来
实现的依赖,具体见如下的案例代码:
package test.depend; import org.testng.annotations.Test; public class DependGroups { @Test(dependsOnGroups = {"test-group"}) public void test_one() { System.out.println("this is a test one"); } @Test(groups = {"test-group"}) public void test_two() { System.out.println("this is a test two"); } @Test(groups = {"test-group"}) public void test_three() { System.out.println("this is a test three"); } }
在如上的案例代码中,我们可以看到,test_two和test_three被分到了test-group的组中,test_one的测试方法依
赖测试组test-group,也就意味着依赖这个组里面所有的测试用例,那么测试用例之间的执行顺序就会TestNG测试
框架的执行顺序了。使用组了功能后,依赖性的功能就会显得特别的强大。

浙公网安备 33010602011771号