testng组测试



groups分组,可以用在方法上,也可以用在类上。我们可以根据需要,灵活地对方法和类进行分组。

一、组测试中的方法分组测试

通过@Test注解的groups属性,将一个测试类中的before/after方法分组执行。

import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

public class GroupsOnMethod {

    @Test(groups = "server")
    public void test1(){
        System.out.println("服务端组的测试方法1");
    }

    @Test(groups = "server")
    public void test2(){
        System.out.println("服务端组的测试方法2");
    }

    @Test(groups = "client")
    public void test3(){
        System.out.println("客户端组的测试方法3");
    }
    @Test(groups = "client")
    public void test4(){
        System.out.println("客户端组的测试方法4");
    }

    @BeforeGroups("server")
    public void beforeGroupsOnServer(){
        System.out.println("服务端组运行之前执行的方法");
    }

    @AfterGroups("server")
    public void afterGroupsOnServer(){
        System.out.println("服务端组运行之后执行的方法");
    }

    @BeforeGroups("client")
    public void beforeGroupsOnClient(){
        System.out.println("客户端组运行之前执行的方法");
    }

    @AfterGroups("client")
    public void afterGroupsOnClient(){
        System.out.println("客户端组运行之后执行的方法");
    }


}

执行结果如下:
在这里插入图片描述



二、组测试中的类分组测试

组类要运行的类可以自定义,可以包括要执行的,排除不要执行的方法。必须和<classes>配套使用,从下面的类中找到对应名字的方法、
<groups>由<define>和<run>、<dependencies>三部分组成。

  • <define>可以将group组成一个新组,包括要执行和不执行的大组;
  • <run>要执行的方法;
  • <dependencies>指定了某group需要依赖的group

在这里插入图片描述
GroupsOnClass1.java

package com.course.testng.groups;


import org.testng.annotations.Test;

@Test(groups = "stu")
public class GroupsOnClass1 {

    public void stu1(){
        System.out.println("GroupsOnClass1中的stu1运行");
    }

    public void stu2(){
        System.out.println("GroupsOnClass1中的stu2运行");
    }
}

GroupsOnClass2.java

package com.course.testng.groups;


import org.testng.annotations.Test;

@Test(groups = "stu")
public class GroupsOnClass2 {
    public void stu1(){
        System.out.println("GroupsOnClass2中的stu1运行");
    }

    public void stu2(){
        System.out.println("GroupsOnClass2中的stu2运行");
    }

}

GroupsOnClass3.java

package com.course.testng.groups;

import org.testng.annotations.Test;

@Test(groups = "teacher")
public class GroupsOnClass3 {

    public void teacher1(){
        System.out.println("GroupsOnClass3中的teacher1运行");
    }

    public void teacher2(){
        System.out.println("GroupsOnClass3中的teacher2运行");
    }

}

groupsOnClass.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

<suite name="suiteName">
	<!--class1/2/3中的测试类都执行-->
    <test name="runAll">
        <classes>
            <class name="com.course.testng.groups.GroupsOnClass1"/>
            <class name="com.course.testng.groups.GroupsOnClass2"/>
            <class name="com.course.testng.groups.GroupsOnClass3"/>
        </classes>
    </test>

	<!--使用groups标签,只执行group name为stu的测试类-->
    <test name="onlyRunStu">
        <groups>
            <run>
                <include name="stu"/>     <!--只执行group name为stu的测试类-->
            </run>
        </groups>

        <classes>
            <class name="com.course.testng.groups.GroupsOnClass1"/>
            <class name="com.course.testng.groups.GroupsOnClass2"/>
            <class name="com.course.testng.groups.GroupsOnClass3"/>
        </classes>
    </test>
</suite>

运行groupsOnClass.xml,结果如下
在这里插入图片描述


三、组中组测试

分组测试在配置时,TestNG执行的原则是:只保留最小集合进行执行

//使用groups进行分组测试,include和exclude的原则是保留最小集合
public class TestngGroups {
	@Test(groups = { "functest", "checkintest" })
	public void testMethod1() {
		System.err.println("groups = { functest, checkintest }");
	}
 
	@Test(groups = { "functest", "checkintest" })
	public void testMethod2() {
		System.err.println("groups = { functest, checkintest }");
	}
 
	@Test(groups = { "functest" })
	public void testMethod3() {
		System.err.println("groups = { functest }");
	}
 
	@Test(groups = { "checkintest" })
	public void testMethod4() {
		System.err.println("groups = { checkintest }");
	}
 
}

testng-groups.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="framework_testng">
	<test verbose="2" name="TestGroups">
		<groups>
			<run>
				<include name="functest" />
				<exclude name="checkintest" />
			</run>
		</groups>
 
		<classes>
			<class name="com.dragon.testng.annotation.TestngGroups" />
		</classes>
	</test>
</suite>

执行结果:
在这里插入图片描述

当我们的测试用例累积了很多以后,我们可能不需要测试之前的分组,只要测试刚刚写好的分组,这时候testng提供了一种新的配置方式,来实现这一功能,让测试人员只修改配置文件就完成测试。

组中组,即在groups标签内,使用<define>标签在现有组名的基础上,自定义一些分组(可以理解为按组名为单位,再一次分组),方便groups调用这些分组。比如下面例子中,define了名为all的组,包括组名windows.xp/windows.7/windows.8的测试类,此时在run中可以直接<include> all就可以完成组名为windows.xp/windows.7/windows.8的测试类的调用。

/**
 * 使用<define>标签将测试方法在组内再次进行分组并以name属性进行区分,
 * <run>通过define标签的name进行调用,以后修改测试直接修改run调用的名称即可
 */
public class TestngGroupsOfGroups {
 
	@Test(groups = { "windows.xp" })
	public void testMethod5() {
		System.err.println("(groups = { windows.xp })");
	}
 
	@Test(groups = { "windows.7" })
	public void testMethod6() {
		System.err.println("(groups = { windows.7 })");
	}
 
	@Test(groups = { "windows.8" })
	public void testMethod7() {
		System.err.println("(groups = { windows.8 })");
	}
}

testng-groupOfGroups.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="framework_testng">
	<test verbose="2" name="TestGroupsOfGroups">
		<groups>
			<define name="xp">
				<include name="windows.xp" />
			</define>
			<define name="w7">
				<include name="windows.7" />
			</define>
			<define name="all">
				<include name="windows.*" />
			</define>
			<run>
				<include name="all" />
				<exclude name="w7" />
			</run>
		</groups>
		<classes>
			<class name="com.dragon.testng.annotation.TestngGroupsOfGroups" />
		</classes>
	</test>
</suite>

测试结果:(注意:此时 被运行的测试分组将在run标签内进行配置,include和exclude时,是根据Define标签的name来决定)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值