TestNG groups的详细示例

目录

如果一个测试用例属于多个组怎么办?如果我们排除其中一组,它会运行吗?

现在,如果我们在同一个XML文件中同时使用include和exclude标记会怎么样?到时候会发生什么?

Groups of groups

正则表达式的使用

在class级别上建立groups


有时我们必须将测试用例划分为不同的集合,以识别它们正在验证的场景。比如,我们可以有一组测试用例,只确定系统的功能,然后有另一组测试用例,将验证系统的UI部分,以及更多类似的测试用例。这些测试用例集在TestNG中称为组。因此,TestNG允许我们创建一组不同的测试方法或用例,而不管它们在项目中的位置。(它们可能在不同的类,不同的包中)等等。

关于TestNG组需要记住的几点-

  • TestNG组由groups标记表示。
  • 一个测试用例可以属于一个或多个组。Eg.测试用例可以是健全组和功能组的一部分。
  • 组可以包括其他组。这些组被称为元组。
  • 我们可以在XML文件中包含特定的组,以便在执行XML文件时仅运行这些组。
  • 同样,我们也可以排除组,以便除了被排除的组之外,所有组都运行。
  • 组可以在suite标签或test标签下找到。<在suite标签中指定的groups标签将应用于它下面的所有测试标签,但是在test标签中指定的groups标签将仅限于该测试。
  • 我们也可以在类级别定义组。然后该类中的所有测试方法都将属于该组。

现在,让我们继续在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中属于多个组的测试的工作方式。

现在,如果我们在同一个XML文件中同时使用include和exclude标记会怎么样?到时候会发生什么?

嗯,这似乎很有趣,所以,让我们试试吧


    
        
            
                
                
            
        
 
        
            
            
        
    

产出-

Executing test3 in CodekruTest class

在本例中,test1没有运行,只有test3被执行,因为它属于group1。

测试用例总是会出现故障,但有时我们没有时间来修复它。所以,让我们假设我们有一个属于功能组的测试用例,因为它测试系统的功能,但现在由于某种原因而被破坏。我们可以把这个测试放到一个破组中,然后把它从执行中排除出去,这样我们就可以把所有这样的测试用例放到这个破组中,然后阻止这个破组本身执行。

@Test(groups = { "functional","broken" })
public void testName()
Groups of groups

组还可以包括其他组,这些组被称为元组。现在,假设我们想要运行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

如果你想了解各种正则表达式符号,那么我们建议你阅读这篇文章。

在class级别上建立groups

我们也可以在班级层面上进行分组。如果我们这样做,那么该类的所有方法都将属于该组。如果我们还决定给予这个类的一个测试方法,它自己的一个组,那么这个测试方法现在将属于两个组。

 

@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)围绕组工作,并帮助我们为特定组做一些设置或清理工作。

你可能感兴趣的:(unit,testing)