aototest(V1.0 以线上运行)
maven+TestNG+selenium+Excel的UI自动化框架升级版本解剖图
项目简介
maven:是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理。这里主要用到它的jar包管理
TestNG:是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集成测试
框架结构雏形
base:里面有个基类 (BaseParpare.java),这个类的主要作用是启动(启动浏览器使用了TetsNG的@BeforeClass)和关闭浏览器的作用(关闭浏览器使用了TetsNG的@AftereClass)
pages:页面元素类,每一个java类,都是一个页面,存放的都是对应页面的所有元素定位值。
pageshelper:这个包主要存放的是对应页面的帮助类
plugins:主要存放的是arrow插件以及第三方插件。
testcases:顾名思义就是存放测试用例的地方
utils:这个包主要是封装了各种工具类,Selenium api封装类,读取属性文件类和选择浏览器类等
config目录:存储框架类所需的所有属性文件,比如arrow的配置文件以及自定义的一些属性文件。
res目录:主要存放的是driver
result目录:存储测试框架运行测试用例生成的报告(包含log,截图
LoginPage_001_LoginSuccessFunction_Test:第一部分:LoginPage表明你是哪个模块的;第二部分:001,分用例编号;第三部分:LoginSuccessFuntion这个是你用例具体要干嘛的一个简称;第四部分:Test每个用例以这个作为结尾后缀。每个部分之间必须以下划线”_”作为分隔符 。
编写代码
1.这个类的主要作用是启动和关闭浏览器
2. 这个包主要存放的是对应页面的帮助类
3. 主要存放的是arrow插件以及第三方插件
4.存放测试用例的地方。在这个包下,还会有很多子包,子包的个数根据你测试的系统的模块来划分
5.这个类配置了log,封装测试平台和测试浏览器选择工具类 。这个类封装了Selenium API
6.driver的配置文件,arrow的配置文件
7.用浏览器测试所需要的driver
8.存储测试框架运行测试用例生成的报告(包含log,截图等)
9. maven的配置文件,项目核心配置,用于构建项目、自动下载项目依赖以及后续的和testng、jenkins配合持续集成等
aototest - 测试框架(V2.0)
1.项目简介
什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动。数据驱动包含了数据,他就是测试数据,在自动化领域里,提倡数据分离,也就是说,测试用例和测试数据是分开(存储)的。在本框架设计中,采用的是Excel存储测试数据。
2.框架更改详解
2.1 更改用例类:LoginPage_001_LoginSuccessFunction_Test.java
更改后数据不是写在代码中,而是从excel中读取。那么怎么让读取数据,且对应用例呢?
2.2 测试数据如何保存-设计excel
先看看如何设计excel:
excel的表名以模块名命名。excel中,有个sheet,名字为'001',对应用例编号,和设计用例的的类名第二部分是对应的,也就是说一个sheet就是一个测试用例的数据。在执行测试用例的时候,通过模块名字找到对应的excel,然后再根据对应的用例编号找到对应的sheet,最后在读取excel数据。
2.3 通过数据提供者获取测试数据
通过数据提供者(@DataProvider)来传递给测试用例,这里将数据提供者代码放置在BaseParpare.java中,目的是为了每次运行一个用例都会读取对应的测试用例。
增加ExcelDataProvider.java与pomjar依赖
aototest(V3.0)
1 关键字驱动概述
关键字驱动测试(Keyword-driven testing),也叫做表格驱动测试或者基于行为词的测试。
关键字驱动到底是什么样的?动作也就是关键字,比如你选择了“点击”操作,就意味着这步骤会执行一个元素点击操作。
关键子驱动是如何实现的:
问:那么如何定义动作?
答:在框架设计的时候会专门设计一个类,来实现各种“动作”的具体内容。当你在excel中读取了一个“动作”之后,框架会自动解析这个“动作”背后的事情。在测试框架中这个类的名字叫做:SuperAction.java。
问:如何定义和解析元素定位?
答:每个页面是一个excel,所有元素的定位方式和定位值都保存在里面
问:如何用例存储?
答:一个excel就是一个模块,然后这个excel文件中一个sheet就是这个模块中的一条用例
问:Excel文件如何执行测试?
答:excel文件存储用例,但excel只是文件,如何调用测试入口呢?其实在关键字驱动框架中,有一个用例生成类(TestCaseFactoryForSingle.java,TestCaseFactoryForAll.java),它可以遍历所有excel的所有sheet,生产一条条用例类,
关键字优缺点:
优点:只需要自动化测试人员封装好相关关键字操作,就可以提供给黑盒测试人员用,黑盒测试人员只需要掌握元素定位的方式以及对关键字框架的使用即可·条理清晰,很容易上手使用
缺点:需要自动化测试人员花费大量时间提前把关键字框架中的操作提前封装好对于复杂的测试需求,关键字框架对于操作的封装难度较大
2.在原来的框架下更改,如下图所示
1. 关键子驱动与数据驱动比较
3.解析新增页面目录
page: 存储页面元素的目录,在此目录下每个页面是一个excel,会替换原先框架的com.demo.test.pages包,所示。
page 元素定位excel
4. 解析新增测试用例目录
testcase:存储测试用例的目录,每个模块一个excel文件,每个excel文件中的sheet是一条测试用例,会替换原先框架的com.demo.test.pageshelper包和data目录。
5.解析新增测试用例目录
testcase:存储测试用例的目录,每个模块一个excel文件,每个excel文件中的sheet是一条测试用例,会替换原先框架的com.demo.test.pageshelper包和data目录。
用例Login的Actions
测试用例excel是用于存储测试用例步骤、步骤中涉及的动作和测试数据等内容,命名规则如下:
1.excel文件命名规则为:“模块名称.xlsx”;
excel中第二个sheet命名规则:“001_LoginSuccessFunction”来自原框架测试代码中的部分内容,也就是省略了“页面名称_”:HomePage_和尾部的“_Test”部分:_Test,这两部分省略的部分在生成代码的时候会自动添加。
注意:测试用例excel文件sheet“001_LoginSuccessFunction”中的“动作”),这列是通过sheet“Actions”中的“动作名称”列来赋值的:选择“动作”列,如下图所示,整列已经变灰色,表明整列已经被选中。点击excel顶部的“数据”tab -> 数据验证:在数据验证-设置中选择验证条件为:序列并勾选“忽略空值”和“提供下拉箭头”,点击来源最右边的带箭头的按钮,点击sheet 'Actions',选择A2到A26(鼠标左键先点击A2不放,然后拖拽至A26),此时注意数据验证框的变化:=Actions!$A$2:$A$26,点击回车键。
用例excel替换pagehelper类和data excel
6. 解析自动生成代码
自动生成代码TestCaseFactoryForSingle.java,
TestCaseFactoryForSingle.java这个类,这个类主要是用于生成指定模块的测试用例,这个类有一个main方法,当你执行之后,会提示你输入要生成测试代码的模块。这里的模块的名字就是testcase目录下的excel文件名字(不包含后缀),然后回车,
此时回到src/com/demo/test/testcases/login包下查看,一条用例生成了 LoginPage_001_LoginSuccessFunction_Test.java,所示.
dependency>
groupId>org.apache.poigroupId> artifactId>poi-ooxmlartifactId>
version>3.10-FINALversion>
dependency>
automation
接口自动化测试框架
1.框架简介
APIAutoTest是处理API接口的轻量级自动化测试框架,Java语言实现,基于TestNG测试框架,支持持续集成,自动构建与测试。
2. 配置
主要用于自动化测试和统计当前文档的接口数目。主要包含的信息:接口协议、接口域名、接口配置列表。
- 接口协议:测试接口的网络协议,如:http、https,其他协议,等待以后版本支持。
- 接口域名:测试接口的域名。
- 接口配置参数:主要包括测试 ID、接口名称、运行模式、测试结果。
具体模板显示如下:
3. 公共参数
此表用于存储测试前设定好的参数和测试过程中提取出来的参数,以 `key,value` 的形式存储。sheet 名规定是`公共参数`,不可变化。如图所示
4. 接口测试数据
每个接口的测试数据占用一个 sheet 表。数据包括几个部分:sheet 名、接口路径、接口说明、接口参数组合,其中接口参数组合又细分为:接口调用方法、接口参数、测试预期结果、测试实际结果、提取公共参数。完整的例子如图所示:
4.1 sheet 名
一般使用接口名称,与 **配置表 - 接口配置参数-接口名称** 相对应。
4.2 接口路径
接口路径,是接口测试 url 中域名后面,参数前面的部分,如:
```
/api/members/members/password_login # 接口测试路径样式
```
4.3 接口说明
对于接口用途的一个简要说明。
4.4 接口参数组合
1. 调用方法。一般为 http 协议的调用方法,如:`GET、POST` 等
2. 参数列表。接口的所有参数,必填和非必填。测试时,非必填参数可为空;异常情况测试,必填参数也可以为空。每个接口所要求的参数数目不一样,编写测试用例时,每个参数占用一列即可。参数列表可支持获取公共参数形式填写(`${ziduan}`),如:mobile 这个字段想从公共参数列表获取,则可以写成`${mobile}`。
3. 接口 url。由 **协议 + 域名 + 路径 + 参数** 拼接而成的完整 url,这个数据是在测试过程中自动生成的,也可以当做对测试结果的校验。
4. 预期结果:这个数据一般从接口文档的预期结果获取的,可支持正则表达式,匹配部分测试结果。可填入字段校验:`accesstoken`,也可以填写正则表达式校验`"accesstoken":"[a-zA-Z0-9]*"`。
5. 实际测试结果。在测试过程中,按照本次调用参数调用接口所产生的响应数据。
6. 是否通过测试。通过预期结果和实际测试结果的比对,得出接口当次测试是否通过。
7. 提取公共参数的名称,以`,`号区分开。如:提取两个公共参数`openid`和`accesstoken`,则可以填入`openid,accesstoken`即可。
4.5效果展示
1.数据准备
2.刚刚参数将要提取code,在第3步展示
3.提取公共参数:会把参数放到公共参数表中
4.运行框架后面,效果展示如下图
5.表示效果展示如下:
6.报告展示:
4.6结语
现在网上有很多关于接口自动化测试的工具或者框架,为什么要费力气重新写一个接口自动化测试的框架呢?因为想要一个很轻便的接口自动化测试框架,不懂技术的同学也可以使用,找过有JMeter,Postman,都不太符合我的要求,所以才有这个框架的诞生。这个框架的核心特点:轻便、使用简单。
接口自动化测试在这个追求效率的时代,而做接口自动化测试的工具很多,比如soapUI,postman,jmeter等等,但是这些通用的工具的可扩展性以及跟项目的契合度上并不是十分合适。框架的作用在于使测试脚本编写变得简单,增强测试脚本的可维护性,容错率等,提高测试脚本的编写效率,从而提高测试效率。