iOS持续集成实践
作者:网络转载 发布时间:[ 2012/12/28 10:42:51 ] 推荐标签:
随着自动化测试的开展和新的项目开展,新的问题也一个个的出现了,这些问题包括:
<!--[if !supportLists]-->1) <!--[endif]-->开始的时候没有使用jenkins,同时由于机器的IP地址没有办法固定下来,因此没有办法得到需要的测试报告,于是提供了一套机制来生成测试报告,测试报告的生成结果如下:

后来使用jenkins来进行持续集成,该测试报告生成方式被抛弃;
<!--[if !supportLists]-->2) <!--[endif]-->电影票客户端数据每天都需要更新,如此数据准备的操作需要放到自动化中来解决,于是提供数据准备和数据清理工作,提供@DataPrepare和@DataClear来进行数据准备和数据清理的配置;

<!--[if !supportLists]-->3) <!--[endif]-->测试环境有时候不太稳定,一些测试用例在第二次运行的时候可以通过,问了解决这个问题提供了@Rerun标签来对失败的测试用例进行再次执行进行配置,允许设置重复执行的次数;
<!--[if !supportLists]-->4) <!--[endif]-->后来环境更恶劣了,已经不是靠重复执行可以解决的,同时也希望当测试环境有问题的时候不要运行测试用例,为了解决这个问题提供了@CheckEnv标签来检查环境;
这些部分的特点都是与业务基本上没有相关性,因此在这里的做法是将这部分独立提成一个工程,该工程为各个业务的自动化脚本提供支持,同时在这个工程中处理了运行自动化脚本时的内存泄露和异常退出时再次运行无法启动app的问题;
目前客户端和服务端的交互一般做法是通过http请求进行的,服务端处理之后将结果用json串进行返回,因此针对这样的协议在框架工程中添加了对于http的封装,通过这部分可以实现在对于服务端接口的测试,因此在同一个业务的自动化工程中可以进行UI自动化测试,同时也可以进行服务端的接口测试;
在这里的另一个问题是任何协调自动化验证的版本和build出来的版本,目前是做了这样一个约定,统一一个地方存储构建之后的版本,build成功后将构建出来的新版本放置在这个约定位置,然后自动化脚本配置执行的app位置是这个约定位置,从而保证自动化运行的app都是新的成功版本,并且不需要通过人工的方式来进行同步;因此在build的步骤中加了一步在每次成功构建之后将构建的结果放置在这个指定位置:

然后在自动化脚本的配置中按照如下的方式指定运行的app位置:

自动化测试运行需要时间,如果每次在代码提交之后都运行自动化测试验证的话可能不一定合适,同时新版本的更新也不需要每天都更新几次新版本,目前本地的新版本更新基本上一到两天一次比较适合,因此设置自动化验证Job的执行策略是每天定时执行一次;
关于更新ipa包:
到这里故事走到要结束的部分了,构建了稳定的新版本之后的下一个任务是把新版本发布内测,这个部分定义在自动化验证的Job中,在自动化验证的步骤之后增加一个新的步骤用于上传ipa包,这一步需要内测版本下载服务器提供一个接口或者一种策略来支持ipa的上传和更新,目前本地的内测版本下载服务器的这个功能还在开发中,因此ipa包的更新还是靠手工上传;
下一步展望:
目前的这个方式不是好的方式,那么如何把iOS的持续集成做的更好,下一步又该是怎么样的呢?在这里说说自己的一点看法:
<!--[if !supportLists]-->1) <!--[endif]-->目前这一套的东西游离在kelude的框架之外,而看看Xcode Plugin这些的终实现仍然是使用的Xcode的命令行工具,那么理论上这个应该可以统一起来整合在我们自己的框架之下;
<!--[if !supportLists]-->2) <!--[endif]-->目前整个流程中缺少了单元测试的这部分内容,由于本地的业务目前单元测试实施的意义不大因此忽略了这部分内容,在之后客户端形成自己业务SDK之后需要将这一部分补充上来;
<!--[if !supportLists]-->3) <!--[endif]-->目前代码的静态检查主要还是依赖于和开发之间的约定,依赖于Xcode来进行,虽然jenkins提供了Clang Scan-Build Plugin插件进行集成,但是目前还没有将这部分内容很好的集成进来,在之后需要对这部分进行补充,同时过滤第三方的问题,而把关注点集中在自己的项目上;
<!--[if !supportLists]-->4) <!--[endif]-->目前环境切换脚本,构建和自动化应该可以更好的协调在一起,而不是采用目前这种临时的笨办法;
<!--[if !supportLists]-->5) <!--[endif]-->新的内测版本的上传更新可以做到更加的自动化,而不需要在手动的将稳定版本上传至服务器上;
写了这么多,更希望的是抛砖引玉,希望收到大家更多的建议和反馈,更希望可以从大家那里学到新的东西,抛弃目前的一些浅显的做法!

sales@spasvo.com