TestNg中的注解讲解


在这里插入图片描述

关于执行顺序

从上到下的顺序

@BeforeSuite 在测试套开始时候执行

@BeforeTest 在测试测试开始时候执行,在 xml 中表现为在 标签的测试中最开始执行

@BeforeClass 在测试的类最开始时候执行,在 xml 中表现为在 标签中开始执行

@BeforeGroup 在测试分组时候开始执行

@BeforeMethod 在每一个测试方法之前执行,测试的方法为标注了 @Test 注解的方法

@Test 测试的方法用例

@AfterMethod

@AfterGroup

@AfterClass

@AfterTest

@AfterSuite

关于 @Test

关于测试是否执行

// 默认是执行的
@Test
@Test(enabled = true)

// 被标注的测试用例将不会执行
@Test(enabled = false)

关于测试方法依赖于上一个

第一个方法错误,后面依赖于其的测试方法也不会执行!

@Test
public void fun1() {}

@Test(dependsOnMethod = {"fun1"})
public void fun2() {}

关于多线程方面

// 2 线程,执行 3 次,这个执行两次不是每个线程执行 2 次,而是一共执行 2 次,每次执行测试方法唱过 10 ms 的就表示超时
@Test(threadPoolSize = 2, invocationCount = 3, timeOut = 10000)

关于 groups

testng 中 groups 相对于测试方法而言,实际测试中可以将具有相似功能方法进行分组运行。一个测试方法可以属于一个组也可以属于多个组

下面是测试类

// 测试的类如下
public class Demo {
    @Test(groups = {"group1"})
    public void fun1() {}
    
    @Test(groups = {"group1"})
    public void fun2() {}
    
    @Test(groups = {"group1, group2"})
    public void fun3() {}
    
    @Test(groups = {"group2"})
    public void fun4() {}
    
    @Test(groups = {"group2"})
    public void fun5() {}
}

下面是 xml 中的结构

// testng.xml 中的一个 test
<test verbose="2" name="balabala">
	<groups>
        <run>
            <include name="group1" />
            <exclude name="group2" />
        </run>
    </groups>
    <classes>
        <class name="xxx.xxx.Demo">
        	<methods>
        		<include name="testMethod1" />
        		<include name="testMethod2" />
      		</methods>
        </class>
    </classes>
</test>

结果是只会运行 group1 且无 group2 的测试用例

关于 @DateProvider

利用其可以进行大量参数

注意由于下面 dataprovider 提供两组数据,则下方 test 方法串行的执行了两遍,分别对应着两组数据

这个功能对应的场景就是在测某一个功能模块时候要求通过几种传参来测就可以用这种方式了

public class Demo {
    @DateProvider(name = "xxx")
    public Object[][] fun() {
        return new Object[][] {
            {"参数列表1", 0, 1},
            {"参数列表2", 2, 3}
        };
    }
    
    @Test(dataProvider = "xxx")
    public void funTest(String param1, int param2, int param3) {
        
    }
}

注解执行需要初始化类吗

先说结论:会自动调用类的构造器,且只调用一次

我们发现 testng 和 junit 还是比较不同的,以 junit 5 举例,它的@BeforeAll注解要求标志 static 方法,也就是不用初始化一个类,但是 testng 中从@BeforeSuite一直到@Test都需要一个实例化的对象,而且不管有几个同类的注解只用调用一次构造器,实例化一个对象就行。

还需要注意的是如果我们自己手动写一个无参的构造器是完全没有问题的,如果我们写一个有参的构造器呢?比如说参数是 int 或者 boolean,这样我们再去运行发现就运行不起来了,如果我们写一个 String 类型的传参的构造器,那么也是可以运行的起来的,这个 String 会被自动传成项目名

多线程怎么运行

testng 可以结合 surefire 插件来多线程运行,假如线程并行级别为 test 级别,那么意味着<Test>标签会被识别为一个新的线程,<test>标签又对应着@BeforeTest注解,也就是说有一个测试类 A 其中有@BeforeSuite@BeforeTest,那么在多线程,线程级别是 test 级别下运行的时候,A 实例化一个新对象 a1,a1 中会执行@BeforeSuite@BeforeTest,然后又开启一个新的线程,新的线程会实例化 A 为 a2,然后 a2 中只会执行@BeforeTest,因为并行级别为 test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值