2016中国(南京)软件开发者大会(以下简称 NJSD CHINA 2016)于 2016 年4月16日在南京软件谷楚翘城召开。NJSD-CHINA大会由民间技术社区志愿者发起并组织,遵循“技术为先”的理念,探讨全球最新软件技术,努力打造技术交流、思想碰撞的中国公益性技术盛会。其中『无线测试技术』专题论坛由Testerhome主要创始人之一陈晔(Monkey)组织和主持,为我们带来了一场无线测试技术的干货分享盛宴。
会议主要由五个议题组成:
- 沪江无线持续集成的解决方案(主讲人:沪江教育科技资深测试工程师黄伟东)
- 无线应用兼容性全套方案(主讲人:Testin众测测试总监李毅)
- iOS 自动化测试框架选型(主讲人:阿里巴巴高级测试工程师陈恒捷)
- 安全专项测试(主讲人:58赶集高级测试开发工程师钱辉)
- 云化环境中可靠性测试的自动化技术分享(主讲人:华为技术规划工程师王朝金)
由于第五个议题不属于无线测试的范畴,这里我将为大家介绍前面四个议题的核心内容。
黄伟东:沪江无线持续集成的解决方案
沪江无线有多款无线应用,面临很多质量问题,比如线上奔溃率高,开发提测质量差,测试回归耗费时间长等问题。为了提高测试质量和测试效率,大东所在团队搭建了一套持续集成的质量保障体系。本次大东老师为我们介绍这套体系包括哪些解决方案以及落地实施的情况。
什么是持续集成?
持续集成是指通过自动化等手段高频率地去获取产品反馈并响应反馈的过程
集成什么?
- 编译,自动化拉取代码编译
- 单元测试,沪江的单元测试全部由开发来完成
- 打包,同时提供Debug包和Release包
- 自动化测试作为冒烟和回归测试
持续集成可以发现哪些问题
- 编译问题,比如代码无法编译成功,提醒开发及时修复
- 安装问题,打出来的包无法安装,应该直接打回
- App页面可达性,关键业务都无法跑通,也应该直接打回
- 专项指标,包括性能,稳定性等
持续集成流程
- 自动构建
- Apk扫描
- 自动化测试
- 专项扫描
- 报告聚合及产品交付
持续集成的实现方案
编译打包
- Android采用Gradle方式编译,通过Maven进行包依赖管理,同时产出Debug-apk和Release-apk
- iOS采用Xcode编译,用Cocoapods进行包依赖管理,同时产出Debug-ipa和Release-ipa、Debug-app
Apk扫描
- 静态扫描:反编译、字符串扫描
- 包大小检查:包大小信息、历史包大小对比、与其他产品包大小对比
自动化测试(选取Appium)
自动化框架的特性:
- 兼容多类App(Android,iOS,H5)
- 兼容多类设备
- 支持并发测试
自动化测试流程:
专项指标测试
测试哪些专项指标:
- Apk包大小检测
- 启动时间
- 稳定性测试
- 产品对比
- 性能测试:通过AOP埋点的方式实现程序内部性能数据的收集,并随BI数据一起上报,平台根据数据进行性能分析
李毅:无线应用兼容性全套方案
我们的测试人员在线下已经尽可能去覆盖所有功能点,但上线之后还是经常会遇到一些令人头疼的问题,比如迭代速度缓慢,线上故障严重,测试资源不足,用户投诉频繁。这些问题其实归根到底都是兼容性的问题,兼容性问题主要体现在手机种类多样化和用户场景多样化两大方面。
传统的兼容性测试是独立的个体,我们的测试人员只是凭靠个人的力量去覆盖一些网络、终端、地域、软件、数据、体验等类型的兼容性。这当然是有局限性的,应用上线后也无法满足所有用户的需求。因此,现阶段我们提出了实施全面兼容的方案。主要从两大方面去实现:主动式覆盖和被动式覆盖。主动式兼容性测试的手段包括灰度发布和众测等,被动式兼容性测试的手段包括应用埋点,APM等。
主动式测试
我们先介绍下主动式测试的实现方案,分为三部曲:测试筹划,测试执行和测试分析。这主动式测试三部曲的实施步骤是怎样的呢?
其中测试筹划的主要步骤是:
- 规划被测试场景,比如要覆盖哪些网络,覆盖哪些地点,针对哪些功能
- 确认测试策略,确定好是要进行用户体验测试呢,还是进行终端兼容性测试,甚至是给产品找茬
- 开启人群划分,要确定好测试人数要求,测试人群的类型
接下来测试执行的主要步骤是:
- 测试任务发布,比如确定好任务时间周期,系统要求和任务描述
- 测试结果收集,一般是通过问题报告,日志数据,截图或者视频的方式收集
- 测试任务把控,这个环节比较灵活,可以是通过问题沟通或者进度汇报的方式来把控。
最后是测试分析:
测试分析是基于测试执行收集的测试结果,主要分析的类型有:硬件性能,页面,浏览器,应用服务器,网络等。
被动式测试
那么被动式测试的实现方案又是怎样的呢,也可以分为三部曲:网络监控,性能分析,奔溃&异常。
首先我们介绍下被动式网络监测,主要监测的数据有:响应时间,HTTP错误率,RPM,数据量,运营商,机型,URL等,从而跟踪HTTP连接,发现第三方SDK和API,跟踪网络响应趋势。
然后我们看下性能分析要关注哪些点,主要是I/O,网络响应时间,Webview,CPU,内存等,通过这些数据来跟踪真实用户性能体验,精确分析性能瓶颈,追踪慢交互。
最后是奔溃&异常,Android奔溃可以通过UncaughtExceptionHandler来捕获,要注意的是,Android的奔溃日志只能被捕获一次,如果你的应用中有多个收集线程,可能只有一个会生效。iOS也有类似的捕获机制,NSSetUncaughtExceptionHandler这个类可以实现奔溃日志的捕获。
具体实施方案
- 自研兼容性测试平台
- 引入第三方服务
- 内部&外部灰度测试
陈恒捷:iOS 自动化测试框架选型
自动化一直被认为是测试人员的一项基本素质,但真正要做好自动化测试并不是一件简单的事情。恒捷先讲述了自动化测试的目的,然后对iOS常用测试框架进行了对比分析,最后结合实例讲述如何进行选型。
自动化测试的目的
我们引入自动化测试的目的当然是为了降低成本,但自动化测试本身也是有成本的:用例编写成本,用例维护成本,脚本调试成本,查错成本。如果自动化测试的成本要大于不引入自动化测试的成本,那么我们完全没必要去做自动化测试。因此,我们做自动化测试的第一步是要科学降低成本。通过经典的测试金字塔,我们可以看到理想的测试分为三个阶段,从下到上分别是:单元测试,模块级测试,UI测试。我们可以根据具体的测试点来选择最佳的测试方式。比如对于适合最单元测试的场景,我们就需要选择一个单元测试框架来做自动化。
iOS有哪些自动化测试框架
- UIAutomation,最早点,苹果官方推出的针对UI的自动化测试工具,相关框架有Tuneup和Appium
- XCTest/XCUITest,苹果在Xcode5加入的单元测试框架,XCUITest是Xcode7推出的基于XCTest的UI自动化测试框架,其他相关框架有基于私有API的KIF,Google最近推出的EarlGrey
- 注入编译型,通过在应用中插码控制应用操作。添加到应用功能的部分多以agent形式存在。相关框架有calabash-ios和Frank
- 另类方法,比如坐标系+图像识别的方式,相关框架有TouchElf(触摸精灵),不过该框架需要越狱
各测试阶段适合哪些框架
- 单元测试:XCTest
- 客户端功能测试:KIF,XCUITest,Earlgrey
- 冒烟测试:Appium和Calabash-ios
- 回归测试:同上
钱辉:安全专项测试
安全测试是测试过程中的一个重要环节,随着移动互联网的发展,移动端安全问题也越来越多地暴露出来,尤其是对于Android这样一个开源系统而言,安全问题更加容易出现。因此,我需要有特定的测试手段来提前发现应用中的安全风险,并采取措施规避。钱辉的讲座主要介绍了四个方面的内容:App有哪些安全漏洞,如何检测安全漏洞,漏洞有什么危害,如何修复这些漏洞。
App有哪些安全漏洞
- 反编译,一般的攻击方式是使用apktool工具来反编译出源码文件,篡改后重新打包,伪装Apk。因此一般的检测点有:是否可以被反编译,二次打包,重新安装。
- 权限扫描,主要是扫描出所有的权限的使用情况,然后定位出使用权限的代码
- 应用组件扫描,检测点有:Activity安全,Service安全,Broadcast Receiver安全,Content Provider安全,Intent安全等
- 本地数据存储,检测点有:本地数据敏感信息,本地数据防篡改。
- Logcat日志风险控制,主要检测调试信息和敏感信息
- Xposed获取用户信息,是否存在Xposed组件获取用户名和密码的风险
- 配置信息风险,主要有两个:allowBackup和debuggable
检测方式
- 开放平台检测
- 安全团队人工审计
安全团队要做的事情:一个测试点的确定要经过反复的论证,实践,要不断的学习了解新兴的漏洞,及时补充你的测试点。