讲师:潘志刚

声网质量效能部门负责人,超过 14 年服务器、移动终端、音视频编解码以及汽车电子等跨行业从业经历,负责建立测试基础架构和自动化测试方案,主持搭建持续集成测试生态体系。现任声网质量效能部门负责人,负责推进质量和效能持续优化,专注技术创新赋能团队软件保证,通过软件和硬件的高效结合,探索产品交付的最优解决方案。

前言

SDK 测试不同于 APP 测试,不仅要站在终端用户角度考虑问题,还需要站在 APP 开发者的角度考虑问题。面对不同的行业需求,如何保证质量固若金汤,这是一条探索未知的赛道。本期推送将为大家带来声网研发效能负责人潘志刚的《SDK 测试最佳实践——打造质量保证的一体化应用平台》,分享一体化应用平台的演变以及如何整合基础能力,保证测试和交付的高效执行,提升质量效能。

1.0 GUI Driven Test

SDK(软件开发工具包)是声网对外主要的产品交付,是用于为特定软件包、软件框架、硬件平台以及操作系统等创建应用软件的开发应用的集合,跟传统意义上的 APP、外围应用或者最终客户感知到的产物是不一样的,对于最终端用户来说是无形的。

早期为了保障 SDK 测试的质量,测试人员需要根据 SDK 交付的 API 设置 GUI demo。比如在一个实时的互联网通讯界面,需要用户加入到对应频道进行相应的音频和视频通讯,在这样的界面里会设计对应 Button、下拉列表,或者小的图标,每一个对应的元素体现对应接口实现能力。如下图所示,最下面 4 个 Button 分别是麦克风、摄像头、挂机按纽,对应 API 接口 enableLocalAudio、enableLocalVide、startScreenCapture 和 leaveChannel,右上角看到信号条图标是获取 onNetworkQuality 接口。通过这样简单的 Demo,测试人员设计相应的 test case,确保每一个接口可以正常调用,基于此来保证初期迭代里交付的质量标准。

然而随着交付平台越来越多,交付需要基于桌面端、移动端、web 端,桌面端包括 Windows,macOS 和 Linux,移动端包括安卓和 ios,越来越多平台设计相应的 demo 势必需要测试人员投入更多资源,同时 API 在不断增长。因此自动化是必然趋势。

2.0 GUI Demo Test Automation

2.0 阶段是 GUI Demo Test Automation,开发人员将平台进行了分层。

如上图,上面的 iOS、OSX、Android 等是对外交付的平台,下面是对应平台用到的第三方开源工具,如 Appium 和 Selenium,中间这一层做相应分装,其目的在于提高测试效能,用一套 case 覆盖到所有交付的平台。实现 70% 的自动化程度已经能够让团队节约一半的时间,极大地提高了测试效率。

3.0 API Demo Test

3.0 阶段进入到 API Demo Test。声网的测试主体是 SDK,SDK 关注点在于 API 功能实现、平台适配、面向开发者、性能功耗包体积,集成构建打包;而 APP 关注业务功能、用户交互、终端用户、界面操作和程序安装。针对 SDK、APP 两种完全不同的测试重点,声网重新设计了一套针对 SDK 的自动化测试框架——Wayang Testframework。

Wayang 的原理来自印度尼西亚的一种木偶戏,前端是一个木偶,后台表演者通过线和灵巧的手控制前端木偶去做相应的动作。在这样的一个体系里有三个不同的对象,左边的对象是 test client,中间是 test server,右边是对应的 test demo。Test client 相当于木偶戏幕后的表演者,需要明确自己的测试需求是什么,设计相应的 test case;test demo 相当于前端的木偶,会根据测试端发出持续请求做相应行为调用。所有的主动调用以及被动调用都是基于代码输出。在整个体系里面所有的接口调用和相应回调都是基于代码终端的输出,无需关心界面的实现。和自动化 2.0 与手工 1.0 相比,目前每天可以完成一百个以上 API 测试,自动化测试覆盖率能够超过 80%。

4.0 AIO

在完成 Wayang 实践后,声网仍在思考是否能够有进一步的优化实践。随着产品交付迭代周期越来越紧,以及更多的需求介入,从测试角度来说,光考虑测试环节是不够的,需要把整个产品交付纳入思考范围之内——包括前期构建、打包、测试、交付。因此,这里引入了 AIO 的理念。

AIO 是箱庭和沙盒的结合。那么,什么是箱庭和沙盒呢?箱庭能够提供基础设施,相当于游戏里提供相应的陷阱、敌人或者宝箱,如何去获取或者击败由自己决定。而沙盒意味着把最小的原子单位开放给用户,典型例子有我的世界、乐高,最小单位就是一个 cube。声网的测试单位是基于 API,那么在整个交付里面,箱庭对应着保证基础设施(e.g:网络、电源,测试环境)稳定运行,至于沙盒则会拆分构建、测试、上线发布三个版块。

在声网一体化 AIO 架构里面,包含了一系列相应的 module。

AIO 架构包括了设备集群。因为不同平台交付必然覆盖各种各样的情况,需要考虑到不同设备的兼容性。调度中心确保所有设备在预期设定中如期交付,因此需要服务网关的存在。数据中心会分析 SDK 产物明确的 log 输出;最后一块是构建发布,ACCS 平台包括编译、发布、崩溃上报、数据分析、自动化测试等功能模块。下面基础能力代表着更底层的元素,如链路模拟、物理连接控制、人机交互等。

回到刚才所说的 Wayang 的特性,需要有一个 client 对应一个 demo。Client 表演者知道需要做什么,然后让 demo 去做相应的事情。基于这个情况,声网做了进一步的提升。通过 API driven test,声网设立了一个独立的 soloWayang app,里面的 test iterator 生成器可以不停地把测试 API 持续调用。通过基于 test farm 并发测试,在所有设备上跑 soloWayang,所有相应的 API 都会被测试以确保发现和处理问题。

在测试环节里面,会有非常多数据产生,包括 SDK data、demo data、test data 和 server data。如何去将这些数据做合理有效的预先挖掘?

传统模式下,数据的价值在于出现问题后去分析数据。逆转一下思维的话,如果能够对数据进行提前收集和预分析,就可以在问题暴露之前主动地去发现和解决风险。声网数据分析平台通过 Beats、Logstash 对不同平台的数据进行清洗,将无效信息剔除。Kibana 通过相应的过滤,能够把相应问题列举出来。举个例子,某个晚上跑了四百台设备,发现某台设备出现对应的 log 异常,通过 Kibana 可以进行预警,及时发现这个问题是否真的只有一台设备存在,或者在数台机器里都存在共性。以前通过人工的方式去挖掘几台设备的数据是否有相应的问题,很难联想到是不是与某一个系统有关、与某一个芯片有关,还是跟某一个特定的网络场景有关。通过数据分析平台的合理过滤,能够帮助我们通过种种证据的汇总来有效发现问题,尽早解决问题。

Q:针对于手机 APP 去做测试,如果需要上百部手机同时连起来,做一个性能测试环境。但一台电脑的支持能力是有限的,可能同时连接十几台手机就达到极限了,怎么去做横向扩展做性能环境?

A:如果是针对安卓手机的话, 我们有一台早期的节点同时连接了 30 台安卓设备证明是可行的,建议再确定一下节点和外设的配置。更多的机器连接可以通过采用集群的方式来部署 test farm。另外,可以在相应的 test app 应用中设计独立的性能测试组件,有利于实现性能测试的横向扩展。

点击获取视频和 PPT 资料

CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践的更多相关文章

  1. CODING DevOps 线下沙龙回顾一:DevOps 代码质量实战

    11 月 22 日,由 CODING 主办的 DevOps 技术沙龙系列「质量」专场在上海圆满结束.在活动现场,四位来自腾讯等知名企业的技术大咖们分享了研发质量与效能的实战经验,与观众们共同探讨如何采 ...

  2. 2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai

    .NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会. 2021年上海第一场线下活动就要来了,快来加入我们一起学习.N ...

  3. 腾讯WeTest&TesterHome深圳线下沙龙

    腾讯官方的一站式品质开放平台「腾讯WeTest」携手知名测试社区「TesterHome」以及3家金融相关企业为我们带来的金融专场. 本次活动内容主要以金融公司的测试落地和测试技术为主,我们希望你是一个 ...

  4. CODING 携手优普丰,道器合璧打造敏捷最佳实践

    随着全球进入到信息化时代,越来越多的企业迫切地寻求新的商业模式,要求迭代.探索.不断加速创新以响应快速变化的市场.如今一系列新兴概念如敏捷开发.极限编程.微服务.自动化.DevOps 等大行其道,然而 ...

  5. Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog

    Google Developing for Android 二 - Memory 最佳实践   |   分类于 Android最佳实践 原文:Developing for Android, II Th ...

  6. 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记

    首先,这本书是Linux.CN赠送的,多谢啦~ http://linux.cn/thread-12733-1-1.html http://linux.cn/thread-12754-1-1.html ...

  7. 技术沙龙|京东云区块链进校园-京东云&深圳大学线下沙龙分享回顾

    在刚刚结束的京东云&深圳大学技术沙龙活动中,多位京东云的技术大咖针对京东云BDS产品技术细节.开源计划,与深圳大学的同学和参会者进行了深入探讨,干货满满反响深刻,获得了在场同学与参会者的一致好 ...

  8. 你在为谁工作——IT帮深圳分站2019年3月线下活动回顾

    对于工作,在每个人的心中,它所占的份量都是不一样的.有的人活着是为了工作,有的人工作是为了更好的生活. 在3月24日下午,北京.上海与深圳三地我们同步举办了关于工作这个话题的沙龙活动. 我们深圳分站参 ...

  9. [转]DevOps实战:百度持续交付体系与最佳实践大解密!

    本文转自:http://dbaplus.cn/news-21-471-1.html “互联网+”时代,软件产品要想满足快速增长的用户需求,高效.快速的迭代转型必不可少,面对时刻发生改变的互联网及业务模 ...

随机推荐

  1. LeetCode 019 Remove Nth Node From End of List

    题目描述:Remove Nth Node From End of List Given a linked list, remove the nth node from the end of list ...

  2. 最佳置换算法OPT

    原文链接:https://www.jianshu.com/p/544ee20e307c

  3. 这篇建议java开发都看看,对Java方法及加深理解的很深,值得一看!

    方法和加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环 和 return 的区别 方法名:注意规范 见名知意 参数列表(参数类型,参数名)- 异常抛出 // Demo01 类 ...

  4. 在 Windows 中使用 C# 启动其他程序

    因为某些原因需要自动启动一个 Winform 程序,可能是因为第三方资源的原因,使用 System.Diagnostics.Process 无法成功启动 (可以看到界面,但是会报 Unhandled ...

  5. charles 常用功能(七)简易接口压力测试(repeat advance 功能)

    接口请求次数.并发量.请求延迟时间均可配置 1.选中需要进行测试的接口,鼠标右键 选中[repeat advance] 设置迭代数量

  6. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的topLevelItem、indexOfTopLevelItem和takeTopLevelItem方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 获取指定位置顶层项 树型部件QTreeWidget中,通过topLevelItem方法根据位置索引取 ...

  7. PyQt(Python+Qt)学习随笔:model/view架构中的排序和代理模型QSortFilterProxyModel

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Model/View体系架构中,有两种方法可以进行排序:选择哪种方法取决于底层模型. 如 ...

  8. PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

    对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据 ...

  9. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  10. python基本案例实现

    案例一:test.txt文件中与输入的用户进行认证,超过3次用户被锁定,且把用户加入锁定的lock.txt文件中. # 需求点: # 1.输入用户名.密码 # 2.认证成功后显示欢迎信息 # 3.输错 ...