1、 跨端测试自动化实践分享潘在亮,腾讯测试开发组长摘要 社交应用的多端场景 跨多端测试自动化方案 各端自动化驱动 自动化用例框架 用例云执行系统跨多端应用场景PC时代移动时代跨端测试自动化实践 被测应用各端自动化驱动 跨端用例框架 跨端用例执行Android自动化测试早期版可选的驱动工具:Instrumentation Native Driver UIAutomator Robotium ARobotium遇到的痛 可自动化率低 手Q手工用例可自动化率只有22%用例编写和维护成本高用例(分钟)用例(分钟)PCRobotium成本增加成本增加编写时间:25452倍维护时间:0.17530倍Robo
2、tium可自动化率只有22%35%18%15%11%11%7%3%多终端协同操作Robotium未提供接口跨APP(跨进程)难以构造测试场景其它原因第三方QQ接口协同操作升级测试用例维护成本高的分析调试步骤多调试步骤多没有截图没有截图用例和应用用例和应用Log混杂混杂难用的难用的UI控件查看工具控件查看工具产品本身限制产品本身限制用例管理功能弱用例管理功能弱难以封装中间层难以封装中间层没有测试资源管理没有测试资源管理决解方案 自研自动化框架QT4A 思路:QTA用例框架+QT4A自动化驱 QTA用例框架:解决解决自动化成本高的问题 QT4A自动化驱动:解决解决不能自动化的问题 QT4A目标:支
3、持被测应用 支持Android2.1及以上 跨进程,跨应用,跨端 支持Native,Web,自研控件提升用例维护性 使用Python 支持UI操作事件自动确认 支持View IDViewID提升用例维护性界面界面Accessbility 控件树控件树ViewID 控件树控件树QT4A 两个方案PCQTA用例AndroidQT4A ServiceUIAutomatorAUTPCQTA用例AndroidQT4A ServiceAUTQT4A Stub优点:Android原生支持缺点:1、只支持Android4.1及以上2、不能使用ViewID3、不能扩展支持产品特殊特性优点:1、支持2.1及以上2
4、、可以使用ViewID3、必要时容易扩展支持缺点:需要注入被测进程方案1:使用UIAutomator方案2:使用自研QT4A系统架构controldeviceappDriver ServiceControlInputWIFICapturePictureCameraInjectHookJavaNativeCoredeviceMockPCAHook确认UI事件完成 button1.click()sleep(5)button2.click()sleep(10)可读性差可读性差稳定性差稳定性差发送点击事件发送点击事件系统系统inputManagerinputManagerViewView处理点击处理点
5、击HookHook确认已处理确认已处理iOS驱动技术选型Javascript测试脚本Instrument/xctest 工具OC 测试脚本编译安装修改嵌入被测APPinstrument方案方案 优点:优点:apple原生方案无需修改被测app无需编译缺点:缺点:脚本编写不方便依赖Accessiblity设备证书数量限制不支持跨终端无控件查看工具嵌入式方案嵌入式方案 优点:优点:获取原生控件树直接调用iOS SDK缺点:缺点:需要编译和安装需要修改被测app不能处理app的crash不能跨终端无控件查看工具自研iOS自动化驱动方案driver_server.pydevice.py icontro
6、l.pyapp.pyiOSUISpy.app(qta driver api)instrumentscmd_fetch.pyios_driver.js1秒限制OSXiOS应用层应用层服务层服务层驱动层驱动层QT4i方案方案优点:优点:apple原生方案无需修改被测app无需编译UI控件查看工具便利的脚本编写支持跨终端缺点:缺点:依赖Accessiblity设备证书数量限制PC自动化驱动测试进程被测进程脚本驱动APIWindowsIE COM APIHTML ElementsTIF COM StubGF ControlsWindows MessageCOM 调用COM 调用统一各端驱动API接口A
7、PI入口统一DeviceAppControl控件标识统一 简单易用 灵活 各端统一 使用一致控件标识-QP搭建测试用例框架 没有统一的集成型测试框架 xUnit Robot Framework Cucumber 如何搭建跨端的用例框架?跨端用例框架UI用例框架基础 No xUnit 截图 扩展用例Log 用例中间层封装 用例资源管理跨端用例框架 用例多端操作 用例跨端运行QTA框架生成的测试报告测试用例中间层封装class GFWindow(Control):GF窗口 def _init_(self,root=None,locator=None):locators=最小化按钮最小化按钮:typ
8、e:Button,root:self,locator:minimizebutton,最大化按钮最大化按钮:type:Button,root:self,locator:maximizebutton,关闭按钮关闭按钮 :type:Button,root:self,locator:closebutton gfwin=GFWindow()gfwin.Controls关闭按钮关闭按钮.click()用例多端操作一个用例实现一个用例实现Android,iOS,PC端互动端互动测试用例PCAndroidiOS用例跨端运行 一份Web用例可以在表现相同的端上执行一份用例脚本用例云端执行方案 单机用例执行时间长
9、 PCQQ用例单机需要执行一个月一个月 云端执行方案演变版本一 STAF/STAX版本二 简单任务配置 PC 用例版本三 任务XML 跨端 设备管理用例云端执行系统 自研云端执行系统Drun支持PC、Mac、Android、iOS设备资源的调度和并行测试以及跨多终端测试的执行QTA跨端自动化体系Test BaseQT4CQT4AQT4iQT4SQT4WServerWebiOSAndroidWindows任务管理Test LibPerformance LibTest Cases资源管理测试报告分布式执行用例管理Mock测试桩无障碍化测试环境虚拟化支撑设备管理测试框架测试平台可测性QTA测试自动化应用 运营数据 18000+用例 执行7百万用例次/每月 应用场景 BVT,每日全量,合流验证,渠道包验证 结合性能工具测试内存,IO,FPS,时延指标 服务产品 UI自动化的一些启示 自动化不是用来发现bug的 不要直接使用record脚本 不要直接使用驱动工具 尽量少sleep 要容易执行 要容易调试 要选择合适的用例框架 测试自动化不仅仅是测试脚本 自动化成本高谢谢!