Testng系列学习一:基本注解和参数化

本人博客目录链接
该文章相关实现代码可参考该项目代码

一、官网及安装

  • Testng官网:https://testng.org/doc/index.html
  • 通过Maven安装Testng:
  
    6.14.3
  

  
      
        org.testng
        testng
        ${testng-version}
      
  

Testng系列学习一:基本注解和参数化_第1张图片
Testng系列学习一:基本注解和参数化_第2张图片

二、Testng相关注解

2.1 基本的注解

  • 9大基本注解

这9个注解是常用中的注解,然后执行顺序是图中从上至下的顺序。其中需要注意的是@BeforeTest和@BeforeClass的执行顺序,很容易记混,可以参考第二张图。
Testng系列学习一:基本注解和参数化_第3张图片
Testng系列学习一:基本注解和参数化_第4张图片

package com.yff.test;

import org.testng.annotations.*;

public class TestngDemo {

    @BeforeSuite
    public void test1(){
        System.out.println("BeforeSuite");
    }

    @BeforeTest
    public void test2(){
        System.out.println("BeforeTest");
    }

    @BeforeClass
    public void test3(){
        System.out.println("BeforeClass");
    }

    @BeforeMethod
    public void test4(){
        System.out.println("BeforeMethod");
    }

    @Test
    public void test5(){
        System.out.println("Test");
    }

    @Test
    public void test51(){
        System.out.println("Test");
    }

    @AfterMethod
    public void test6(){
        System.out.println("AfterMethod");
    }

    @AfterClass
    public void test7(){
        System.out.println("AfterClass");
    }

    @AfterTest
    public void test8(){
        System.out.println("AfterTest");
    }

    @AfterSuite
    public void test9(){
        System.out.println("AfterSuite");
    }
}

  • 其他注解
    • @BeforeGroups和@AfterGroups是要配合@Test中groups属性来使用,@Test中的groups属性可以将测试方法分组。实际应用可以如下:UI自动化测试中,每个功能点进入页面并判断页面是否正常的这个测试方法,可以分组,后续可以只运行该分组的测试方法,而@BeforeGroups和@AfterGroups就是在这个分组的测试方法前后执行的。
    • @DataProvider和@Factory注解,我通常使用的比较少,这两个的作用是来做参数化的,但是我更喜欢用XML的方式来做参数化。
    • @Listeners是用来定义测试类的监听器,但是实际应用中,不会去每个测试类上添加这个注解。而是在将测试类放在对应的test标签中,然后test标签放在suite标签中,并在suite标签中添加listeners,并执行测试类,这样的一个suite标签对应一个xml。
    • @Parameters一般与@Optional一起使用,@Parameters用于方法中需要的参数名,而@Optional给定参数默认值,后续会在参数化中写。
      Testng系列学习一:基本注解和参数化_第5张图片
      Testng系列学习一:基本注解和参数化_第6张图片

2.2 @Test注解的相关属性

相关属性有如下这些,我一般只用了第一个priority来设置优先级。

/*设置优先级 数字越小,优先级越高*/
@Test(priority = 1)
/*设置是否执行 false为不执行*/
@Test(enabled = false)
/*预期异常测试*/
@Test(expectedExceptions = ArithmeticException.class)
/*限定超时时间*/
@Test(timeOut = 5000)
/*分组*/
@Test(groups="group1")

/*依赖测试:即为测试用例特定顺序执行,方法间共享数据或状态*/
/*依赖于特定方法*/
@Test(dependsOnMethods= {"TestNgLearn1"})

/*依赖于特定的组*/
@Test(dependsOnGroups = { "init.*" })
此处init为分组的名称

/*依赖分为hard依赖、soft依赖
hard依赖:默认为此依赖,依赖的必须都pass,否则skip
soft依赖:并不受到依赖是否都pass,就是没有绝对的因果关系。
使用方法:@Test(dependsOnMethods= {"TestNgLearn1"},alwaysRun=true)
*/

2.3 注意点

在@Test的注解加入group属性,@BeforeClass等修饰的方法将不能执行,所以使用(alwaysRun=true)来指定其一定执行。所以一般必须运行的方法,例如@BeforeTest、@BeforeClass、@AfterTest这些注解的方法,都添加了(alwaysRun = true),变为@BeforeClass(alwaysRun = true)

三、Testng参数化

3.1 XML实现参数化基本流程

//例如,这里是登录的方法,将用户名和密码参数化,并给定默认值
@BeforeClass(alwaysRun = true)
@Parameters({"user", "pwd"})
public void loginClass(@Optional("13200000023") String user, 
    @Optional("666666") String pwd) throws Exception{}

//然后在对应的XML文件中给参数不同的值,这样实际场景中就可以达到不同账号登陆


3.2 测试套件(suite)-XML案例

测试套件(suite):是用于测试软件程序的行为或一组行为的测试用例的集合,用XML的形式来展现。





    
		
    
        
            
        
    
    
        
        
    

3.3 测试套件-相关参数

一般来说,我使用的参数设置是name、parallel、thread-count。

  1. name:套件名称、强制属性
  2. parallel:是否并行,默认为none,即为串行,其他级别为methods、tests、classes、instance。一般设置为tests,然后设置thread-count的值,设置为tests之后,Testng将同一个线程中运行相同的标签中的所有方法。
  3. thread-count:如果并行,使用的线程数
  4. verbose:运行级别或者详细程度,0-10,10最大
  5. annotations:在测试中使用的注释类型
  6. time-out:都使用默认超时
  7. group-by-instances:此项用于那些有依赖的方法,且被依赖的对象有多个重载对象,因为如果是依赖方法,且该方法有多个重载方法,则默认是会将所有重载方法都跑完再运行被依赖方法,但有时候我们不想这样,则将此项设置为true即可;
  8. preserve-order:如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;

3.4 测试套件 suite-files标签

在实际框架中,应该是多人编写代码,但是不可能每个人都在编写完新增的功能点的Test之后,都去添加到唯一的XML中,所以使用suite-files标签可以将测试套件的XML进行拆分。





    
    
    

    
    
        
        
    
    
    
    
        
        
    


你可能感兴趣的:(UI自动化测试)