Appium 纪录从 0 到 1 自学 ui 自动化的那些事

小胖。 · 2016年08月16日 · 最后由 zuiniao123 回复于 2016年10月08日 · 1887 次阅读

背景:

为了保证每次构建后主功能均正常,所以通过 ui 进行主流程遍历,节省人力成本。

工具:

测试框架选择了主流的移动 app 测试框架 appium,并结合 testng 以及 log4j 等测试框架,语言基于 java 进行编写。
Ci 方面使用了 jenkins 进行自动构建,源代码存放在 github 上,编译部署使用的 ant。

环境(本文以 mac 为例,windowns 请自行百度):

一、 安装 appium(网络不好请自行 ***)
安装 node: brew install node
安装 appium: npm install -g appium

二、 配置环境变量
终端输入命令:vim ~/.bash_profile
需要配置 java,testng 等环境变量,例如下图:

配置完后保存关闭,记得执行命令 source .bash_profile

最后可用 appium 客户端点击

进行检测查看环境是否配置 ok,具体如下图:

代码(java 语言,工具 eclipse,包含 testng 以及 log4j 测试框架):

代码暂时分为三层:基础层,数据层,业务测试层。

1、基础层:包含测试套件启动(appium 建立连接),api 方法封装,工具类:
测试套件启动,关闭主要使用 testng 里 Beforetest,AfterSuite,AfterMethod 等注解,详细可以查阅 testng 相关教程或则http://www.cnblogs.com/TankXiao/p/3888070.html

api 方法封装:主要封装了 appium 原有 api(增加日志输出等),以及结合 selenium api 封装出的一些适用性方法,例如 waitfortext,elementexists 等等,主要封装在 appoperate.java 里,然后对 ios 和 android 做一些 api 区分,详细可以查看 androidoperate 和 iosoperate。

工具类:主要是 log4j 相关的配置文件,如 log.java,log4j.properties,以及 testng 失败案例重跑等监听文件。

2、测试数据层
测试数据层我这里分为两大块,第一是 testng.xml 配置的相关测试数据准备,第二是 appium 查找控件时控件相关信息。
Testng.xml 主要是配置测试数据,例如 appium 启动相关信息,测试案例执行顺序,测试类,监听类,测试所用到的例如账号等相关数据。
数据参数化:

执行测试类顺序:

测试类:

监听类:

其他测试数据:**

在 Appium 中你会遇到,Selendroid 模式和 UIAutomator 定位差异,比如 Selendroid 的 linkText 在 UIAutomator 中用 name,还有就是 iOS 脚本想和 Android 共用一份。这在 Appium 中有了很好的扩充,Appium 客户端会在运行时决定使用哪个 Annotation 来装饰 WebElement。具体可以查看 Elements_PersonalPage 等。http://www.cnblogs.com/cosyman/p/page-objects.html

3、业务测试层
这里主要就是转换之前准备好的测试案例,模拟用户在手机上进行业务操作。
对案例进行代码化封装,使用自己封装或原有的 api,在进行过程中断言或则 api 判断,以及调用 testng 准备好的测试数据。

持续集成(ci)

持续集成主要是使用 jenkins 进行构建,ant 编译并执行。
Jenkins(我得版本是 1.65):
1.Jdk 配置

2.ant 配置

3.邮件配置


ps:注意这里 password 要用授权码。

4.jenkins 项目配置:
参数化构造:具体看项目配置,这里只截图 ant 相关配置

5.源码管理:svn 或则 git 等等,我这里是放在 git 上的

6.构建过程:构建时我这边使用了 shell 脚本修改部分文件内容(看项目),然后再运行 ant:

7.构建后邮件通知:
使用了自己写的 html 页面进行报告,一并发送 testng report 报告

一定要配置邮件在何时发送,是构建成功,失败还是其他情况,我这里配置了构建成功和失败都会发出

最后奉上学习期间所遇到的问题解决的相关链接:

log4j 详细教程:http://www.codeceo.com/article/log4j-usage.html http://blog.csdn.net/azheng270/article/details/2173430/
testing 入门教程:http://www.cnblogs.com/TankXiao/p/3888070.html
http://topmanopensource.iteye.com/blog/1983735
appium-page 相关:http://www.cnblogs.com/cosyman/p/page-objects.html
appium-desired_capabilities 详解:http://www.mamicode.com/info-detail-636932.html
GitHub 和 SourceTree 入门教程:http://blog.csdn.net/collonn/article/details/39259227
Start-appium-server:http://www.testingdiaries.com/start-appium-server-programmatically/
Appium 中文 api:https://testerhome.com/topics/3144
Simpleapptest 源码:https://github.com/hxbjava/RYM-SimpleTest.git

Ps:自学 appium 以来写的第一个完整的工程,有意见请指出,谢谢。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

不错,支持楼主,跟我的自学步骤很像,不过我没用过 MAC😁

赞 值得学习的帖子

框架设计的比较好,我觉着再增加一层 “” 对象层 “” 就比较好啦,根据 PO 模式,将每个页面封装成一个对象继承自 BasePage(所有的页面都有共同的东西,每个页面都有元素,每个页面元素都有相应的方法),这样代码的复用性和可维护性会更高。然后将每个元素的属性(id,xpth,name,classname)分离出来,定义在 xml 文件中。

从数据分离的角度看,你的框架对页面控件的属性管理支持不是很高。

#3 楼 @lingsuilizai 页面元素确实可以分离出来,其实在业务测试层里就有 2 个 page 页面,只是我在文档里没有单独拉出去,后续完善脚本的时候也将这一块一并修改下,元素属性定义在 xml 这个可以有。

楼主,排版一下。 markdown 用起来,什么是段落,什么是句首,什么是列表

值得学习

楼主可否分享下源码😍 想看看失败重跑的 html 报告和 excel 怎么实现

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册