TestNG使用方法

1. 在idea中新建一个maven项目

2. 在pom.xml中添加testng和reportng依赖

<dependencies>
        <!-- 添加testNG依赖 -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.11</version>
            <scope>test</scope>
        </dependency>
        <!-- 添加reportNG依赖 -->
        <dependency>
            <groupId>org.uncommons</groupId>
            <artifactId>reportng</artifactId>
            <version>1.1.2</version>
            <scope>test</scope>
            <!-- 排除testNG依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>org.testng</groupId>
                    <artifactId>testng</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

3.注解使用

@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    将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法
expectedExceptions 异常
enabled  忽略
timeOut 超时
groups 分组测试
suite 套件
依赖测试
参数化测试

4.xml 文件 调用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
    <parameter name="userName" value="kiki" />
    <parameter name="Age" value="5"/>
    <parameter name="Address" value="南京"/>
    <test name="Test">
        <classes>
            <class name="com.taobaoxue.day03.ParameterByXML" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

5.java方法

public class ParameterByXML {
    @BeforeTest
    public void beforeTest() {
        System.out.println("beforeTest");
    }
 
    @Parameters({ "userName", "Age", "Address" })
    @Test
    public void test(String username, int age, String address) {
        System.out.println(username + "---" + age + "---" + address);
    }
 
    @AfterTest
    public void afterTest() {
        System.out.println("afterTest");
    }
}
 

详细使用

1.预期异常测试通过在@Test注解后加入预期的Exception来进行添加,范例如下所示:
@Test(expectedExceptions = ArithmeticException.class)
    public void divisionWithException() {
        int i = 1 / 0;
        System.out.println("After division the value of i is :"+ i);
    }
2.有时候我们写的用例没准备好,或者该次测试不想运行此用例,那么删掉显然不明智,那么就可以通过注解@Test(enabled = false)来将其忽略掉,此用例就不会运行了,如下范例:

import org.testng.annotations.Test;

public class TestCase1 {

    @Test(enabled=false)
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
    }
    
    @Test
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}
3.“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。此项常用于性能测试。如下为一个范例:

import org.testng.annotations.Test;

public class TestCase1 {

    @Test(timeOut = 5000) // time in mulliseconds
    public void testThisShouldPass() throws InterruptedException {
        Thread.sleep(4000);
    }

    @Test(timeOut = 1000)
    public void testThisShouldFail() {
        while (true){
            // do nothing
        }

    }
}

4.分组测试
分组测试即为使用group,如果你使用xml的话就是里边的<groups>标签,如果是直接在class中,是通过@Test(groups="group2")这种方式来分组,如第四节的注解说明中的那个例子,分了两个group,而且@BeforeGroup是需要添加group名称才可以正确挂载到该group下的;
这个group说明可以是在单个的测试方法上,也可以在class上,只要具有同样的group名称都会在同一个group中,同时group名称可以有多个,类似@Test(groups = {"mysql","database"})这种,范例如下:
一个测试文件NewTest.class:

public class NewTest {

  @Test(groups="group1")
  public void test1() {
      System.out.println("test1 from group1");
      Assert.assertTrue(true);
  }
  
  @Test(groups="group1")
  public void test11() {
      System.out.println("test11 from group1");
      Assert.assertTrue(true);
  }
  
  @Test(groups="group2")
  public void test2() 
  {
      System.out.println("test2 from group2");
      Assert.assertTrue(true);
  }
  
  @BeforeTest
  public void beforeTest() 
  {
      System.out.println("beforeTest");
  }
  
  @AfterTest
  public void afterTest() 
  {
      System.out.println("afterTest");
  }
  
  @BeforeClass
  public void beforeClass() 
  {
      System.out.println("beforeClass");
  }
  
  @AfterClass
  public void afterClass() 
  {
      System.out.println("afterClass");
  }
  
  @BeforeSuite
  public void beforeSuite() 
  {
      System.out.println("beforeSuite");
  }
  
  @AfterSuite
  public void afterSuite() 
  {
      System.out.println("afterSuite");
  }
  
  @BeforeGroups(groups="group1")
  public void beforeGroups() 
  {
      System.out.println("beforeGroups");
  }
  
  @AfterGroups(groups="group1")
  public void afterGroups() 
  {
      System.out.println("afterGroups");
  }
  
  @BeforeMethod
  public void beforeMethod() 
  {
      System.out.println("beforeMethod");
  }
  
  @AfterMethod
  public void afterMethod() 
  {
      System.out.println("afterMethod");
  }
 
另一个TestCase1.class:

@Test(groups= "group2")
public class TestCase1 {

    @Test(enabled=false)
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
    }
    
    @Test
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <groups>
      <incloud name="group1"></incloud>
      <incloud name="group2"></incloud>
    </groups>
    <classes>
      <class name="com.demo.test.testng.NewTest"/>
      <class name="com.demo.test.testng.TestCase1"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

运行结果如下:

beforeSuite
beforeTest
beforeClass
beforeGroups
beforeMethod
test1 from group1
afterMethod
beforeMethod
test11 from group1
afterMethod
afterGroups
beforeMethod
test2 from group2
afterMethod
afterClass
this is TestNG test case2
afterTest
afterSuite

如上所示,先运行了group1的两个用例,再运行group2的两条用例;
注意在xml标识group,需要将要运行的group加进来,同时还要将被标识这些group的class也加进来,不被加进去的不会运行;

5.分suite测试
测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,因为套件是执行的功能。 它还允许灵活配置要运行的测试。 套件可以包含一个或多个测试,并由<suite>标记定义。<suite>是testng.xml的根标记。 它描述了一个测试套件,它又由几个<test>部分组成。
下表列出了<suite>接受的所有定义的合法属性。

属性    描述
suite标签 testNG.xml文件的最外层标签即suite,即测试套件,其下可以有多个<test>和<groups>,其有几个可以添加的属性在第十节的分suite测试中有做说明,这里做下详细说明:
name    套件的名称,这是一个强制属性
verbose    运行的级别或详细程度,级别为0-10,其中10最详细
parallel    TestNG是否运行不同的线程来运行这个套件,默认为none,其他级别为methods、tests、classes、instances
thread-count    如果启用并行模式(忽略其他方式),则为使用的线程数
annotations    在测试中使用的注释类型
time-out    在本测试中的所有测试方法上使用的默认超时
group-by-instances属性
preserve-order属性 可输入true或者false,如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;
threadPoolSize 该属性指定此test的线程池大小,为数字;
invocationCount 该属性指定此test的运行次数,为数字,范例如上面的代码所示;
group-by-instances 此项用于那些有依赖的方法,且被依赖的对象有多个重载对象,因为如果是依赖方法,且该方法有多个重载方法,则默认是会将所有重载方法都跑完再运行被依赖方法,但有时候我们不想这样,则将此项设置为true即可;
preserve-order 属性可输入true或者false,如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;

6.依赖测试
有时,我们可能需要以特定顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。 TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。
TestNG允许指定依赖关系:

在@Test注释中使用属性dependsOnMethods
在@Test注释中使用属性dependsOnGroups
除此之外依赖还分为hard依赖和soft依赖:

hard依赖:默认为此依赖方式,即其所有依赖的methods或者groups必须全部pass,否则被标识依赖的类或者方法将会被略过,在报告中标识为skip,如后面的范例所示,此为默认的依赖方式;
soft依赖:此方式下,其依赖的方法或者组有不是全部pass也不会影响被标识依赖的类或者方法的运行,注意如果使用此方式,则依赖者和被依赖者之间必须不存在成功失败的因果关系,否则会导致用例失败。此方法在注解中需要加入alwaysRun=true即可,如@Test(dependsOnMethods= {"TestNgLearn1"}, alwaysRun=true);

7.参数化测试
TestNG中的另一个有趣的功能是参数化测试。 在大多数情况下,您会遇到业务逻辑需要大量测试的场景。 参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。
TestNG可以通过两种不同的方式将参数直接传递给测试方法:

使用testng.xml
使用数据提供者
下面分别介绍两种传参方式:
1、使用textng.xml传送参数
范例代码如下:

public class TestCase1 {

    @Test(enabled=true)
    @Parameters({"param1", "param2"})
    public void TestNgLearn1(String param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
    
    @Test(dependsOnMethods= {"TestNgLearn1"})
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}
xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <parameter name="param1" value="1011111" />
    <parameter name="param2" value="10" />
    <classes>
      <class name="com.demo.test.testng.TestCase1"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

运行xml,结果如下:

this is TestNG test case1, and param1 is:1011111; param2 is:10
this is TestNG test case2

===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

2、使用@DataProvider传递参数
此处需要注意,传参的类型必须要一致,且带有@DataProvider注解的函数返回的必然是Object[][],此处需要注意。
代码如下:

public class TestCase1 {

    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {

        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }
    
    @Test(dataProvider = "provideNumbers")
    public void TestNgLearn1(int param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
    
    @Test(dependsOnMethods= {"TestNgLearn1"})
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

运行此class,结果为:

this is TestNG test case1, and param1 is:10; param2 is:20
this is TestNG test case1, and param1 is:100; param2 is:110
this is TestNG test case1, and param1 is:200; param2 is:210
this is TestNG test case2
PASSED: TestNgLearn1(10, 20)
PASSED: TestNgLearn1(100, 110)
PASSED: TestNgLearn1(200, 210)
PASSED: TestNgLearn2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TestNG是一个Java的框架,所以第一个要求是JDK要安装在你的机器上。 系统要求 JDK 1.5或以上 内存 没有最低要求 磁盘空间 没有最低要求 操作系统 没有最低要求 步骤1 -验证Java安装在你的机器上 现在,打开控制台并执行以下的java命令。 OS 任务 命令 Windows 打开命令控制台 c:\> java -version Linux 打开命令终端 $ java -version Mac 打开命令终端 machine:~ joseph$ java -version 让我们来验证所有的操作系统的输出: OS 输出 Windows java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) Linux java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) Mac java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) 如果你没有安装Java,安装Java软件开发工具包(SDK)点击: http://www.oracle.com/technetwork/java/javase/downloads/index.html. 我们假设本教程中安装和使用Java1.7.0_25版本。 第二步:设置JAVA环境 设置JAVA_HOME环境变量指向的基本目录的位置,在你的机器上安装Java。例如: OS 输出 Windows 设置环境变量 JAVA_HOME 为 C:\Program Files\Java\jdk1.7.0_25 Linux export JAVA_HOME=/usr/local/java-current Mac export JAVA_HOME=/Library/Java/Home 添加Java编译器的位置,系统路径。 OS 输出 Windows Append the string; C:\Program Files\Java\jdk1.7.0_25\bin to the end of the system variable, Path. Linux export PATH=$PATH:$JAVA_HOME/bin/ Mac not required 验证Java安装使用命令java-version如上所述。 第3步:下载TestNG的归档文件 下载最新版本的TestNG的jar文件,详细请点击访问 http://www.testng.org.。在写这篇教程的时候,我下载TestNG中-6.8.jar,并将 testng-6.8.jar 其复制到 C:\>TestNG 目录。 OS 压缩文件名 Windows testng-6.8.jar Linux testng-6.8.jar Mac testng-6.8.jar 步骤4:设置TestNG的环境 设置TESTNG_HOME环境变量指向TestNG的jar 存放在您的机器上的基本目录位置。假设,我们已经储存了testng-6.8.jar, TestNG各种操作系统上的文件夹如下: OS 输出 Windows Set the environment variable TESTNG_HOME to C:\TESTNG Linux export TESTNG_HOME=/usr/local/TESTNG Mac export TESTNG_HOME=/Library/TESTNG 第5步:设置CLASSPATH变量 设置CLASSPATH环境变量指向TestNG的jar文件位置。假设,我们已经储存了testng-6.8.jar, TestNG在各种操作系统上的文件夹如下: OS 输出 Windows 设置环境变量 CLASSPATH 为 %CLASSPATH%;%TESTNG_HOME%\testng-6.8.jar; Linux export CLASSPATH=$CLASSPATH:$TESTNG_
1. 安装 TestNG 插件 在 IntelliJ IDEA 中打开“Settings”,然后选择“Plugins”选项卡。 在“Plugins”选项卡上,点击“Browse repositories”按钮,输入 TestNG 并搜索。 找到 TestNG 插件,点击“Install”按钮进行安装。 点击“Restart IntelliJ IDEA”按钮完成安装。 2. 创建 TestNG 测试类 在 IntelliJ IDEA 中创建一个 Java 项目。 在项目中创建一个 Java 类文件。 在 Java 类文件中添加 TestNG 的注解和测试方法。 例如: ```java import org.testng.annotations.Test; public class TestNGExample { @Test public void test1() { System.out.println("This is TestNG Test 1"); } @Test public void test2() { System.out.println("This is TestNG Test 2"); } } ``` 3. 运行 TestNG 测试 在 IntelliJ IDEA 中,右键单击 TestNG 测试类文件,然后选择“Run 'TestNGExample'”选项。 或者,可以在 IntelliJ IDEA 的顶部菜单栏中选择“Run”->“Run 'TestNGExample'”。 测试结果将在控制台中显示。 4. 配置 TestNG 在 IntelliJ IDEA 中,打开“Settings”,然后选择“Build, Execution, Deployment”->“Build Tools”->“TestNG”选项。 在“Test Runner”选项卡中,可以配置 TestNG 用于运行测试的方式。 在“Listeners”选项卡中,可以配置 TestNG 启动、完成等事件的监听器。 在“Templates”选项卡中,可以配置 TestNG 用于生成测试类和测试方法的模板。 5. 使用 TestNG 测试报告 在 IntelliJ IDEA 中,可以使用 TestNG 的测试报告功能。 在“Run”窗口中,右键单击测试运行结果,然后选择“Export”->“TestNG report”。 可以选择导出测试报告的格式和路径。 导出的测试报告包含测试结果、测试用例等信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值