@[toc]
# 写在前面
**java**
java 当前最主流的后端开发语言,目前做自动化主要是两大阵营 java 和 python,这里不讨论游戏自动化,相比而言,小厂的 python 稍微主流一些,大厂的 java 稍微主流一些,毕竟大厂几乎全部被 java 占领,而测试作为保障项目质量的一个关键角色,必须要打穿整个项目流程,因此贴近研发代码就显得尤为重要
**testng**
目前整个测试圈有两大阵营,一个是忠实的 testng 阵营,另一个是新潮流 junit5 阵营,不论哪个阵营未来都会成为测试圈的主流,我个人感觉纯粹的自动化测试或者测开应该是 testng 目前更占有又是,junit5 随着许多开发转为测试开发,会把 junit5 的技术带到测试圈进而丰富测试圈的技术栈
我个人认为 testng 比 junit5 更灵活,更加适合做自动化,但是 junit5 提供了更丰富的参数化运行,总的来说如果项目较为复杂我推荐使用更加灵活多变的 testng, 简单的项目就可以使用 junit5 来做
**appium**
写过 web 自动化脚本的人对于 appium 的上手会非常迅速,因为 appium 实际上是基于 selenium 的,脚本代码绝大部分都是一致的,只是对于 app 的 UI 测试来讲,配置稍微显得麻烦了一些,而且还要考虑到安卓和苹果两个系统,苹果对于安卓来说配置还要麻烦一些
我之前总结过一个继承关系图谱,WebDriver 是一个接口,MobileDriver 直接继承它,而 RemoteWebDriver 直接实现它
**本文的项目地址**
appuitest4j:[https://github.com/abcnull/appuitest4j](https://github.com/abcnull/appuitest4j)
另外我推荐我一个 web ui 测试项目的框架:[https://github.com/abcnull/webuitest4j](https://github.com/abcnull/webuitest4j)
# 项目结构介绍
我这里张贴一下我的项目结构图
![项目结构](https://github.com/abcnull/Image-Resources/blob/master/appuitest4j/项目结构.png)
整体框架都是放在 test 包下,采用了 pageobject 思想,我们将页面对象抽离出来,复杂的页面操作逻辑写在其中,pageobject 大致分为两个大的“阵营”,一个是 page 阵营,也就是单纯的页面对象,另一个就是 case 阵营存放测试用例脚本
- page 阵营
- basepage 包
这个是所有页面对象的父类,主要做页面对象共有方法的封装,这样在页面对象中大家就不用编写一些重复的复杂的页面操作方法,直接使用父类的方法即可,还包括一些页面初始化的操作
- pageobject 包
- data 包
对于复杂的 pageobject,我们将页面中的数据进行分离,其中的 field 为 static final,类的命名比如 BaiduData
- locator 包
对于复杂 pageobject 可能会元素过多,这里我们也专门进行了分离,其中的 field 为 static final,类的命名比如 BaiduLocator
- page 包
存放非常纯粹的页面操作逻辑代码,可以直接使用 data 和 locator 中的数据,类的命名比如 BaiduPage
- case 阵营
- basetest 包
是所有 testcase 的父类,这里主要做的是测试的初始化配置操作,也就是说测试的一些工具配置放在 basetest 中,页面类的共有方法放在 BasePage 中,这样很好的分工可以减少项目的混乱程度,让整个架构变得更加清晰
- testcase 包
这里就可以直接写测试用例代码了
# 基本 usage
整个框架分给多个成员去完成自动化的任务,当框架优化好定型之后,编写自动化测试脚本的成员只需要关注下面几个包
- pageobject.data
- pageobject.locator
- pageobject.page
- testcase
其他包无需关注,因为成员只需要编写测试用例 testcase 和需要被测的页面类 pageobject 中的三个包
打个比方,比如要测试百度页面的搜索功能,我们可以直接在 pageobject.page 中写一个 BaiduPage 类,其中写一个 search 方法来实现完整的百度页面搜索数据的操作,其中这个数据字段可以通过 pageobject.data 中定义好的数据传进来,百度页面的搜索框的 xpath 定位也可以先写在 pageobject.locator 中,然后再 search 方法中直接调用这个 xpath 即可,最后我们在 testcase 包中写一个 BaiduTest 类,其中写一个 testSearch 方法,调用 BaiduPage 中的 search 方法,最后 assert 即可
具体更加详细和丰富的其他用法可以通过拉取博主的 github 项目来查看~
# 配置驱动项目
我们通过`.properties`文件的形式来进行配置驱动项目
这个`config.properties`存放在`src/test/resources/config`中
# 数据驱动
项目支持数据驱动的方式,我们实际中的 UI 自动化往往通过 jenkins 来持续构建,jenkins 的 job 中支持 param 传参,我们在 mvn 项目的 pom 文件中添加如下:
![数据驱动](https://github.com/abcnull/Image-Resources/blob/master/appuitest4j/数据驱动.png)
xmlFileName,param1,param2,param3 这些名字需要与 jenkins 中传参名字一致,然后 mvn 中需要一个 surefile 插件,在这个插件的 suiteXmlFiles 标签中指定运行那个 testng.xml `<suiteXmlFile>testng.xml</suiteXmlFile>`,还可以指定传给 testng.xml 的参数(具体可以拉取项目代码查看)
# 日志系统
日志系统使用的是 slf4j+log4j 的形式来做,同时使用了 lombok 插件,我们将 log4j2.xml 的日志格式配置文件放在了`/src/main/resources`下,我们在代码打日志,先在类上打上`@Slf4j`,然后就可以直接使用`log.info`的形式了。当项目测试运行完,我们可以直接在项目下看到 logs 文件夹,可以在其中查看到我们的日志
# surefire 插件
surefire 是 mvn 的一个非常适用的测试插件,它可以结合 junit5,testng 来使用,我们可以使用它来帮助我们外部传参,可以使用它指定当我们 mvn 构建时候要执行哪个 testng.xml 文件
![surefire](https://github.com/abcnull/Image-Resources/blob/master/appuitest4j/surefire.png)
甚至我们可以使用 mvn 命令配合上 surefire 加上一些命令参数来运行指定的测试用例,这些可以通过访问 surefire 官网来查看
# testng 监听器
这里我目前使用了两个监听器(这些监听器都是来源于 testng 的,当我们继承或实现这些监听器,方便我们做拓展),一个是 TestListenerAdapter 类,另一个是 IAnnotationTransformer 接口
- TestListenerAdapter 类
TestListenerAdapter 类很强大里头有测试执行过程中各个阶段的方法,比如测试开始时的方法,测试失败时,测试结束时等等,因此我们可以把这些方法重写,然后把 log 信息打印进去,这样我们就可以看见完整的 log 流程了,同时我把截图的代码存放在了被重写的测试失败的方法中
- IAnnotationTransformer 接口
我通过实现这个接口来进行 testng.xml 测试用例运行优先级的调整,传统的 method 运行的优先级是:再一个 class 中,method 是依据方法名排序,所以基本是乱序的,与 testng.xml 中 method 的组织顺序无关,我加上这个监听器后,可以保证 testng.xml 中 class 里的 method 的书写顺序就是执行顺序,这个可以说是非常实用的,具体的源码我是参照了 stackoverflow
有了这些监听器,我们需要在 testng.xml 去声明一下,表示会使用这些监听器
```xml
<!-- 监听器 -->
<listeners>
<!-- 测试日志监听器 -->
<listener class-name="com.abcnull.listener.TestLogListener"/>
<!-- 优先级监听器 -->
<listener class-name="com.abcnull.listener.RePrioritizingListener"/>
</listeners>
```
# 责任链模式
其实对于 appium 来讲,我这里可以不加责任链模式的,由于相对的我有一个很完整的 webuitest4j 的项目,其中涉及到多个浏览
没有合适的资源?快使用搜索试试~ 我知道了~
xmljava系统源码-appuitest4j:java+appium+testngforAppUITest整体已经完成可以进行...
共32个文件
java:23个
xml:5个
exe:1个
需积分: 9 1 下载量 9 浏览量
2021-06-06
00:06:12
上传
评论
收藏 4.58MB ZIP 举报
温馨提示
xml java系统源码 @[toc] 写在前面 java java 当前最主流的后端开发语言,目前做自动化主要是两大阵营 java 和 python,这里不讨论游戏自动化,相比而言,小厂的 python 稍微主流一些,大厂的 java 稍微主流一些,毕竟大厂几乎全部被 java 占领,而测试作为保障项目质量的一个关键角色,必须要打穿整个项目流程,因此贴近研发代码就显得尤为重要 testng 目前整个测试圈有两大阵营,一个是忠实的 testng 阵营,另一个是新潮流 junit5 阵营,不论哪个阵营未来都会成为测试圈的主流,我个人感觉纯粹的自动化测试或者测开应该是 testng 目前更占有又是,junit5 随着许多开发转为测试开发,会把 junit5 的技术带到测试圈进而丰富测试圈的技术栈 我个人认为 testng 比 junit5 更灵活,更加适合做自动化,但是 junit5 提供了更丰富的参数化运行,总的来说如果项目较为复杂我推荐使用更加灵活多变的 testng, 简单的项目就可以使用 junit5 来做 appium 写过 web 自动化脚本的人对于 appium 的上手会非常
资源详情
资源评论
资源推荐
收起资源包目录
appuitest4j-master.zip (32个子文件)
appuitest4j-master
pom.xml 7KB
zhanghua_testng.xml 176B
liming_testng.xml 530B
src
test
resources
config
config.properties 282B
driver
chromedriver.exe 8.3MB
java
com
abcnull
exception
PlatformException.java 476B
basepage
BaseApp.java 4KB
BasePage.java 1KB
basetest
BaseTest.java 4KB
TailHandler.java 1KB
HeadHandler.java 2KB
BaseDriver.java 4KB
AndroidDriverHandler.java 4KB
DriverHandler.java 3KB
IOSDriverHandler.java 4KB
constant
TestConstant.java 156B
pageobject
locator
CSDN_HomeLocator.java 347B
LoginLocator.java 217B
data
LoginData.java 253B
CSDN_HomeData.java 201B
page
CSDN_HomePage.java 803B
LoginPage.java 1KB
testcase
CSDN_HomeTest.java 587B
util
WordartDisplayer.java 1KB
ScreenshotUtil.java 2KB
PropertiesReader.java 1KB
listener
RePrioritizingListener.java 3KB
TestLogListener.java 2KB
main
resources
log4j2.xml 3KB
testng.xml 1KB
.gitignore 66B
README.md 10KB
共 32 条
- 1
weixin_38640984
- 粉丝: 4
- 资源: 944
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LABVIEW程序实例-随机数曲线图.vi.zip
- LABVIEW程序实例-索引数组.zip
- LABVIEW程序实例-索引数组.zip
- LABVIEW程序实例-数组极值.zip
- LABVIEW程序实例-数组极值.zip
- LABVIEW程序实例-图标与接口板.zip
- LABVIEW程序实例-图标与接口板.zip
- LABVIEW程序实例-同时终止两个循环.zip
- LABVIEW程序实例-同时终止两个循环.zip
- LABVIEW程序实例-通过全局变量接收数据.zip
- LABVIEW程序实例-通过全局变量接收数据.zip
- LABVIEW程序实例-图形颜色属性.zip
- LABVIEW程序实例-图形颜色属性.zip
- LABVIEW程序实例-图形区域属性.zip
- LABVIEW程序实例-图形区域属性.zip
- LABVIEW程序实例-图片.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0