HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

专访《iOS 测试指南》作者羋峮

  • 2014-04-29
  • 本文字数:5126 字

    阅读完需:约 17 分钟

在 2014 年 QCon 北京大会上,羋峮进行了他的新书《iOS 测试指南》的签售会。在大会中,InfoQ 与羋峮进行了一次专访,羋峮分享了他在iOS 平台做自动化测试的一些经验。

羋峮有着多年的测试经验,先后在高德、豆瓣以及豌豆荚从事过测试相关的工作。他在豆瓣工作时,实现并且开源了iOS 的自动化测试工具 ynm3k ,并且刚刚完成了系统介绍 iOS 自动化测试的新书《iOS 测试指南》。

InfoQ:羋峮你好,我想请你先介绍一下你的测试工作经历。

羋峮:我是 03 年毕业的,修了三年地铁以后就转行做软件测试工作了。到现在,做测试有七到八年的时间,我是从豆瓣开始做的移动测试相关的工作,当时移动测试也正好赶上一个起步的阶段,所以还有一点小小的心得。

InfoQ:我想问的第一个主题是关于自动化测试和持续集成的方面的问题。就我所了解的情况,现在大部分的互联网公司关于移动端的测试的工具都还处于比较初级的阶段,很多公司也没有真正应用上那个自动化测试。我昨天跟阿里的 iOS Leader 聊,他们没有用到移动端自动化测试,我之前在网易工作,他们也没有做移动端自动化测试,你觉得是什么原因造成移动端自动化测试还没有流行起来,没有大规模的应用?

羋峮:测试的投入产出比,尤其是自动化测试的投入产出比一直都没有一个非常简单有效的说明方法。当投入产出比的说不清楚的时候,可能很多人选择观望。tinyfool 在给我写这本书的书序的时候,他也做了一个小调查,基本上就是不测试,或者简单测试的占很大的比重,比较细致的测试非常少。测试做的非常少主要有这么几方面的原因:

1、移动端是一个新生事物,总结出来的方法还没有被普遍的认可。移动端承接了更多 UI 展现方面的工作,其中有很多的和人交互的东西。不但功能复杂,并且还没有唯一的标准。测试的注意力很容易不分散,并且效果非常的不明显。

2、移动端现在更多的是市场行为,需要有产品的占领地盘。还没有到精雕细琢的时代。所以,测试在这个时候明显不如产品或者设计师有话语权。并且现在需要的是“有”,还没有到“精”的程度。

3、国内测试界相对比较浮躁,更多的不是从技术角度去解决问题。所以导致测试需要关注点过于分散,没有真正的定义好自己的工作职责和范围。什么事情都需要关注,最后就是什么事情都没有关注好。

我比较幸运,当时去了豆瓣。豆瓣当时明确的定义了 QA 的工作职责——推荐新技术或者开发新工具,让开发工程师更好的测试。并且设计师在测试阶段也会投入很大的精力去 review 设计稿中各种交互方面的不足。

InfoQ:你在豆瓣开始尝试 iOS 的自动化测试,那我想知道你在这个过程中取得哪些成果?

羋峮:刚去豆瓣接手工作的时候自己思维还是有局限性的,只是把自己工作定位在去实现一些基于界面操作的自动化的东西,这个其实现在看来可能它是一个切入点,但是可能并不是一个非常好的切入点,其实还有很多工作要做,由于当时自己思维局限所以就做了。

另外一方面,就是因为只想到这一点,所以就是精力比较集中, 更容易出一些成果。2011 年年底的时候开始做这些工作,自己先后找了有五款自动化测试工具调研。调研的方法是先写一些 demo 的东西,然后再看看工具的源代码。搞清楚工作的架构和底层原理。最后发现,当时的工具都有一些这样那样的问题。然后自己就开始幻想写一个适合自己的这个自动化工具。

当 iOS5 发布以后,苹果的对于 UI Automation 进行了一个改进,增加了performTaskWithPathArgumentsTimeout接口。通过该接口可以实现 UI Automation 和外部程序的简单通信。基于这个改进,自己拉了在豆瓣的一个开发的同事,两个人就用一个半月的时间写了一个自动化测试工具。也是因为有了 performTaskWithPathArgumentsTimeout 接口的发布,所以淘宝也当时利用那个接口写了另外一种实现的 iOS 的测试工具。

在完成 ynm3k 的开发以后,使用它为豆瓣 FM 和豆瓣电影写了一些自动化测试用例。效果还可以。

InfoQ:淘宝那个开源了吗?

羋峮:淘宝那个开源了,叫 athrun ,我那个也开源了叫 ynm3k ,当时是 12 年 7 月份,那个 ADC 的专门都有分享,在网上应该也都有链接 Athrun instrument driver 豆瓣 iOS 自动化测试实践和经验

InfoQ:当时你们花一个半月开发这个自动化测试工具是用 20% 的工作时间,还是完全的工作时间来做这个事情?因为我觉得你在开发这段时间内肯定也有普通的正常的测试任务要完成,你们公司是怎么平衡这件事情的?

羋峮:我们应该是业余时间完成的这个框架。主要就是晚上,或者是快下班的时候,自己挤出来一些时间做这个事情。

InfoQ:跟同事的配合也是在那段时间来进行的?

羋峮:当时就是我俩分工相对来说很明确,一方面需要有更好的遍历控件和定位控件的方法,是由我来现实的;另一方面,需要引入一个 JavaScript 语言的单元测试框架。这部分由我豆瓣的同事 @SeanLionheart 完成,他在正式发布的时候已经去美国上学。

我们两个之间的配合非常顺畅,因为各自的部分是完全解耦的,互补不影响。在交流的时候,还能相互给出自己的想法和意见。

InfoQ:你们做这件事情,豆瓣有从文化上,或者从其他方面对你们这件事情有鼓励或者激励吗?我想知道,是否这个公司的文化对于促进了你们做这件事情?

羋峮:这个肯定是促进的。首先这个想法是我在一次周会上提出来的。提出来以后,当时我的 Leader 解彦博老师就特别鼓励我们去做这件事情,并且大家都很感兴趣,当时的整个测试团队都给我们提供意见或者交流过想法。

第二,在豆瓣的骨子里,就有很多工程师去愿意去用自己的业余时间去写一些小工具来改进效率,或者是提高效率,或者改进流程,这个在豆瓣都是很流行。自己写的工具,在豆瓣内部得到了广泛的应用,对工程师来说这是很高的荣誉。

InfoQ:当你产品在快速迭代的时候,它的整个页面的组织,界面逻辑都会在快速变化,这个时候自动化测试是否是在这种场景下不太适合?自动化测试是怎么解决产品快速迭代的问题呢?

羋峮:无法适应变化一直是自动化测试的软肋。首先,有一些变化需要测试做兼容,这个兼容可能需要测试框架本身来支持,也可能需要自动化测试脚本通过一些更加层次化的方法来兼容。举一个例子来说,一个登录按钮,从 NavigationBar上移到了可能在中间页面的一个 LoginButton 上面,所以这种情况下是应该去兼容的,因为它只是位置发生了变化,它大的业务逻辑没有发生变化,这种是需要测试框架去兼容的。如果是更大一点的变化,需要测试脚本一定量的维护。

其次,测试脚本一定要不断的维护。有很多自动化测试最终失败是因为期间放弃过自动化测试脚本的维护。自动化测试脚本不但需要维护,还需要有很好的代码结构。相关测试脚本的代码结构可以参看一些 PageObject 的思想,也可以看看 cucumber 等 BDD 工具,都会帮助你最小改动的维护自动化测试脚本。当然,自动化测试接入工程的时机等因素也很重要。这些都没有固定的模式,需要结合自己团队的特点来开展。自动化测试和持续集成是一对好基友。自动化测试执行和结果展示都需要持续集成的帮助。有了持续集成,自动化测试才会被更多的人认可,可才会有更多的人加入到自动化测试的维护中来。

最后,可能需要更新一下对自动化测试的认识。自动化测试不会降低成本,自动化测试不会主动发现 bug。自动化测试可以更标准更快速的重复回归一些功能测试。所以,对自动化测试有一个更加客观的认识,才会帮助你在具体的工程项目中更好的开展自动化测试实践。

InfoQ:刚才你提到你在豆瓣开源的 ynm3k 这个开源测试工具,然后你同时也提到淘宝也开源的 athrun,你有没有比较过你们两者之间工具各自有什么特点?

羋峮:首先两款工具都同时用到了一个接口,接口的名字是:performTaskWithPathArgumentsTimeout,这个接口可以去运行一个本地的命令行程序。这个接口提供了 UI Automation 和命令行工具的一个交互的可能。

我用那个接口用的非常轻量,需要把运行完的测试结果通过那个接口写文件写出来,写成标准的 XML 以后,通过 Jenkins 或者是 Hudson 这些持续集成的工具,把它展现在持续集成工具的页面里头。

我只是写了文件,淘宝的 athrun 做了一个进程之间的通信,所以他那个工具解决的问题是:用户可以不用 JavaScript 来写 UI Automation 的东西。athrun 自己定义了通信协议,并且通过performTaskWithPathArgumentsTimeout接口来完成和 UI Automation 的通信。用户可以使用 Java 语言来做 UI Automation 的自动化测试。

同样类似的国外也有,就像 eBay 的 ios-driver ,还有就是最近特别火的 appium ,原理上都是通过那个接口实现了两个进程间的通信来驱动 UI Automation 来完成自动化测试的。appium 在驱动 UI Automation 的基础上还兼容了 WebDriver 的 Json Wire Protocol 协议。使用者可以使用 Java、Python、Ruby 等语言直接调用 WebDriver 的 API 来完成 iOS 的自动化测试。WebDriver 对很多 Web 端的测试工程师来说都很熟悉。由于 appium 兼容了 Json Wire Protocol 协议,使用者还可以使用 Gird 来并发的测试。当然,appium 也支持 Android 的一些自动化测试。

在《iOS 测试指南》书中,大概也进行了一个分类,ynm3k 属于扩展型的,扩展型的工具只是提供了一些 JavaScript 的开发库,用户只需要 import 进来,可能就会有更简化的写法和更强大的功能,然后但是对本身的 UI Automation 的,就基本上没有改变。

但是通过苹果提供performTaskWithPathArgumentsTimeout接口进行进程间通信的这种自动化测试工具,我在书里面把它归类为驱动型的测试工具。使用驱动型的测试工具,用户可以有更多种语言的选择,并且可以拥有动态的调试功能。但是驱动型的测试工具,无法在 instruments 的图形界面下运行,也就失去了,运行自动化测试的时候同时检查内存泄露,统计网络流量等功能。所以,工具对比下来只有适合不适合的说法,并没有绝对意义上的好与坏。

InfoQ:刚才也都是提到你的 UI 测试的书本,我希望你简单介绍一下这本书适合哪些读者,有没有什么你觉得特别值得推荐的书里面的内容可以分享给大家?

羋峮:我书里前两章写的很短,就说了一些基本的概念;第三章说的是单元测试的一些实践,并且完成一个简单的 app 的单元测试。

第四章就简要的介绍一下 Automation 的基础知识,很多自动化测试工具都是基于 UI Automation 来做的。不管是用哪个工具,从底层了解一些 UI Automation 的 API,都是有帮助。

第五章写的是 iOS 端的 Web 测试的一个方案,介绍了两种工具,其中也提到了 Appium,我也更推荐使用 Appium 来做自动化测试;然后第六章介绍了持续集成方面的事情,就是三到六章应该都是一个综合解决方案中的各个部分的技能的分散介绍。然后第七章介绍了一下,除了功能测试,手机端还需要去做哪些类型的测试,或者借助工具,我们应该怎么样简单的去确认,或者是去更精确的衡量;第八章是基于第三、四、五、六章然后做了一个最后的一个汇总介绍。因为书写的比较慢,在书稿还没有完全完成的时候,苹果就发布了 Xcode5 和 OS X 10.9。在这一次更新以后,苹果本身也提供了一个持续集成的解决方案。在 Xcode5 中还升级了单元测试框架。所以这一系列的变化就有了第九章的内容。

书的内容本身是想给刚入门 iOS 测试的工程师来看的。最早写书的主要目的也是,为了汇总一些资料。因为相关 iOS 测试的资料实在是太少并且太分散了。但是当书写完以后,才发现原来用到了 3-4 种变成语言。所以,现在看来可能还需要读者有一定的编程功底。所以本书的最适合读者是有编码能力或者测试经验的人需要了解移动端测试的这样一个人群。

InfoQ:你刚才讲到你的工具是开源的,然后你花了业余时间在这个上面,然后你的这本书是你的一个人通过业余时间写作完成的作品,我就想知道你开源和写作大概花费了你多少的业余时间,业余时间里面你是如何安排这些事情的?

羋峮:做开源的时候还好了,只需要挤出来一定的时间把框架搭完了,慢慢的可以用零散的工作去实现个别功能,或者优化个别功能。写书的话,整个过程中,其实还是需要一些大块的时间去投入,因为自己语文水平比较差,有的时候明白一件事,可能还要去想一想怎么能写明白。对于我而言,往往需要大块的时间去写书,需要写一个小时以后感觉才能进入状态,进入状态之后写作效率还算 OK。一般一次写作的时间会在 4 个小时以上。我自己估了一下,如果一页的内容,代码和截图占到一半以上的话那一页的时间,大概是 1.5 个小时,如果是这一页内容是纯文字的话,那一页的时间大概是两个半小时。所以整个大概写了四百个小时左右。

InfoQ:这确实是一个很大的工作量。感谢你为大家带来的开源工具和作品,谢谢你!


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-04-29 07:395187
用户头像

发布了 65 篇内容, 共 55.8 次阅读, 收获喜欢 23 次。

关注

评论

发布
暂无评论
发现更多内容

已有小程序应用转App的一种技术

Speedoooo

小程序 小程序容器 小程序转app

实力上榜|海泰方圆跻身2022企业网络安全服务Top15

电子信息发烧客

[教你做小游戏] H5小游戏技术选型分析,低代码?小游戏框架?canvas或SVG?还能用React?

HullQin

CSS JavaScript html 前端 8月月更

SpringBoot 整合 MyBatis

mybatis springboot 8月月更

高项-第一章 信息化和信息系统(1)

索隆

项目管理 软考 笔记分享

“九章云极DataCanvas AI平台赋能厦门航空”荣获AI平台应用标杆案例

九章云极DataCanvas

人工智能

周一见!距离阿里巴巴开源开放周还有3天

阿里巴巴中间件

阿里云 开源

付费会员之我见-02(44/100)

hackstoic

商业模式 付费会员

多核驱动时代的降维打击 英特尔异构混合架构破局之路

科技之家

828选华为云,实惠更实用——为什么选择华为云CDN的企业多?

sofiya

“软件定义汽车”时代,车载生态安全运转需小程序化技术

Speedoooo

小程序 车联网 小程序容器 车载安全

Spark Driver CPU 占用异常问题排查

观远数据

spark bug修复 #开源 8月月更

【真送礼物】1 分钟 Serverless 极速部署盲盒平台,自己部署自己抽!

阿里巴巴中间件

阿里云 Serverless 云原生

他只是试图运用自己的能力,给这个领域带来改变

图灵教育

通信

开源一夏 | 23张图,4500字从入门到精通解释Redis

wljslmz

redis 开源 8月月更

在 WSL2 上部署 PyTorch

吴脑的键客

WSL2 Windows 10 PyTorch

分布式系统接口用例自动回归实践

转转技术团队

接口测试

九章云极DataCanvas YLearn因果学习开源项目荣获“可信AI实践优秀案例”奖

九章云极DataCanvas

TDesign 设计资源大更新,产品经理和设计师都可以省心啦~

TDesign

设计 设计师

圆壹智慧创始人兼CEO 潘麓蓉:AI制药工业落地的痛点与前进方向

阿里云弹性计算

HPC 高性能计算 AI制药

华为云CDN&云视频通信专场:828低价购,CDN0.05元/GB起,短信0.006元/条起

sofiya

无影云电脑

六月的雨在InfoQ

无影云电脑 云电脑 8月月更

诚邀|8月31日,【因果学习和决策优化挑战赛TOP10队伍作品秀】邀您共享因果学习智慧盛宴

九章云极DataCanvas

人工智能

全链路灰度新功能:MSE 上线配置标签推送

阿里巴巴中间件

阿里云 微服务 云原生

什么数据库这么猛?5.6 版本刚开源一个半月,8.0 版本竟然就要启动了?| StoneDB 社区答疑第二期

StoneDB

MySQL 数据库 开源 StoneDB 8月月更

开源一夏 | 一个裸机工程转FreeRTOS的实例

矜辰所致

开源 stm32 STM32CubeMX 8月月更 FreeRTOS

前端食堂技术周刊第 49 期:Deno即将迎来重大变革、Blitz 2.0 Beta、Chrome删除HTTP/2服务端推送

童欧巴

JavaScript typescript deno

直播预告 | 流程挖掘如何助力头部制造业实现千万级增长?

望繁信科技

“似水无形” - 小程序化

FN0

小程序 容器化 轻应用

参与 TDesign 收获了什么?听听社区贡献者怎么说

TDesign

设计 产品经理 设计师

Beetle编译/部署自动化

转转技术团队

CI/CD

专访《iOS测试指南》作者羋峮_软件工程_唐巧_InfoQ精选文章