ios平台UI自动化策略-UIautomation版(一)[谢绝转载]

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);

    },

7.数据库接口
方式太多。我这里用的是客户端curl伪造post请求,服务端php进行响应。比如:

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画成啥样自己考虑把。


后面我把代码陆续贴上来把。不过要另开文章写不下了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值