TestNG单元测试

TestNG 官方网址:http://testng.org/doc/

TestNG 是一个测试框架的灵感来自JUnit和NUnit,但引入一些新的功能,使它更强大和更容易使用,如:

  • 注释。
  • 在任意大线程池中运行测试,并提供各种策略(所有方法都在自己的线程中,每个测试类有一个线程,等等)。
  • 测试你的代码多线程是安全的。
  • 灵活的测试配置。
  • 数据驱动的测试支持(@dataProvider)。
  • 参数支持。
  • 强大的执行模型(不再有TestSuite)。
  • 通过各种工具和插件支持(Eclipse, IDEA, Maven 等..)。
  • 通过进一步的灵活性Beanshell。
  • 运行时和日志的默认JDK功能(无依赖性)。
  • 应用服务器测试的相关方法。

安装与使用

安装

基于Maven,pom.xml配置如下

    
        
            org.testng
            testng
            6.10
        
    

第一个测试用例

import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
public class FirstTest {
    @Test
    public void testCase(){
        assertEquals(2+2, 4);
    }
}
  • 通过 @Test 注解一个方法为测试用例。
  • 通过 assertEquals() 方法来断言两个数是否相等。

Fixture 方法

TestNG单元测试_第1张图片
image.png

接下来通过例子演示上面部分注解的用法。

import org.testng.annotations.*;

public class FixtureTest {
    //在当前测试类开始时运行。
    @BeforeClass
    public static void beforeClass() {
        System.out.println("-------------------beforeClass");
    } //在当前测试类结束时运行。

    @AfterClass
    public static void afterClass() {
        System.out.println("-------------------afterClass");
    } //每个测试方法运行之前运行

    @BeforeMethod
    public void before() {
        System.out.println("=====beforeMethod");
    } //每个测试方法运行之后运行

    @AfterMethod
    public void after() {
        System.out.println("=====afterMethod");
    }

    @Test
    public void testCase1() {
        System.out.println("test case 1");
    }

    @Test
    public void testCase2() {
        System.out.println("test case 2");
    }
}

testng.mxl 文件解析

TestNG 与 Junit 比较大的一个差异就是前者通过 testng.xml 文件来配置测试用例的执行。 testng.xml 文件可以很好的控制要执行的测试用例的粒度, 及各种运行策略。



    
        
            
            
        
    

  • ... 表示定义了的一个测试套件。
    • name 定义测试套件的名称。
    • verbose 定义命令行信息打印等级, 不会影响测试报告输出内容; 可选值(1|2|3|4|5)
  • ... 表示定义了一个测试。
    • name 定义测试的名称。
  • ... 表示定义一组测试类。
  • 表示定义一个测试类。
    • name 指定要运行的测试类

执行包、类、方法



    








        
            
        
    


用例依赖

测试方法依赖

当某一条用例运行失败时, 其它用例必然也会失败, 所以, 我们就没有必要再运行其它用例了, 这个时候我们就可以设置用例之间的依赖。

package test.sample;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;

public class DependentMethodsTest {
    @Test
    public void testAdd1() {
        assertEquals(3 + 1, 5);
    }

    @Test(dependsOnMethods = {"testAdd1"})
    public void testAdd2() {
        assertEquals(3 + 2, 5);
    }
}

测试组依赖

package test.sample;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.assertEquals;

public class DependentGroupsTest {
    @Test(groups = {"funtest"})
    public void testAdd1() {
        assertEquals(3 + 1, 5);
    }

    @Test(groups = {"funtest"})
    public void testAdd2() {
        assertEquals(3 + 2, 5);
    }

    @Test(dependsOnGroups = {"funtest"})
    public void testAdd3() {
        assertEquals(3 + 2, 5);
    }
}

参数化

通过 @DataProvider实现参数化

package test.sample;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import static org.testng.AssertJUnit.assertEquals;

public class DataProviderTest {
    // 定义对象数组
    @DataProvider(name = "add")
    public Object[][] Users() {
        return new Object[][]{
                {3, 2, 5},
                {2, 2, 4},
                {3, 3, 7},
        };
    }

    @Test(dataProvider = "add")
    public void testAdd2(int add1, int add2, int result) {
        assertEquals(add1 + add2, result);
    }
}

其它使用技巧

package test.sample;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.assertEquals;

public class OtherTest {
    // 该条用例跳过执行
    @Test(enabled = false)
    public void testCase1() {
        assertEquals(2 + 2, 4);
    }

    // 设定用例超时时间
    @Test(timeOut = 3000)
    public void testCase2() throws InterruptedException {
        Thread.sleep(3001);
    }

    // 预设用例抛出的异常类型
    @Test(expectedExceptions = RuntimeException.class)
    public void testCase3() {
        assertEquals(2 / 0, 1);
    }
}

生成测试报告

  • 通过 Maven 生成报告
    mvn test

软件测试汪地址
软件测试汪博客地址

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

转载请注意出处,谢谢合作

你可能感兴趣的:(TestNG单元测试)