目录
如果一个测试用例属于多个组怎么办?如果我们排除其中一组,它会运行吗?
现在,如果我们在同一个XML文件中同时使用include和exclude标记会怎么样?到时候会发生什么?
Groups of groups
正则表达式的使用
在class级别上建立groups
有时我们必须将测试用例划分为不同的集合,以识别它们正在验证的场景。比如,我们可以有一组测试用例,只确定系统的功能,然后有另一组测试用例,将验证系统的UI部分,以及更多类似的测试用例。这些测试用例集在TestNG中称为组。因此,TestNG允许我们创建一组不同的测试方法或用例,而不管它们在项目中的位置。(它们可能在不同的类,不同的包中)等等。
关于TestNG组需要记住的几点-
现在,让我们继续在TestNG中创建组。
现在,我们如何才能使一个测试用例,一个组的一部分?我们必须使用TestNG注释的groups属性
@Test(groups = { "groupName1","groupName2" })
我们将使用两个组--group 1和group 2来向您展示组在TestNG中是如何工作的。下面是我们的CodekruTest类,我们将有属于不同组的测试方法。
public class CodekruTest {
@Test(groups = { "group1" })
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的XML文件
运行XML文件后的输出-
Executing test1 in CodekruTest class
Executing test3 in CodekruTest class
您可以看到只有属于group1的测试用例被执行。这就是我们只能运行某些特定组的方式。
那么,我们如何排除群体呢?
为此,我们必须使用exclude标记,而不是上面XML文件中编写的include标记。因此,如果我们想排除group1运行,那么我们将以下面的方式创建TestNG XML文件
输出
Executing test2 in CodekruTest class
因此,除了group1之外的所有其他组都将被执行。
让我们再次看看我们的CodekruTest类,并将其中一个测试用例(比如test1)包含到两个组(group1和group2)中。
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);
}
}
让我们再次看看我们的CodekruTest类,并将其中一个测试用例(比如test1)包含到两个组(group1和group2)中。
输出-
Executing test2 in CodekruTest class
我们可以看到test1没有被执行,但是如果我们现在使用包含组功能呢?
输出-
Executing test1 in CodekruTest class
Executing test3 in CodekruTest class
因此,您可以在这里看到test1()和test3()方法都被执行,这就是TestNG中属于多个组的测试的工作方式。
嗯,这似乎很有趣,所以,让我们试试吧
产出-
Executing test3 in CodekruTest class
在本例中,test1没有运行,只有test3被执行,因为它属于group1。
测试用例总是会出现故障,但有时我们没有时间来修复它。所以,让我们假设我们有一个属于功能组的测试用例,因为它测试系统的功能,但现在由于某种原因而被破坏。我们可以把这个测试放到一个破组中,然后把它从执行中排除出去,这样我们就可以把所有这样的测试用例放到这个破组中,然后阻止这个破组本身执行。
@Test(groups = { "functional","broken" })
public void testName()
组还可以包括其他组,这些组被称为元组。现在,假设我们想要运行CodekruTest类的所有组(group1和group2)。这里我们可以定义一个新的组(比如all),它将包含两个组(group1和group2),并将运行该组的两个测试用例。
输出-
Executing test1 in CodekruTest class
Executing test2 in CodekruTest class
Executing test3 in CodekruTest class
注意:记住,在定义组时不要使用exclude标签。
假设我们有几个组,如group1,group2。group3等等。现在,我们想执行所有这些组,但如果我们对所有组逐一使用include标记,这将是令人厌倦的。在这种情况下,我们可以使用正则表达式,如图所示。
我们修改了CodekruTest类,以包含更多的组。
产出-
Executing test1 in CodekruTest class
Executing test2 in CodekruTest class
Executing test3 in CodekruTest class
Executing test4 in CodekruTest class
如果你想了解各种正则表达式符号,那么我们建议你阅读这篇文章。
我们也可以在班级层面上进行分组。如果我们这样做,那么该类的所有方法都将属于该组。如果我们还决定给予这个类的一个测试方法,它自己的一个组,那么这个测试方法现在将属于两个组。
@Test(groups = {"classGroup"})
public class CodekruTest {
@Test(groups = { "group1" })
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);
}
}
这里test1()同时属于group1和classGroup,test2()也属于两个组(group2和classGroup)。现在,让我们运行classGroup组,看看会发生什么。
输出-
Executing test1 in CodekruTest class
Executing test2 in CodekruTest class
有两个TestNG注释(@BeforeGroups和@AfterGroups)围绕组工作,并帮助我们为特定组做一些设置或清理工作。