java+测试框架TestNG注解及属性学习

适合测试人员使用的原因

比Junit涵盖功能更全面的测试框架
Junit更适合隔离性比较强的单元测试
TestNG更适合复杂的集成测试

TestNG使用引入版本到pom文件中

<dependencies>
		<dependency>
					<groupId>org.testng</groupId>
					<artifactId>testng</artifactId>
					<version>6.10</version>
		</dependency>
</dependencies>

下图为TestNG基本注解说明

  • 输入注解@Test 选择testng包,自动引入
    在这里插入图片描述

TestNG套件测试

  • 验证多个类中加入Test注解,配置resources下的xml文档,把多个类分别引入,如下图
    再有一个befortest与aftertest注解,beforesuit与aftersuit注解
    运行配置文件,查看运行结果为先运行suit套件再运行beforetest注解再运行test注解
//一个Test注解类代码:
public class PayTest {
    @Test
    public void paytest(){
        System.out.println("支付宝支付成功");
    }
}
//一个套件注解类代码:
public class suitConfig {
    @BeforeSuite
    public void BeforeSuite() {
        System.out.println("before suit 运行");
    }
    @AfterSuite
    public void AfterSuite() {
        System.out.println("After suit 运行");
    }
    @BeforeTest
    public void BeforeTest() {
        System.out.println("BeforeTest yunxing");
    }
    @AfterTest
    public void AfterTest() {
        System.out.println("AfterTest yunxing");
    }
}

配置文件与运行结果展示:
配置文件与运行结果展示
TestNG忽略测试

  • 注解后加enabled,则运行时跳过此方法
    @Test(enabled = false)
    public void enable2() {
        System.out.println("enable2 执行");
    }

TestNG组测试

  • 注解后加groups 对一个类中不同方法分组
    @Test(groups="server") //注解写在方法上
    public void test1(){
        System.out.println("这是服务端的测试方法111");
    }
    @Test(groups="client")
    public void test2(){
        System.out.println("这是客户端的测试方法111");
    }
    @BeforeGroups("server")
    public void test3(){
        System.out.println("这是服务端组运行之前运行的方法");
    }
    @AfterGroups("server")
    public void test4(){
        System.out.println("这是服务端组运行之后运行的方法");
    }

运行结果:
这是服务端组运行之前运行的方法
这是服务端的测试方法111
这是服务端组运行之后运行的方法
这是客户端的测试方法111

  • 注解后加groups对不同类分组
@Test(groups = "stu")//注解写在类上
public class GroupClass1 {
    public void test1(){
        System.out.println("班级 1 中的 男 学生");
    }
    public void test2(){
        System.out.println("班级 1 中的 女 学生");
    }
}

对应配置文件
在这里插入图片描述
TestNG异常测试
什么时候用到异常测试:传入某些不合法的参数,期望程序抛出异常的预期结果

 @Test(expectedExceptions = RuntimeException.class)
    public void runTimeExceptionFailed(){
        System.out.println("注解方式抛出异常");
    }

    @Test(expectedExceptions = RuntimeException.class)
    public void runTimeExceptionSuccess(){
        System.out.println("throw方式抛出异常");
        throw new RuntimeException();
    }

TestNG依赖测试
如果被依赖方法未执行通过,则依赖方法不执行
在这里插入图片描述
TestNG参数化测试

类方法

@Test
@Parameters({"name","age"})
public void paramTest1(String name,int age){
    System.out.println("这个小哥哥的name是 "+name+"age为 "+age);
}

通过xml传递参数

<?xml version="1.0" encoding="utf-8" ?>
<suite name="parameter">
    <test name="xiaoge">
        <classes>
            <parameter name="name" value="张三"/>
            <parameter name="age" value="23"/>

            <class name="Exception"/>
        </classes>
    </test>
</suite>

通过本类中注解传递 参数
在这里插入图片描述
通过方法名传递参数 - 引入java-long包中的Method
在这里插入图片描述
TestNG多线程测试
注解实现多线程

@Test(invocationCount = 10,threadPoolSize = 3)

xml配置文件实现多线程

<!--
parallel线程是方法级别的 ,
methods级别:所有用例都可以在不同的线程下执行。tests级别:不同的test tag下的用例可以在不同的线程下执行,相同的test tag下的用例只能在同一个线程中去执行 。class级别:相同的class tag下的用例在同一线程中执行,不同的class tag下的用例可以在不同的线程中运行
thread-count:最大并发线程数
xml文件配置这种方法不能指定线程池,只有方法上才可以指定线程池
-->
<suite name="thread" parallel="methods" thread-count="2">

TestNG超时测试

  @Test(timeOut = 3000)
    public void testSusess() throws InterruptedException{
        Thread.sleep(2000);
    }
    @Test(timeOut = 3000)
    public void testFaild() throws InterruptedException{
        Thread.sleep(4000);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值