Java学习笔记-TestNG注解

一.注解

前面TestNG入门使用中说的每一个特点就是TestNG的使用,比如第一个特点是注解,那下面就看看注解到底如何使用的。

注解描述
@BeforeSuite在该套件的所有测试都运行在注释的方法之前,仅运行一次。
@AfterSuite在该套件的所有测试都运行在注释方法之后,仅运行一次。
@BeforeClass在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@AfterClass在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。
@AfterTest注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。
@BeforeGroups配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@BeforeMethod注释方法将在每个测试方法之前运行。
@AfterMethod注释方法将在每个测试方法之后运行。
@DataProvider

标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。

@Factory将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []
@Listeners定义测试类上的侦听器。
@Parameters描述如何将参数传递给@Test方法。
@Test将类或方法标记为测试的一部分。

注意:套件测试是什么东西? - 套件测试是一起运行的多个测试类。

二.使用

1.不知道大家发现没有,虽然注解很多,但其实前大半部分注解的都是类似的,比如BeforeSuite,那就对应一个AferSuite,其他也是类似的,所以在这里,只会挑其一进行说明。

以代码展示,大家就会清楚很多,上代码

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

/**
 * @Author xx
 * @Date 2020/11/22
 **/
public class TestAnnotation {
    @Test
    public void test(){
        System.out.println("test");
    }

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

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

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

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

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

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

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

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

    @BeforeGroups
    public void testBeforeGroups(){
        System.out.println("BeforeGroups");
    }

    @AfterGroups
    public void testAfterGroups(){
        System.out.println("AfterGroups");
    }

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

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

输出结果如下:


BeforeSuite


BeforeTest


BeforeClass


BeforeMethod


test


AfterMethod


BeforeMethod


test1


AfterMethod


BeforeMethod


test2


AfterMethod


AfterClass


AfterTest


AfterSuite


===============================================
Default Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

 

2.@DataProvider

what:标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。

why:

  1. DataProvider可以实现类似Factory的数据驱动的测试,而且使用DataProvider的时候,被测试方法所在的类只被创建一次,只是方法被调用多次,所以比较省时省力
  2. DataProvider还可以实现懒加载,在需要测试大量数据的时候可以一条一条的加载数据,而不需要一次性把数据加载到内存中,避免了内存的浪费,和可能的内存不够用的危险

how:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * @Author xx
 * @Date 2020/11/22
 **/
public class TestDataProvider {

    @DataProvider(name = "provider")
    public Object[][] dataProvider(){
        Object [][] provider = new Object [5][2];
        for (int i = 0; i < provider.length; i++) {
            provider[i][0] = "name"+i;
            provider[i][1] = i+10;
        }

        return provider;
    }


    @Test(dataProvider="provider")
    public void testDataProvider(String name,int age){
        System.out.println(name+"_"+age);
    }
}

输出结果如下:


name0_10


name1_11


name2_12


name3_13


name4_14


===============================================
Default Suite
Total tests run: 5, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

 

3.@Factory

what:将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []

why:

@Factory必须放在一个返回对象数组的顶部,所有的这些对象都包含测试类的实例,testng会确保@Factory只被调用一次。

@Factory方法是首先被调用的,在@Test方法和配置方法之前,只有当所有的@Factory方法被调用之后,testng才开始执行配置和测试方法。

@Factory允许在运行时动态测试。

@Factory注解的方法必须是返回一个对象数组的方法。而且这些返回的对象数组中的对象必须包含TestNG annotation的类的实例。

how:

import org.testng.annotations.Factory;
import org.testng.annotations.Test;

/**
 * @Author xx
 * @Date 2020/11/22
 **/
public class TestFactory {

    @Test
    public void simpleTest1(){
        System.out.println("simple test one");
    }
    @Test
    public void simpleTest2(){
        System.out.println("simple test two");
    }

    @Factory
    public Object[] factoryMethod() {
        return new Object[] { new TestFactory(), new TestFactory() };
    }
}

输出结果如下:

simple test one


simple test one


simple test two


simple test two


===============================================
Default Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

 

4.@Listeners

 

5.@Parameters

how:java类中定义参数名@Parameters("paraName" });在TestNG.xml中设置参数值<parameter name="paraName"  value="paraValue"/>

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

/**
 * @Author xx
 * @Date 2020/11/22
 **/
public class TestParameters {

    @Parameters({ "first-name" })
    @Test
    public void test(String name){
        System.out.println("name:"+name);
    }
}

对应的xml文件如下

<suite name="Suite" parallel="classes" thread-count="3">
    <test verbose="2" preserve-order="true" name="TestDebug">
        <parameter name="first-name" value="名称" />
        <classes>
            <class name="TestParameters" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值