just for Record
一、环境
apache/php/mysql/xCode6/instruments,macOS自带大多数,自带LAMP不完善改用XAMPP
二、项目流程
阶段 | 子阶段 |
框架搭建 | 框架选型 |
划定实施范围 | |
2层基础支持代码实施 | |
1层UI数据采集 | |
3层逻辑函数构建 | |
类库文档化 | |
框架维护 | 1层UI数据随版本更新 |
扫略3层代码功能,确认是否需要调整 | |
用例设计 | 客户端case统计(v1.0范围内) |
评估并确定要实施的自动化case | |
分工和排期 | |
用例编写 | case组建和驱动 |
评估和确定断言点 | |
断言flag构建 | |
case断言和结果输出 | |
平台搭建 | caseRunner逻辑实现 |
数据库设计和建立 | |
数据接口设计实施 | |
caseRunner数据库回传模块耦合 | |
web前端设计实现 | |
自动化case预警机制实施 | |
平台维护 | server备份 |
守护进程管理 | |
数据库管理 |
三、实现逻辑
1.框架编写
基于UIautomation的三层封装,第一层为UI接口,随每一版本UI实时更新,即xPath.js。第二层为基础逻辑支持,用于解决自构控件不支持原生手势方法的问题,即basicAutomation.js。第三层为流程方法构建,将某些常用操作封装成单独的函数,即gesture.js。二层代码稳定,三层积累性增加,一层随版本更新。
2.case编写
使用封装好的框架进行编写,在确定case的前提下,给预计要断言的位置插入断言flag。将驱动代码断言化后,整合成case。
3.caseRunner编写
这里提供两种思路:1)直接使用instruments进行运行和输出,那么用例需要串行组织,case和case之间需要强耦合,无法独立运行。case量小时很方便。2)调用instruments命令行驱动case,使用shell控制instruments的状态和执行流。这样case之间可以独立运行,坏处是每个case必须从初始页面开始。如果第三层逻辑封装到位,其实写起来并不困难。
4.一层UI采集
直接用变量名称存储控件路径,比如:
searchBar: function(){
return basic.body().images()[2];
},
5.三层逻辑控制
调用UI层提供的变量,来进行函数封装,更新UI时对逻辑层不发生影响。例如:
changeCityTo: function(key){
basic.tap(mainPage.functionButton());
basic.tap(functionFloatPage.changeCityButton());
basic.tap(changeCityFloatPage.cityName(key));
basic.wait(1.5);
},//切换城市至某个城市(城市名称需要和程序内显示的吻合)
6.二层基础支持
UIautomation对应用中的非标准控件很无力,比如操作的时候要点这个控件,但是这一控件并没有tap()方法。思路就是读取控件的rect(),算出中心点再调用方法对中心点进行操作。比如:
tap: function(ele){
var tapPointHorizontal =parseFloat(ele.rect().origin.x+(0.5*ele.rect().size.width));
var tapPointVertical =parseFloat(ele.rect().origin.y+(0.5*ele.rect().size.height));
this.target().tap({x:tapPointHorizontal,y:tapPointVertical});
this.wait(this.config.shortTime);
},
sudo curl -d "appVersion="$reportAppVersion"&date="$reportDate"&duration="$reportDuration"&crashCount="$reportCrashCount"&totalCount="$reportTotalCount"&osVersion="$reportOsVersion"&deviceName="$reportDeviceName"" http://10.61.3.24/rest/iosInsert.php
再在对应的php里面插数据库。
8.预警逻辑
可以守护进程/定时任务/死循环。我这里就是写了死循环,周期check数据库并判断,触发条件就发邮件。太长贴不上了反正就是查数据库,shell写个死循环驱动后sleep。
9.web前端
我用的bootstrap,省心省事没广告好兼容,图表请chart.js画成啥样自己考虑把。
后面我把代码陆续贴上来把。不过要另开文章写不下了。