junit testng区别(junit和testng)

junit testng区别(junit和testng)本文为霍格沃兹测试学院学院学员课程学习笔记 TestNG 和 Junit 作为两大流行的测试框架 有哪些区别 各有哪些优缺点 该如何选择呢 这里简要总结下 Junit 更适合隔离性比较强的单元测试 TestNG 是比 Junit 涵盖功能更全面的测试框架 具有参数化和分组的特性 可以做数据驱动 TestNG 被设计应用覆盖所有的测试 单元 功能 端到端 集成测试等 TestNG

大家好,我是讯享网,很高兴认识大家。


本文为霍格沃兹测试学院学院学员课程学习笔记。

TestNG 和 Junit 作为两大流行的测试框架,有哪些区别?各有哪些优缺点?该如何选择呢?这里简要总结下:

  1. Junit 更适合隔离性比较强的单元测试;
  2. TestNG 是比 Junit 涵盖功能更全面的测试框架,具有参数化和分组的特性,可以做数据驱动;
  3. TestNG 被设计应用覆盖所有的测试,单元、功能、端到端、集成测试等;
  4. TestNG 依赖测试时对于依赖方法失败后的用例标记为跳过,而不是像 Junit 标记为失败,减少失败原因排查成本;
  5. TestNG 可以针对失败用例回归测试,增加测试针对性和效率,而 Junit 需要将所有测试用例重新执行;
  6. TestNG 更适合测试工程师需要的大范围的复杂的集成测试;

注:以上对比指的是 TestNG 和 Junit4 版本的对比,最新的 Junit5 框架已经完善了功能特性,也涵盖了 TestNG
所包含的功能,如果选择 Junit 框架,建议直接选用 Junit5,Junit5 还在推广普及中;
具体可参考《Junit5简介、构成、新特性及基本使用-常用注解、套件执行》

testng 与 junit testng与junit区别_testng 与 junit
讯享网

—Junit与TestNG的注解区别—

testng 与 junit testng与junit区别_testng 与 junit_02

1.基本测试

Junit和TestNG对于测试方法的标注都是,另外在方法执行前后加上、

testng 与 junit testng与junit区别_testng_03

testng 与 junit testng与junit区别_testng_04

由测试结果可看到在每个测试用例执行前都会先执行注解的方法,之后都会执行注解的方法

2.@BeforeClass和@AfterClass

在测试类运行之前运行和

testng 与 junit testng与junit区别_junit_05

testng 与 junit testng与junit区别_junit_06

由测试结果可以看出在测试类执行前后会先后执行一次被和注解的方法

3.套件测试

TestNG的套件管理有点“特别”,它是以一个xml文件作为统一配置文件的,一般会命名为,实际上文件的命名随意,you happy just ok!

执行时通过运行xml文件

最基本的套件管理规则:->->->

同一个下的测试类看做是一个整体,其中的注解对整个整体都是生效的

下面看实操演示,当前有3个测试类、和

testng 与 junit testng与junit区别_软件测试_07

testng 与 junit testng与junit区别_单元测试_08

3.1 套件测试之

@BeforeSuite和@AfterSuite

1)在、测试类中分别输入测试用例:

testng 与 junit testng与junit区别_testng 与 junit_09

2)再在测试类中输入和注解方法和方法

testng 与 junit testng与junit区别_软件测试_10

3)最后在配置文件中配置套件执行顺序将、”包”成一个整体,、”包”成一个整体;然后依顺序执行

注:suite和test Tag需要给一个name,否则会报错

testng 与 junit testng与junit区别_junit_11

testng 与 junit testng与junit区别_软件测试_12

从测试结果我们可以看到和仅仅在suite执行前后分别执行一次

3.2 套件测试之
@BeforeTest+@AfterTest

在测试类中输入+注解的方法,xml套件配置不变

testng 与 junit testng与junit区别_软件测试_13

testng 与 junit testng与junit区别_junit_14

由测试结果可以看到,在每个执行前后都会先后执行一次由、注解的方法

4.忽略测试@Test(enable=false)

在测试方法test1的注解中设置属性

testng 与 junit testng与junit区别_软件测试_15

testng 与 junit testng与junit区别_junit_16

由测试结果可以看到test1被忽略了,并没有执行

5.分组测试

5.1方法分组之
+
分别将方法和分为“”和“”

再在执行前执行注解方法,在执行后执行注解方法

testng 与 junit testng与junit区别_软件测试_17

testng 与 junit testng与junit区别_junit_18

5.2测试类分组 @Test(groups=“xxx”)

当前有3个测试类

testng 与 junit testng与junit区别_软件测试_19

1)分别将这3个测试类进行分组、、

testng 与 junit testng与junit区别_junit_20

testng 与 junit testng与junit区别_junit_21

testng 与 junit testng与junit区别_软件测试_22

testng 与 junit testng与junit区别_testng_23

3)设置场景,利用配置->->让和执行,不执行(实际上如果中直接不写,它也不会执行)

testng 与 junit testng与junit区别_testng 与 junit_24

testng 与 junit testng与junit区别_testng_25

testng 与 junit testng与junit区别_testng 与 junit_26

由测试结果可以看到,测试类分组在和的方法依次执行了,而分组中的测试类未被执行

注:如果测试用例的逻辑顺序设计的较合理,平常使用分组的频率可能没那么高

6.异常测试

testng 与 junit testng与junit区别_软件测试_27

testng 与 junit testng与junit区别_软件测试_28

注:单元测试平常更多的可能由研发人员自己完成,一般功能和接口测试我们测试工程师期待的都是后端对异常处理后返回的一个状态码code和message信息

7.依赖测试

有时候一个用例的执行要依赖其他用例的执行结果,例如购买商品前需要依赖用户登录成功才可以,这个时候就需要使用对另一个用例进行依赖

testng 与 junit testng与junit区别_单元测试_29

7.1 依赖用例成功

然后我们直接运行pay方法,结果如下:

testng 与 junit testng与junit区别_单元测试_30

由测试结果我们可以看到虽然我们直接执行了方法,但是由于方法是依赖于方法的,所以会先执行方法

7.2 依赖用例失败

我们让被依赖的login用例执行失败,直接运行方法,观察结果:

testng 与 junit testng与junit区别_单元测试_31

testng 与 junit testng与junit区别_testng_32

由测试结果可以看到几点现象:

被依赖的用例执行失败,后面的用例会直接跳过忽略

测试结果显示为忽略而不是失败,这样当有成百上千条用例因为被依赖的用例失败而执行不通过时,可以只排查被依赖用例失败原因即可;否则如Junit4全部标记为失败的话会造成排查问题和回归测试效率的极大浪费

8.参数化测试

有的方法需要传参,好比登录成功时我们需要用户的姓名和ID号

参数的传递直接写在代码中不利于维护更改,也不方便不懂代码的测试人员进行参数修改,这个时候就需要参数化测试

8.1 参数化测试1:
@Parameters+
这个时候就需要在方法上加上注解,并在xml配置文件中利用的方式传参

注:也可用tag对指定的方法进行参数传递

testng 与 junit testng与junit区别_软件测试_33

testng 与 junit testng与junit区别_软件测试_34

testng 与 junit testng与junit区别_软件测试_35

8.2 参数化测试2:

@Test(dataProvider = “name”)+@DataProvider

1)利用+将多组数据传递到一个方法中依次执行

testng 与 junit testng与junit区别_testng_36

testng 与 junit testng与junit区别_testng_37

2)利用+指定测试方法,传递指定入参进行测试

testng 与 junit testng与junit区别_testng_38

分别单独运行方法和得到测试结果:

testng 与 junit testng与junit区别_testng_39

testng 与 junit testng与junit区别_单元测试_40

9.多线程测试

9.1多线程测试注解实现

@Test(invocationCount=10,threadPoolSize=4)

testng 与 junit testng与junit区别_单元测试_41

简单来说就是:

表示方法要运行几次,表示线程池大小,且要配合才起作用。现在将方法用多线程执行10次,线程池大小设为4,打印当前线程id以观察验证

testng 与 junit testng与junit区别_testng_42

testng 与 junit testng与junit区别_软件测试_43

从测试结果中可以看到4个不同的线程一共将方法执行了10次

9.2 多线程测试xml实现:

parallel(methods|tests|classes)+thread-count

testng 与 junit testng与junit区别_junit_44

testng 与 junit testng与junit区别_testng 与 junit_45

:设置使用多线程,且有三种不同级别选择

所有用例都可以在不同的线程下执行,包括依赖的用例
  • 同一个中的用例运行在同一个线程下,不同中的用例可以运行在不同线程下
  • :同一个中的用例运行在同一个线程下,不同中的用例可以运行在不同线程下
  • testng 与 junit testng与junit区别_testng 与 junit_46

    2)三种不同级别选择

    methods-所有用例都可以在不同的线程下执行

    设置为级别,为3,进行测试

    testng 与 junit testng与junit区别_testng 与 junit_47

    testng 与 junit testng与junit区别_软件测试_48

    2.2)tests-同一个中的用例运行在同一个线程下,不同中的用例可以运行在不同线程下

    再创建测试类,添加三个方法并打印thread ID

    testng 与 junit testng与junit区别_junit_49

    设置为级别,为3,进行测试

    testng 与 junit testng与junit区别_单元测试_50

    testng 与 junit testng与junit区别_junit_51

    2.3)classes-同一个中的用例运行在同一个线程下,不同中的用例可以运行在不同线程下

    设置为级别,为3,进行测试

    testng 与 junit testng与junit区别_junit_52

    testng 与 junit testng与junit区别_junit_53

    注:虽然框架本身说明了是多线程安全的,但是由于我们自身编码可能不能保证严格规范,容易造成多线程不安全,所以建议不要适用多线程测试,而是适用多进程测试

    参考链接:

    • TestNG官方说明: https://testng.org/doc/index.html
    • IBM Developer:https://www.ibm.com/developerworks/cn/java/j-cq08296/?mhsrc=ibmsearch_a&mhq=testNG
    小讯
    上一篇 2025-04-30 11:55
    下一篇 2025-06-01 10:34

    相关推荐

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
    如需转载请保留出处:https://51itzy.com/kjqy/186184.html