TestNG可以执行复杂的测试方法分组。您不仅可以声明方法属于组,而且还可以指定包含其他组的组。然后可以在testng.xml配置一组特定的组,或同时排除另一组。
第一个例子:
java代码:
package com.kdzwy.practice;
import org.testng.annotations.Test;
/*
*包名:com.kdzwy.practice
*作者:Adien_cui
*时间:2017-3-28 下午5:41:26
*描述:testng分组
**/
package com.kdzwy.practice;
import org.testng.annotations.Test;
/*
*包名:com.kdzwy.practice
*作者:Adien_cui
*时间:2017-3-28 下午5:41:26
*描述:testng分组
**/
public class TestngGroups {
@Test(groups = { "group1", "group2" })
public void testMethod1() {
System.out.println("testMethod1");
}
@Test(groups = {"group1", "group2"} )
public void testMethod2() {
System.out.println("testMethod2");
}
@Test(groups = { "group1" })
public void testMethod3() {
System.out.println("testMethod3");
}
}
testng.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<run>
<inlude name="group2" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups" />
</classes>
</test>
</suite>
运行结果:
可以看到在testng.xml的run里只配置了group2,所以只运行了testMethod1和testMethod2。
排除组
testng.xml配置如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<run>
<include name="group1" />
<exclude name="group2" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups" />
</classes>
</test>
</suite>
运行结果:
这里的testng.xml中使用了exclude标签,排除了group2的运行,所以只运行了testMethod3。
群组
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<define name="part">
<include name="group2" />
</define>
<define name="all">
<include name="group1" />
<include name="group2" />
</define>
<run>
<include name="all" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups" />
</classes>
</test>
</suite>
运行结果:
部分组
可以在类级别定义组,然后在方法级添加组:
package com.kdzwy.practice;
import org.testng.annotations.Test;
/*
*包名:com.kdzwy.practice
*作者:Adien_cui
*时间:2017-3-28 下午7:56:04
*描述:部分组
**/
@Test(groups = { "class-group" })
public class TestngGroups2 {
@Test(groups = { "method-group"})
public void method1() {
System.out.println("Method1");
}
public void method2() {
System.out.println("Method2");
}
}
在这个类中,method2()是组“class-group”的一部分,它在类级别定义,而method1()属于“class-group”和“method-group”两者。
testng.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<run>
<include name="method-group" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups2" />
</classes>
</test>
</suite>
运行结果:
testng.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<run>
<include name="class-group" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups2" />
</classes>
</test>
</suite>
运行结果:
@BeforeGroups , @AfterGroups 注解使用
@BeforeGroups注解的方法将在本组内任何测试方法执行前被执行一次,可用于执行初始化操作。类似的@AfterGroups 注解的方法将在本组内任何测试方法执行后被执行,可用于关闭资源。
java示例:
package com.kdzwy.practice;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
/*
*包名:com.kdzwy.practice
*作者:Adien_cui
*时间:2017-3-28 下午8:12:33
*描述:
**/
public class TestngGroups3 {
@BeforeGroups(groups={"group-b"})
public void setUp(){
System.out.println("Method---setup");
}
@AfterGroups(groups={"group-b"})
public void tearDown(){
System.out.println("Method---tearDown");
}
@Test(groups = { "group-a" })
public void aaaMethod() {
System.out.println("Method---aaa");
}
@Test(groups = { "group-b"} )
public void bbbMethod() {
System.out.println("Method---bbb");
}
@Test(groups = { "group-a","group-b" })
public void cccMethod() {
System.out.println("Method---ccc");
}
}
testng.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="login">
<groups>
<run>
<include name="group-b" />
</run>
</groups>
<classes>
<class name="com.kdzwy.practice.TestngGroups3" />
</classes>
</test>
</suite>
运行结果:
因为bbbMethod和cccMethod在组group-b里,所以可以看到setUp在bbbMethod之前运行了,而tearDown在cccMethod之后运行了