gtest测试框架使用详解_测试框架TestNG使用介绍

近期接触到了一个比较全面的基于Java的接口自动化测试框架,作为一名Java小白,所以打算研究一下,顺带学习学习Java,该测试框架的逻辑控制层使用的HttpClient + TestNG。

在本期中,给大家分享一下TestNG测试框架的基础知识,使用TestNG的优点,TestNG的基本注解如何使用,套件、忽略、异常、依赖、参数化、超时等测试该如何进行。

一、TestNG基本介绍

TestNG是Java中的一个测试框架,是一个目前很流行实用的单元测试框架,有完善的用例管理模块,配合Maven能够很方便管理依赖第三方插件。使用TestNG可以做功能、接口、单元、集成的自动化测试,最常见的是结合selenium做功能自动化测试,它使用Java注释去写测试方法。

测试人员一般用TestNG来写自动化测试,开发人员一般用Junit写单元测试,TestNG适合测试人员使用的原因:

  • 比Junit涵盖功能更全面的测试框架;

  • Junit更适合隔离性比较强的单元测试;

  • TestNG更适合复杂的集成测试。

编写一个测试的过程包含以下步骤:

  • 编写测试的业务逻辑并在代码中插入TestNG annotation;

  • 将测试信息添加到testng.xml文件或build.xml中;

  • 运行TestNG。

二、TestNG使用

TestNG应用上相对来说比较简单,把它的注解理解了,相当于会了一大半了1eca6633655f96c0b0ad20a6efccc371.png1eca6633655f96c0b0ad20a6efccc371.png

1. 在Maven中引用TestNG

使用Maven作为项目管理工具,需要在pom.xml中添加以下依赖,将groupId、artifactId和version引进来后,就可以使用Maven框架进行自动下载和使用。

        org.testng

        testng

        6.10

2. 在IDEA中创建module

新建一个文件夹用于该项目:AutoTest。使用IntelliJ IDEA打开该文件夹(File—>open),在该文件夹上面点击右键—>New—>module(module意思是它都归这个工程管)—>选择Maven点击Next—>填写GroupId和ArtifactId,点击Next—>创建了一个module,点击Finished(GroupId:一般是域名的反写,也作为项目中类的包名,是main目录里java的目录结构;ArtifactId:工程名,也就是根文件夹名)

3d0128f09be1870fbc2aace4beb730dd.png

创建了一个module,被认为工程的标志,根文件夹名前右下角为蓝色的,java前也是蓝色的,resources资源目录文件是图中的文件标志,工程目录结构如图所示:

3deb4b89a9a639b6fde9c2fe21c55724.png

3. 最基本的注解@Test

Module已创建完毕后,就可以开始了解TestNG的基本注解啦。

1)在java文件上右击—>new—>Package,创建一个包,包名:com.test.testng。(在公司,开发一个项目的时候每个功能模块肯定是放在某个包下,一般包名是以:最高域名.公司名/个人名.模块名)

2)在包中创建一个类,这个类就是为了运行TestNG里的代码创建的。点击包右键—>new—>Java Class,输入类名:BasicAnnotation—>OK

3)在pom中引用TestNG。TestNG与IDEA集成的比较好的一点是:假设在pom中没引用TestNG,也会进行提示。

4)创建一个方法:testCase1,在方法前加“@Test”,是最基本的注解,用来把方法标记为测试的一部分。

3e53586f6e4a578bf9bcf4c9bc6a9c27.png

在@Test为红色时,说明没有import对应的方法,在此我们可以进行设置一下自动优化导入包:

File—>settings—>Editor—>General—>Auto Import,将下图中1和2 进行勾选,1:IDEA将在我们写代码的时候自动棒我们导入需要用到的包,但是有多个同名的类调用不同的包,还是需要手动(Alt+Enter)设置。2:IDEA将在我们写代码的时候自动帮我们优化导入的包,比如自动去掉一些没有用的包。

b9d1ea06c86943423b5b210f1b556542.png

4. 注解之@BeforeMethod和@AfterMethod

除了最基本的注解外,还有标签可以进行标注在这个方法之前或者之后运行。

创建两个方法:beforeMethod和afterMethod, 同时再创建一个testCase2方法—>Run类,输出内容可以更直观理解。注:输入sout回车,即可输出System.out.println()。

1168e25add355fa6e5d4ef6e9a1a4535.png

可以看到,BeforeMethod/AfterMethod在每个方法运行之前/之后都会运行一次。在以后写测试用例时,在测试方法之前/之后必须要运行的都可以写到BeforeMethod/AfterMethod里。

5. 注解之@BeforeClass和@AfterClass

@BeforeClass和@AfterClass是在类运行之前和之后的注解。

创建两个方法:beforeClass和afterClass—>Run类,如下图所示:

febccf880b21585638a49ffca3ddaaed.png

@BeforeClass和@AfterClass使用场景举例:在类运行前,是否需要变量赋值、初始化对象等,写完后其它方法里就都可以使用了。

6. 注解之@BeforeSuite和@AfterSuite

在注解中,执行顺序非常非常重要。测试套件注解:创建两个方法beforeSuite和afterSuite—>Run类,结果如下图所示。

96a1e7ae6d8073935bd296d46af3c359.png

根据结果可以看到:Suite把class包裹起来了,说明类在运行之前运行了Suite,Suite可以包含多个Class,类是属于某个套件之下的。

7. 套件测试

举例讲解一下TestNG里的套件测试,虽然在TestNG里套件测试用到的相对较少,但是也要了解下滴,步骤如下:

1) 之前在java文件中创建了一个包com.test.testng,现在在该包里新建一个包,管理所有套件测试代码(New—>PacKage,包名可以起为:suite)

2) 在suite里创建一个类(New—>Java Class:SuiteConfig-配置类),SuiteConfigs 为了进行所有测试套件的配置,在这儿写测试的套件之前需要运行的方法。

3) 再在suite包中创建一个类,以登录测试为例,(New—> Java Class:LoginTest-登录成功-逻辑控制类),在这儿写测试主要Test标签下面包含的那些方法。

4) 在resources目录下创建testng.xml配置文件,一般来说配置文件叫tesng.xml,但是不是必须的,也可以叫其它名。testing.xml其实是标准的xml文件,实际上与SuiteConfig和LoginTest是有关联关系的。

5) 打开SuiteConfig类,创建两个方法:beforeSuite和afterSuite。

6) 再在Suite包中创建一个类:PayTest-支付成功,与LoginTest相当于一个测试组的,比较好区分。到此为止:目录结构如下图所示:

6d60a55c1e167c3b30b224b400ddcbb4.png

7) 打开LoginTest,写入方法:loginSogouMall,登录成功。

c3ca66ce3fa7095b653036e8bb7aadf3.png

8) 打开PayTest,写入方法paySuccess,支付成功。

c89f51d9d4a75ad751655f9c3e690811.png

9) 打开配置文件testng.xml,根目录为suite,写入内容如下图所示,此处需要注意test标签必须定义一个名字。Run testing.xml后,根据运行结果可以看到执行顺序为1-2-3-4。

35b8fa8f462d7c5344a5a8fc3918c85f.png

8. 忽略测试

忽略测试是指本次测试执行中不想要执行的测试方法,示例如下。

1)在包com.test.testng中创建一个类,New-Java Class:IgnoreTest;

2)在IgnoreTest类中创建两个方法:ignore1和ignore2,根据输出结果可以看到,在@Test标签后加入属性(enabled=false),则可以忽略此测试方法,默认情况下enabled为true。

2cb0571633d54c5ad179e88f0db31787.png

9. 组测试中的方法分组测试

首先介绍一下方法上分组,将方法进行归类。

1) 在包com.test.testng新建一个包,管理所有套件测试代码(New—>PacKage,包名可以起为:groups);

2)在groups包中新建一个类(New—>Java Class,方法名:GroupsOnMethod);

3) 创建4个方法,如下图中所示,注意需要在@Test标签中添加属性groups;

7ccc754b4a2215c2ace10b0b367ed2c9.png

4) 再创建2个方法,如下图所示,在@BeforeGroups和@AfterGroups标签后需要加入分组的名字。

d107de70701e08aab0cd3a03a20b14ca.png

5) 运行类,运行结果为:

48db166e2d035c09799c808dafbf40fe.png

6) 通过此种做法,可以将很多个测试方法归类到一个组中,之后进行相关操作。

10. 组测试中的类分组测试

上节说的组分组,本节介绍一下类分组,将整个类文件进行分组。

1)在groups包中,创建3个类:GroupsOnClass1;GroupsOnClass2;GroupsOnClass3;

2)在GroupsOnClass1中,创建2个方法,如下图所示,此时需要注意的是@Test标签是写在类上的(标签也是可以写在类上面的),之后添加属性groups;

1f2f5a42d95501f2ef19790abe5be1a6.png

cf425e8cd1583dd7f78a6fd86db2e109.png

3) 在GroupsOnClass2中,创建2个方法,与GroupsOnClass1相似,相当于两个班的学生;

4) 在GroupsOnClass3中,创建2个方法,如下图所示;

86bab5cc3b0b141b9a3366775094c2ab.png

5)在resources目录中创建一个xml文件:GroupsOnClass.xml,用该文件进行驱动,内容和运行结果如下图所示,运行了所有的组;

1b1e6b2e7941e40ca12379208b61f0ad.png

6) 只运行一部分组,书写及配置方法,如下图所示,结果只运行groups名字为stu的类。

c3af7a76857f79eb146b2eecf40aed2c.png

11. 异常测试

在我们期望结果为某一个异常的时候,会用到异常测试。比如:传入某些不合法的参数,程序抛出异常。

1)新建一个类,ExpectedException;

2)创建2个方法,如下图所示,异常测试中,使用到了@Test标签中的expectedExceptions属性,根据结果可以看到成功了一条(即方法2),需要在方法中加入语句throw new RuntimeException(),需要注意的是,该语句后的内容不运行,所以一定要注意顺序。

5e156470d6b891f1b02bfb4ea500b250.png

12. 依赖测试

TestNGINX依赖方法是指本个测试方法执行的时候依赖于其它方法。举例说明:

1)创建一个Java类:DependTest;

2)创建2个方法:test1和test2,其中test2依赖于test1,即test1要先执行,如果test1失败,则test2不执行。此处用到@Test标签的属性dependsOnMethods,具体写法如下图所示,只运行test2,结果可以看到test1也被执行了;

9a330a0a004b331885f4df26f995d6b9.png

3)在test1中加入语句:thrownew RuntimeException(),抛出异常,这时候再运行test2结果会提示1 failed,1 ignored。当做依赖测试的时候,被依赖的方法若执行失败,则依赖的方法就会被忽略掉不再执行,实际场景中可以做前置条件的时候使用。

13. 参数化测试-xml文件参数化

TestNGINX允许在TestMethod以及@Before/After类注解、@Factory类注解的方法中传入参数。参数传递的方式有两种,一种是借助xml文件配置,另一种是以编码的方式传递参数。本小结介绍借助xml文件配置的方式。示例:

1)新建一个包parameter(New->Package);

2)新建一个类ParameterTest,类中新建一个方法parameTest,如下图所示,此处用到了一个新标签:@Parameters;

6774b96d818134b6c9435551b51af4b8.png

3)在resources目录下,新建一个xml配置文件,用于传参,内容如下图所示,即可运行成功。

f8a1e926d7f83bf71476bfbb00042b6d.png

14. 参数化测试-DataProvider参数化

上小结讲述了如何通过xml传递参数,本节讲述另一种方式。

1) 新建一个类DataProviderTest;

2) 新建两个方法,testDataprovide和ProviderData,ProviderData方法提供数据来源,返回形式Object。注意testDataprovide方法上@Test标签中dataProvider的属性值与ProviderData方法上@DataProvider标签中name的属性值要一致。

1cd99738e641e03332fe633d2e6741c2.png

以上就是使用DataProvider如何传数据,除此之外,DataProvider支持根据方法进行参数传递,通过不同的方法传递不同的参数,示例:

新建三个方法:test1、test2和methodDataTest,methodDataTest方法中必须填入Methodmethod,代表自动会将test1和test2方法传递进来,针对不同的方法名传递不同的参数。

bd505fd35304bd995bbc1eb84ff750ce.png

15. 超时测试

超时测试比较简单,主要是使用到@Test标签中的timeOut属性,单位为毫秒,示例:

1)新建一个类TimeOutTest;

2)新建两个方法,testSuccess和testFail,方法一在3000毫秒内给予响应,不抛出异常,运行成功,方法2在2000毫秒内没有得到响应,抛出异常,运行失败。

55543874c2316e852af5be27497cb8fc.png

超时测试使用场景,例:在测试过程中某一段时间后无反应,想跳过,则可以使用超时测试。

以上就是本次分享的TestNG比较常用的一些知识,希望对大家有帮助~~


欢迎添加我们的搜狗测试微信号,与我们一起聊聊测试。

f86282a697f77a178ca746f15701b67c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LOJ#6282. 数列分块入门 6

一个动态的插入过程,还需要带有查询操作。 我可以把区间先分块,然后每个块块用vector来维护它的插入和查询操作,但是如果我现在这个块里的vector太大了,我可能的操作会变的太大,所以这时候我需要把现在里面的数全部拿出…

fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...

脚本之家你与百万开发者在一起作者:theOwlAndPussyCat/焦旭光引言电脑里存了很多有意思的Gif动态图片,闲暇想把这些动图全导入微信表情,可是这些动图很多大小超过了微信表情大小1MB的限制,要制作成表情只能压缩图像文件大小。网上…

frontcon函数用不了_C++复制构造函数与析构函数

想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧!当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候也有类似的需求&…

软件项目立项书_2019年度上海市软件和集成电路产业发展专项资金项目立项

上海艾瑞德生物科技有限公司荣获2019年上海市软件和集成电路产业发展专项资金(集成电路和电子信息制造领域)项目立项!上海艾瑞德生物科技有限公司的【医用体外诊断动态光场图像采集电子模块的研发及产业化】喜获2019年上海市软件和集成电路产业发展专项资金(集成电路…

mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)

1.日期和时间数据类型语法用于表示时间值的日期和时间数据类型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR。对于TIME, DATETIME和 TIMESTAMP值,MySQL支持小数秒,精度可达微秒(6位数)。要定义包含小数秒部分的列,请使用语法type_name(fsp)&…

软件质量保证计划_CMMI V2.0 精讲之“过程质量保证”

过程质量保证(PROCESS QUALITY ASSURANCE, PQA)目的:验证并改进已执行的过程和所产生的工作产品的质量。价值:增强过程使用和改进的一致性,以最大限度地提高业务效益和客户满意度。实践概述第1级PQA 1.1识别并解决过程和工作产品问题。第2级P…

mysql gzip_在mysql中存储GZIP:ed文本?

Is it a common thing for bigger applications and databases to GZIP text data before inserting it to the database?Ill guess that any full-text search on the actual text field will not be working before unzipping it again?解决方案Ive not seen this done muc…

html 分页_JQuery堪称完美的分页函数

演示效果&#xff1a;html部分&#xff08;引入jquery.js&#xff09;<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery简单的分页插件</title> </head><link rel"stylesheet" href"…

mysql 8.0.12解压版安装教程_mysql 8.0.12 解压版安装教程

本文为大家分享了mysql 8.0.12 解压版安装教程&#xff0c;供大家参考&#xff0c;具体内容如下1、首先在官网上下载mysql8.0.12的压缩包&#xff1a;下载地址2、下载成功后解压到任意目录&#xff0c;比如我的是E:\download\mysql-8.0.12-winx64&#xff1b;3、配置环境变量&a…

简洁又快速地处理集合——Java8 Stream(下)

上一篇文章我讲解 Stream 流的基本原理&#xff0c;以及它与集合的区别关系&#xff0c;讲了那么多抽象的&#xff0c;本篇文章我们开始实战&#xff0c;讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集合——Java8 Stream&#xf…

python入口函数的作用_python之函数中参数的作用域

学编程究竟学的是什么呢&#xff1f;在写文章的这几天也一直在思考这个问题——恐怕这也是接下来的几年一直会去思考的问题。这个问题的答案也会指导我的方法论&#xff0c;所以索性整顿一下。 现阶段我的回答是&#xff0c;发现需求&#xff0c;然后解决。 最大的需求无非是完…

idea lombok 离线安装_Lombok与IntelliJ IDEA干了一架,完胜

我相信前段时间&#xff0c;有更新IDEA到2020.2版本的同学&#xff0c;在安装Lombok的过程中&#xff0c;肯定遇到与Lombok无法兼容的问题&#xff0c;并且报错&#xff1a;Caused by: com.intellij.psi.PsiInvalidElementAccessException: Element: class de.plushnikov.intel…

jquery设置宽_JavaScript学习笔记(三十二) jQuery(中)

jQuery昨天讲了 jQuery 的基本选择器筛选器和属性操作今天来说一些 jQuery 别的东西元素操作创建一个元素var div $()内部插入元素// 向 div 元素中插入一个 p 元素&#xff0c;放在最后$(div).append($())// 把 p 元素插入到 div 中去&#xff0c;放在最后$(hello).appendTo(…

python自动化框架测试实操_自动化框架之 python+selenium+pytest

1.概述 selenium&#xff1a; 基于JavaScript代码库的自动化测试框架&#xff0c;通过脚本语言&#xff0c;模拟用户行为操作&#xff0c;最接近用户真实场景&#xff0c;实现对web自动测试。 Selenium&#xff0c;是目前的最火爆企业最主流的webUI自动化框架 pytest: pytest是…

mysql 关联查询慢_mysql慢查询语句分析总结

我们经常会接触到MySQL&#xff0c;也经常会遇到一些MySQL的性能问题。我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题通过SHOW FULL PROCESSLIST查看问题SHOW FULL PROCESSLIST相当于select * from information_schema.processlist可以列出正在运行的连…

python opencv3 轮廓检测

git&#xff1a;https://github.com/linyi0604/Computer-Vision 1 # coding:utf82 3 import cv24 import numpy as np5 6 # 创建一个200*200 的黑色空白图像7 img np.zeros((200, 200), dtypenp.uint8)8 # 在图像的中央位置 放置一个100*100的白色方块9 img[50:150, 50: 150] …

CentOS7搭建NTP服务器

搭建ntp服务器 查看服务器、客户端操作系统版本 2查看服务器是否安装ntp 3如果没有安装 4安装完成后重新查看服务器是否安装ntp 5查看ntp服务器状态 6修改配置文件 注释 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.p…

mysql 5.7.21-linux_MySQL 5.7.21 Linux平台安装 Part 2

从今天开始MySQL相关方面的东西今天是关于MySQL的安装系统为 redhat 6.10数据库为MySQL 5.7.21PS:目前最新版本为MySQL 5.7.251. 目录规划2. MySQL 5.7 下载目前MySQL 社区的GA 提供5 和8 的下载由于目前大多数系统用的还是5的版本这里统一使用5的版本注意&#xff0c;下面是按…

session很快失效_深夜,我偷听到程序员要对session下手...

我是一个web服务器我的工作是给人类提供上网服务&#xff0c;我每天要为数以万计的人提供网页浏览服务。已经是深夜了&#xff0c;我还在和手下几个兄弟为了一件事紧张讨论着。“老大&#xff0c;现在咱们每天处理的请求越来越多了&#xff0c;session同步的问题不能再拖了&…

centos7安装samba服务器

1查看是否安装samba服务 2如果为空则没有安装&#xff0c;安装显示安装完成即成功 3查看samba状态 4查看配置文件的位置 5配置文件备份&#xff0c;直接传输到本地备份 6修改配置文件 Path共享目录位置 Valid users 可以查看的用户 Browseable可以查看共享文件夹的目录&a…