TestNG

文章目录

  • TestNG
    • 一、概述与使用
      • 1.1 配置环境
      • 1.2 测试方法
      • 1.3 使用xml文件
    • 二、测试方法常用注解
      • 2.1 配置类注解
      • 2.2 非配置类注解
        • 2.2.1 @Parameters
        • 2.2.2 @DataProvider
    • 三、依赖测试
    • 四、忽略测试
    • 五、超时测试
    • 六、分组测试
    • 七、失败重试机制
      • 7.1 IRetryAnalyzer接口
      • 7.2 测试方法引入失败重试
        • 7.2.1 通过注解的方式
        • 7.2.2 通过实现接口 + 监听器的方式

一、概述与使用

TestNG是一款设计测试用例执行流程的测试框架。

1.1 配置环境

  1. 添加依赖
<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.3</version>
</dependency>
  1. 安装插件

1.2 测试方法

//导入的两个包均为testng的
import org.testng.Assert;
import org.testng.annotations.Test;public class Tester {@Testpublic void test() {//自定义add方法用来计算两个参数的和int res = Calculator.add(3, 4);int expected = 7;//断言,如果参数的两个值一样,断言就通过,否则抛出异常Assert.assertEquals(res, expected);}
}

运行结果成功示例:

运行结果失败示例(将expected值修改为5):

1.3 使用xml文件

testng.xml 文件用来设计测试用例的执行流程。

  1. 在对应的项目右键,选择如下:

  1. 生成的文件如下图:

  1. xml 配置文件解析
  • <suite>:套件就是将所有的测试类整理在一块,形成一套测试用例
  • <test>:测试集就是测试类的集合,一般把项目的某一个模块设计成一个测试集
  • <classes>:测试集下的所有测试类
  • <class>:具体测试类,name 属性指定测试类的路径
  • <methods>:测试类下具体的测试方法,如果不写此标签则默认包含测试类下的所有方法

以后需要执行哪些测试方法,在xml文件中编写对应的标签即可。

  1. 运行xml配置文件

运行 testng.xml 文件其实运行的是套件中定义的所有测试集下的所有测试类中的指定的测试方法。

xml文件右键选择Run,结果如下:

二、测试方法常用注解

2.1 配置类注解

  • @Test 标记的方法:标记测试方法

    • 如果有多个测试方法,执行顺序按照方法名的字典顺序执行,与定义顺序无关
  • @BeforeSuite/@AfterSuite 标记的方法:在某个测试套件(suite)开始之前运行/在某个测试套件所有测试方法执行之后运行

  • @BeforeTest/@AfterTest 标记的方法:在某个测试集(test)开始之前运行/ 在某测试集下的所有测试类中的测试方法执行之后运行

  • @BeforeClass/@AfterClass 标记的方法:在某个测试类(class)开始之前运行/在某个测试类中的所有测试方法执行之后运行

  • @BeforeMethod/@AfterMethod 标记的方法:在某个测试方法(method) 之前运行/在某个测试方法执行之后运行

使用上述所有注解的方法执行顺序:

BeforeSuite
BeforeTest
BeforeClass
{ BeforeMethodTestAfterMethod }
AfterClass
AfterTest
AfterSuite

注意:

  1. 上述 {} 内的注解表示有几个 @Test ,这些注解标记的方法就要执行多少次

  2. 除了 @BeforeSuite、@BeforeTest、@AfterTest、@AfterSuite 可以对不同的测试类生效外,其他注解的作用范围只在本类中生效。所以,如果想要在别的类中共用某些方法,可以将这些方法声明在上述四个注解中

  3. 图示如下:

2.2 非配置类注解

2.2.1 @Parameters

  1. 先在 testng.xml 文件中定义参数标签

  2. 对应的测试方法使用注解

2.2.2 @DataProvider

使用此注解的方法用来提供多组测试数据,返回值是二维数组。

使用示例:

@DataProvider
public Object[][] dataResult() {return new Object[][]{{"火星哥", 22, "男"},{"霉霉", 23, "女"}};
}@Test(dataProvider = "dataResult") //值为方法名
public void test(String name, int age, String sex) {System.out.println(name + age + sex);
}/*** @DataProvider(name = "myName"),使用时不再使用方法名,而使用指定的myName名称*/

运行结果:

注意:代码中写测试用例效率较低,一般都是读取excel中的测试用例作为返回值。

三、依赖测试

某测试方法的执行需要依赖于另一测试方法的执行。

使用示例:

@Test(dependsOnMethods = {"test2"})
public void test1() {System.out.println("test1()");
}@Test
public void test2() {System.out.println("test2()");
}

运行结果:

按照字典顺序应该test1()先执行,但是由于test1()依赖于test2(),所以test2()先执行:

四、忽略测试

执行某一测试类时忽略某一测试方法。

使用方法:@Test(enabled = false)

五、超时测试

某一测试方法执行的时间超过指定的毫秒数,则认为此方法执行失败并终止执行抛出异常:

使用方法:@Test(timeOut = 1000)

六、分组测试

可用于只想执行某一部分测试用例时使用。

  1. 定义测试方法并指定分组

    @Test(groups = {"g1"})
    public void test1() {System.out.println("g1分组的test1()方法执行");
    }@Test(groups = {"g1"})
    public void test2() {System.out.println("g1分组的test2()方法执行");
    }@Test(groups = {"g2"})
    public void test3() {System.out.println("g2分组的test3()方法执行");
    }
    
  2. testng.xml 文件中定义 groups 标签

  3. 运行结果

七、失败重试机制

有时在测试过程中,可能会出现失败的情况,如果想要重试失败的测试方法就需要使用 TestNG 的失败重试机制。

7.1 IRetryAnalyzer接口

如果想要使用 TestNG 的失败重试机制,就必须了解此接口。

该接口的定义如下:

public interface IRetryAnalyzer {/*** 1. 如果测试方法需要重试则此方法返回true,否则返回false* 2. 参数result表示刚刚运行的测试方法的运行结果*/public boolean retry ( ITestResult result ) ;
}

经过配置之后,一旦测试方法失败,将调用此方法,可以从参数 result 中得到该测试方法的详细信息。如果要重新执行失败的测试,此方法实现应返回true,如果不想重新执行测试,则返回false。通常,此接口的实现类中定义重试的次数。

使用举例:

@Slf4j
public class RetryListener implements IRetryAnalyzer {//定义重试次数的初始值private int initReTryNum = 1;//定义最大重试次数private int maxReTryNum = 3;@Overridepublic boolean retry(ITestResult iTestResult) {if (initReTryNum <= maxReTryNum) {//组装error messageString message = "方法名: " + iTestResult.getName() + " " + "运行失败,正在进行第 " + initReTryNum + " 次重试";System.out.println(message);//重试次数+1            initReTryNum++;//还没有达到最大重试次数,继续重试return true;}return false;}
}

7.2 测试方法引入失败重试

7.2.1 通过注解的方式

该方式可以精确的指定某个测试方法进行失败重试。

@Test 注解的属性 retryAnalyzer 中指定 IRetryAnalyzer 的实现类。

使用举例:

public class Test {//此方法指定重试机制@Test(retryAnalyzer = RetryListener.class)public void test1() {Assert.assertEquals(false, true);}//此方法没有指定失败重试@Testpublic void test2() {Assert.assertEquals(false, true);}
}

运行结果:

只有 test1() 进行了指定次数的重试,因为仅在 test1()@Test 注解中指定了 IRetryAnalyzer 的实现类,test2() 仅执行一次,因为没有在 test2()@Test 注解中指定 IRetryAnalyzer 的实现类。

7.2.2 通过实现接口 + 监听器的方式

需要实现 ITestAnnotationTransformer 接口,会自动的在测试运行期间为每个测试方法调用重写的 transform 方法。也就是说,这种方式会为所有测试方法设置失败重试。

使用举例:

  1. 实现 ITestAnnotationTransformer 接口

    import org.testng.internal.annotations.IAnnotationTransformer;
    import java.lang.reflect.Method;public class OverrideIAnnotationTransformer implements IAnnotationTransformer{@Overridepublic void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {IRetryAnalyzer iRetryAnalyzer= iTestAnnotation.getRetryAnalyzer();if(iRetryAnalyzer==null){//设置指定的IRetryAnalyzer接口的实现类iTestAnnotation.setRetryAnalyzer(RetryListener.class);}  }
    }
    
  2. 配置 testng.xml 的监听器

    <suite name="All Test Suite"><listeners><!-- 定义IAnnotationTransformer的实现类 --><listener class-name="com.qizegao.interfacetest.OverrideIAnnotationTransformer"/></listeners><test verbose="2" preserve-order="true" name="F:/InterfaceTest"><classes><class name="com.qizegao.test.Test001"/></classes></test>
    </suite>
    
  3. 运行结果

    这次没有任何 @Test 注解定义 retryAnalyzer 属性,但是可以发现所有的测试方法都会进行失败重试。

TestNG自动化测试框架详解相关推荐

  1. WebDriver自动化测试框架详解

    webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...

  2. 自动化测试框架详解【2022】

    测试技术的发展 互联网发展风起云涌的几十年,背后是计算机技术的更新迭代,软件开发经历了c.php.java.python.go等语言百家争鸣,在软件测试领域同样是长江后浪推前浪,白盒.自动化.持续集成 ...

  3. pytest自动化测试框架详解+mark标记+fixture夹具

    介绍 pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大 特点: 1. 非常容易上手,入门简单,丰富的文档 2. 支持参数化 3. 执行测试用例的过程中,跳 ...

  4. (原创)Python 自动化测试框架详解

    自己折腾了一个python的自动化测试框架,梳理了一下流程,简单分享一下. 项目背景 B/S架构,进行用户界面的自动化测试 工具选择 python开发的自动化测试框架,足够灵活,可以随时根据需求进行变 ...

  5. selenium-python自动化测试框架详解

    自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里. 写通用的代码的. 其他3层想要的话,就可以直接调用. 例如: 读取测试数据的代码, ...

  6. 【腾讯优测月刊】安卓主流自动化测试框架详解与实践

    导语: 随着移动应用发布周期越来越紧凑.安卓品牌机型/屏幕/系统版本等碎片化日益严重,移动测试工程师的工作量日益剧增.自动化测试or手工测试?这个前些年争执不休的话题,近年来随着云测试平台的崛起似乎已 ...

  7. uft怎么做app自动化测试_UFT/QTP自动化测试框架详解

    前言 很多从事测试的朋友都会接触到自动化测试或要求有自动化测试的技能,自动化测试已成为测试行业发展的趋势.自动化测试的工具有很多且各有所长,UFT(QTP)是最流行的测试工具之一,因此很多公司在招聘时 ...

  8. python+selenium自动化测试框架详解,我就讲一遍

    目录 前言 1.测试框架分层设计 2.测试框架目录结构 3.编写用例方法 4.测试结果展示 前言 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享. 框架采用python3 + sel ...

  9. Django REST FRAMEWORK swagger(一)框架详解

    Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST  SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...

最新文章

  1. 爱立信思科结盟背后:几家欢喜几家愁
  2. 【C#】ADO .Net Entities Framework在WPF TreeView中的应用
  3. 医疗器械软件安全性级别判定
  4. python 打开targz文件_Python下使用pandas打开excel文件并进行处理
  5. JNI学习积累之一 ---- 常用函数大全
  6. springmvc重定向到另一个项目_springmvc怎么重定向,从一个controller跳到另外一个controller...
  7. 程序员是不是当代最好的职业?
  8. 搭建SSM全流程框架过程
  9. 自学单片机编程(三) 流水灯代码
  10. 计算机考研408二战
  11. ZCU106 VCU Linux驱动转裸机驱动篇(一)
  12. 2022变更调查 举证照片查看器
  13. Android 开发小TIPS
  14. 华为应用市场AGC研习社|如何提升投放转化,实现获量增长?
  15. 网站seo诊断,网站seo诊断方法
  16. 微信小程序OTO商城(客户端)
  17. keytool运行错误
  18. 华罗庚统筹法与计算机专业,华罗庚的优选法与统筹法
  19. 斐波纳契数列(Fibonacci Sequence)
  20. Linux CentOS7 安装Oracle11gR2

热门文章

  1. layaBox配置vscode开发环境
  2. Java实验报告4:第二题银行账户类型
  3. 简述CPU,内存,硬盘,指令之间的关系
  4. windows下批量添加用户
  5. 微信小程序引入官方扩展 weui-miniprogram时的问题
  6. Nacos高级特性Raft算法以及原理和源码分析
  7. 周计划周记录:2022年6月20日-2022年6月26日
  8. 3DMax操作简单,建模小白的入手软件NO.1
  9. C语言求最大公约数常见思路
  10. xpath语法java_xpath语法及其使用教程