在这篇文章中,我们将详细讨论TestNG的包含和排除标签。下面是我们将在这篇文章中看到的要点-
- 包含和排除包
- 第二,包括和排除测试方法
- 最后,包括和排除组
我们只能将exclude标记与packages、methods和run标记(groups的子标记,告诉我们要运行哪些组)一起使用。让我们看看上面提到的所有要点。
包含和排除包
在这里,我们将讨论包和子包,以及我们需要做些什么来包含或排除一些包。下面是我们将在示例中使用的结构。
在这里,Practice是我们的顶级包,而Test1、Test2和Test3是我们的子包,每个子包都包含一个Test类。
CodekruTest1.java
public class CodekruTest1 {
@Test
public void test1() {
System.out.println("Executing test1 in CodekruTest1 class");
Assert.assertTrue(true);
}
}
CodekruTest2.java
public class CodekruTest2 {
@Test
public void test1() {
System.out.println("Executing test1 in CodekruTest2 class");
Assert.assertTrue(true);
}
}
CodekruTest3.java
public class CodekruTest3 {
@Test
public void test1() {
System.out.println("Executing test1 in CodekruTest3 class");
Assert.assertTrue(true);
}
}
现在,如果我们想在Practice包中运行所有的测试用例,我们将生成如下所示的XML文件。
<suite name="codekru">
<test name="codekruTest">
<packages>
<package name="Practice.*" />
</packages>
</test>
</suite>
运行上述XML文件后的输出
Executing test1 in CodekruTest1 class
Executing test1 in CodekruTest2 class
Executing test1 in CodekruTest3 class
仅包括某些特定的软件包
现在,如果我们只想运行一些特定的包,比如包Test1和Test3,该怎么办?在XML文件中不写 *(星号),我们必须写我们想要运行的包的确切路径。
<suite name="codekru">
<test name="codekruTest">
<packages>
<package name="Practice.Test1" />
<package name="Practice.Test3" />
</packages>
</test>
</suite>
运行上述XML文件后的输出
Executing test1 in CodekruTest2 class
Executing test1 in CodekruTest3 class
包括和排除测试方法
这是include和exclude标签最常用的用例之一。有时候,我们只想运行一个类中的几个案例,而不是运行所有的案例,我们可以通过使用include标签来实现这一点。类似地,如果我们想排除某些特定的测试用例或测试方法,我们可以使用exclude标签来完成。
仅包括一些特定的测试方法
为了只包含测试类中的一些测试方法,我们必须使用如下所示的include标签。
语法
<class name = "name_of_the_class">
<methods>
<include name = "name_of_the_test_method"/>
</methods>
</class>
让我们以一个名为CodekruTest的类为例,它有4个测试方法,然后我们将尝试只运行其中的2个。
CodekruTest.java
package Test;
import org.testng.Assert;
import org.testng.annotations.Test;
public class CodekruTest {
@Test
public void test1() {
System.out.println("Executing test1 in CodekruTest class");
Assert.assertTrue(true);
}
@Test
public void test2() {
System.out.println("Executing test2 in CodekruTest class");
Assert.assertTrue(true);
}
@Test
public void test3() {
System.out.println("Executing test3 in CodekruTest class");
Assert.assertTrue(true);
}
@Test
public void test4() {
System.out.println("Executing test4 in CodekruTest class");
Assert.assertTrue(true);
}
}
下面是XML文件
<suite name="codekru">
<test name="codekruTest">
<classes>
<class name = "Test.CodekruTest">
<methods>
<include name="test1" />
<include name="test3"/>
</methods>
</class>
</classes>
</test>
</suite>
运行XML文件后的输出-
Executing test1 in CodekruTest class
Executing test3 in CodekruTest class
在这里,我们可以看到只有test1和test3被执行。
仅列出某些特定的测试方法
exclude标记的语法与include标记的语法类似
<class name = "name_of_the_class">
<methods>
<exclude name = "name_of_the_test_method"/>
</methods>
</class>
现在,让我们从同一个CodekruTest类中排除test3()方法。
运行XML文件后的输出
Executing test1 in CodekruTest class
Executing test2 in CodekruTest class
Executing test4 in CodekruTest class
这里我们可以看到test3()方法没有执行。
包括和排除组
让我们用一个类来解释我们例子中包含和排除的组。
CodekruTest.java
public class CodekruTest {
@Test(groups = { "group1","group2" })
public void test1() {
System.out.println("Executing test1 in CodekruTest class");
Assert.assertTrue(true);
}
@Test(groups = { "group2" })
public void test2() {
System.out.println("Executing test2 in CodekruTest class");
Assert.assertTrue(true);
}
@Test(groups = { "group1" })
public void test3() {
System.out.println("Executing test3 in CodekruTest class");
Assert.assertTrue(true);
}
}
包括特定群体
只运行group1下的测试
<suite name="codekru">
<test name="codekruTest">
<groups>
<run>
<include name="group1" />
</run>
</groups>
<classes>
<class name="Test.CodekruTest">
</class>
</classes>
</test>
</suite>
运行上述XML文件后的输出
Executing test1 in CodekruTest class
Executing test3 in CodekruTest class
排除特定的group
现在,让我们尝试排除组1。我们在上面创建的XML文件将保持不变,只是将标记名从include改为exclude。
<suite name="codekru">
<test name="codekruTest">
<groups>
<run>
<exclude name="group1" />
</run>
</groups>
<classes>
<class name="Test.CodekruTest">
</class>
</classes>
</test>
</suite>
运行上述XML文件后的输出
Executing test2 in CodekruTest class