TestNG学习笔记

本文详细介绍了TestNG测试框架的特性,包括注解的使用、测试组的概念、套件测试的配置、依赖测试的实现以及参数的提供方式。TestNG支持注解直接在测试方法上,提供灵活的运行时配置,支持并行测试、负载测试等功能,同时可以通过XML文件进行测试套件的定义和参数的传递。
摘要由CSDN通过智能技术生成

是一个测试框架。

1. 特点:

1)注解

2)TestNG 使用Java和面向对象的功能

3)支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)

4)独立的编译时测试代码和运行时配置/数据信息

5)灵活的运行时配置

6)主要介绍“测试组”。当编译测试,只要要求TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

7)支持依赖测试方法,并行测试,负载测试,局部故障

8)灵活的插件API

9)支持多线程测试


2. 注解 直接在test方法前进行

  • @BeforeSuite - 对于套件测试,在此套件中的所有测试运行之前运行。
  • @AfterSuite - 对于套件测试,在此套件中的所有测试运行之后运行。

  • @BeforeTest - 对于套件测试,在运行属于<test>标签内的类的任何测试方法之前运行。

  • @AfterTest - 对于套件测试,在运行属于<test>标签内的类的所有测试方法都已运行之后运行。

  • @BeforeGroups:在调用属于该组的第一个测试方法之前运行。

  • @AfterGroups:在调用属于组的最后一个测试方法之后运行。

  • @BeforeClass- 在当前类的第一个测试方法之前运行。

  • @AfterClass - 运行当前类中的所有测试方法之后都运行。

  • @BeforeMethod - 在每个测试方法之前运行。

  • @AfterMethod - 在每个测试方法之后运行。
package com.yiibai;
import org.testng.annotations.Test;

public class TestDBConnection {
    @Test
    public void runOtherTest1() {
        System.out.println("@Test - runOtherTest1");
    }
    @Test
    public void runOtherTest2() {
        System.out.println("@Test - runOtherTest2");
    }
}
3.  异常--预期的异常

@Test(expectedExceptions = ArithmeticException.class)

4. 忽略该测试方法---默认为true

@Test(enabled = false)
5. 超时测试---超过时间未完成视为失败

 @Test(timeOut = 5000)
6. 分组测试---将方法分组

1). 方法的分组

    @Test(groups = "GroupA")
    public void testConnectOracle() {
        System.out.println("testConnectOracle()");
    }

关于分组的注解使用方法:

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

2)类的分组--该类的每个公共方法都属于分组

package com.yiibai;
import org.testng.annotations.Test;

@Test(groups = "GroupB")
public class TestSelenium {
    public void runSelenium() {
      System.out.println("runSelenium()");
    }
    public void runSelenium1() {
        System.out.println("runSelenium()1");
    }
}

3)每个方法可以属于多个组


7. 套件测试 suite   在xml文件中配置

测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,因为套件是执行的功能。 它还允许灵活配置要运行的测试。 套件可以包含一个或多个测试,并由<suite>标记定义。

<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestAll">

    <test name="order">
        <classes>
            <class name="com.yiibai.TestConfig" />
            <class name="com.yiibai.TestOrder" />
        </classes>
    </test>

</suite>

1)执行包的名称

<suite name="TestAll">

    <test name="order">
        <packages>
            <package name="com.yiibai.*" />
        </packages>
    </test>

</suite>

2)指定包含或排除方法

<include> 包括

<exclude> 排除

<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestAll">

  <test name="order">
    <classes>
        <class name="com.yiibai.TestConfig" />
        <class name="com.yiibai.TestOrder">
            <methods>
                <include name="testMakeOrder" />
                <exclude name="testUpdateOrder" />           
            </methods>
        </class>
    </classes>
  </test>

</suite>

8. 依赖测试

1)依赖于方法

该方法依赖于method1,method1成功则执行,失败则跳过

 @Test(dependsOnMethods = { "method1" })

2)依赖于组

 @Test(dependsOnGroups={"deploy","db"})

9. 参数提供

1)XML提供参数

2)通过@DataProvider

该例子是传递一个数,还可以传递map


package com.yiibai;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider {
    @Test(dataProvider = "provideNumbers")
    public void test(int number, int expected) {
        Assert.assertEquals(number + 10, expected);
    }
    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {
        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }
}

3)@DataProvide + 方法

根据测试方法名称不同选择传递不同的参数

package com.yiibai;

import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider3 {

    @Test(dataProvider = "dataProvider")
    public void test1(int number, int expected) {
        Assert.assertEquals(number, expected);
    }

    @Test(dataProvider = "dataProvider")
    public void test2(String email, String expected) {
        Assert.assertEquals(email, expected);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(Method method) {

        Object[][] result = null;
        if (method.getName().equals("test1")) {
            result = new Object[][] {
                { 1, 1 }, { 200, 200 }
            };
        } else if (method.getName().equals("test2")) {
            result = new Object[][] {
                { "test@gmail.com", "test@gmail.com" },
                { "test@yahoo.com", "test@yahoo.com" }
            };
        }
        return result;
    }
}
4)@DataProvide + ITestContext

在TestNG中,我们可以使用org.testng.ITestContext来确定调用当前测试方法的运行时参数




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值