《TestNG的使用》

307 阅读3分钟

一、注解方式

1、常用的注解

  • BeforeSuite:在该套件的所有测试运行之前运行,仅运行一次
  • BeforeTest (运行在每个XML里的test 标签之前,一个test标签里可能包含好几个class):注释的方法将在属于test标签内的所有类的所有测试方法运行之前运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
  • BeforeClass (Class前运行):在调用当前类的第一个测试方法之前运行,在当前类中仅运行一次
  • BeforeGroups:配置方法将在组列表运行之前运行。 此方法保证在调用属于这些组中的任何第一个测试方法之前不久运行
  • BeforeMethod:注释方法将在当前类中的每个测试方法之前运行
  • 测试方法
  • AfterMethod: 注释方法将在当前类中的每个测试方法之后运行
  • AfterGroups:此配置方法将在组列表运行之后运行。该方法保证在调用属于这些组的任何最后一个测试方法之后不久运行
  • AfterClass: 在调用当前类的第一个测试方法之后运行,在当前类中仅运行一次
  • AfterTest:注释的方法将在属于test标签内的所有类的所有测试方法运行之后运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
  • AfterSuite: 在该套件的所有测试运行之后运行,仅运行一次

代码如下:

public class NewTest01{
    @Test(enabled = true)
    public void test1(){
        System.out.println("test1()执行");
    }

    @Test(enabled = true,groups = "1")
    public void test2(){
        System.out.println("test2()执行");
    }

    @BeforeMethod
    public void beforeMethod(){
        System.out.println("5、在测试方法前执行");
    }

    @AfterMethod
    public void afterMethod(){
        System.out.println("6、在测试方法后执行");
    }

    @BeforeGroups(groups = "1")
    public void beforeGroups(){
        System.out.println("4、组前执行");
    }

    @AfterGroups(groups = "1")
    public void afterGroups(){
        System.out.println("7、组后执行");
    }

    @BeforeClass
    public void beforeClass(){
        System.out.println("3、类前执行");
    }

    @AfterClass
    public void afterClass(){
        System.out.println("8、类后执行");
    }

    @BeforeSuite
    public void beforeSuite(){
        System.out.println("1、套前执行");
    }

    @AfterSuite
    public void afterSuite(){
        System.out.println("10、套后执行");
    }

    @BeforeTest
    public void beforeTest(){
        System.out.println("2、测试前执行");
    }

    @AfterTest
    public void afterTest(){
        System.out.println("9、测试后执行");
    }
}

2、异常捕获

//出现了异常也能捕获到
@Test(expectedExceptions = ArithmeticException.class)
public void testException(){
    int i = 10/0;
    System.out.println("结果是" + i);
}

3、超时测试

@Test(timeOut = 2000)
public void testOutofTime() throws InterruptedException {
    Thread.sleep(4000);
}

会报错ThreadTimeoutException。

4、配置数值

@Test
@Parameters({"num1","num2"})
public void testParameter(@Optional(value = "10") int num1 , @Optional(value = "20") int num2){
    System.out.println(num1 + num2);
}

5、传递参数

@Test和@DataProvider配合使用

@DataProvider(name = "providerNums")
public Object[][] provideData(){
    return new Object[][]{{10,20},{100,200,300},{200,300,400}};
}

@Test(dataProvider = "providerNums")
public void testDataProvider(int...args){
    int result = 0;
    for (int i = 0; i < args.length; i++) {
        result += args[i];
    }
    System.out.println(result);
}

6、并行执行

//invocationCount:用来设置用例被重复调用的次数
@Test(threadPoolSize = 3,invocationCount = 10,timeOut = 10000)
public void test1(){
    System.out.println("111");
}

二、xml方式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="D:\笔记和课程\上传代码都在这儿\testng">
        <classes>
            <class name="com.oliver.NewTest01">
                <methods>
                    <include name="test1"/>
                    <include name="test2"/>
                    <include name="testException"/>
                    <include name="testOutOfTime"/>
                    <include name="testDataProvider"/>
                </methods>
            </class>
            <class name="com.oliver.NewTest02">
                <methods>
                    <include name="test1"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>
  • suite:测试套件,其下可以有多个<test>和<groups>
  • name:就是属性名
  • verbose:testNG报告详细程度,从0-10,1是默认,10是最详细
  • parrallel:运行方式,串行和并行方式

1、configFailurePolicy

ConfigFailurePolicy:配置失败策略,也就是在Before、After等方法执行失败时,是继续执行写好的test方法,还是跳过执行。

有两种模式:

  • configfailurepolicy="skip":跳过test方法
  • configfailurepolicy="continue":继续执行test方法

可以使用xml的方式进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite" configfailurepolicy="skip">
    <test verbose="2" preserve-order="true" name="D:\笔记和课程\上传代码都在这儿\testng">
        <classes>
            <class name="com.oliver.NewTestNG01">
                <methods>
                    <include name="test01"/>
                    <include name="test02"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

这里进行测试:

public class NewTestNG01 {    @Test    public void test01() {        System.out.println("test01()方法执行");    }    @Test    public void test02(){        System.out.println("test02()方法执行");    }    @BeforeTest    public void beforeTest() {        int i = 10 / 0;        System.out.println("beforeTest()方法执行");    }    @AfterTest    public void afterTest() {        System.out.println("afterTest()方法执行");    }}