TESTNG框架


    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器)。

    编写一个测试的过程有三个典型步骤:

    * 编写测试的 业务逻辑并在代码中插入TestNG annotation
    * 将测试信息添加到testng.xml文件或者build.xml中
    * 运行TestNG

NEW-- module--maven--next--id(com.course.code/Chapter)
项目重命名:new--refactor--rename--更改pom.xml的artifactId

@Test //最基本的注解
@BeforeSuite:        被注释的方法将在所有测试运行前运行
@AfterSuite:         被注释的方法将在所有测试运行后运行
@BeforeTest:         被注释的方法将在测试运行前运行
@AfterTest:          被注释的方法将在测试运行后运行
@BeforeGroups:       被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
@AfterGroups:        被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
@BeforeClass:        被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass:         被注释的方法将在当前类的所有测试方法调用后运行。
@BeforeMethod:       被注释的方法将在每一个测试方法调用前运行。
@AfterMethod:        被注释的方法将在每一个测试方法调用后运行。

套件测试:
BeforeSuite这是在类之前运行的测试套件
BeforeClass这是在类运行之前运行的方法
BeforeMethod这是在测试方法之前运行的
Test这是测试用例1
AfterMethod这是在测试方法之后运行的
BeforeMethod这是在测试方法之前运行的
Test这是测试用例2
AfterMethod这是在测试方法之后运行的
AfterClass这是在类运行之后运行的方法
AfterSuite这是在类之后运行的测试套件

顺序
suit(测试套件)--class-method--test

忽略测试:
@Test(enabled = false)

分组测试:
在类里进行分组:
@Test(groups = "server")
@Test(groups = "client")
@BeforeGroups("server") //在服务端组运行之前运行的方法
@AfterGroups("server") //在服务端组运行之后运行的方法
配置进行分组:
@Test(groups = "stu") //在类上面
@Test(groups = "teacher") //在类上面
<groups>
            <run>
                <include name="teacher"/>
            </run>
</groups> //test下一级目录

异常测试:
@Test(expectedExceptions = RuntimeException.class)
throw new RuntimeException(); //方法中抛出异常

依赖测试:
@Test(dependsOnMethods = {"test1"}) //test1为依赖的方法名

参数化测试:
xml文件参数化:
@Test
@Parameters({"name","age"})

<parameter name ="name" value="zhangsan"/>
<parameter name ="age" value="10"/> //传参,在classes下级

DataProvider参数化:
@Test(dataProvider = "methodData")
@DataProvider(name = "methodData")

public  Object[][] methodDataTest(Method method){ //有参有返回值传参

多线程测试:
注解:
 @Test(invocationCount = 10 ,threadPoolSize = 3)
    public void test(){
        System.out.println(1);
        System.out.printf("Thread Id: %s%n",Thread.currentThread().getId());

    }
    //invocationCount:数量,threadPoolSize:线程池;
    //"Thread Id: %s%n",Thread.currentThread().getId():抛出线程ID

xml文件实现:
suite name ="mutil" parallel="classes" thread-count="2">
//parallel执行级别
<!--
    tests级别:不同的test tag 下的用例可以在不同的线程下执行
    相同的test tag下的用例只能在同一个线程中去执行
    classes级别:相同的class tag下的用例在同一个线程中执行
    不同的classes tag下的用例可以在不同的线程中执行
    method级别:所有用例都可以在不同的线程下去执行
    thread-count:代表了最大并发数
    xml文件配置这种方式不能指定线程池,只有在方法上才可以指定线程池
-->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值