客户端SDK测试是什么?如何测?(附真实项目经历)

news2025/6/11 7:50:32

 客户端SDK测试是什么?如何测?

目录:导读

SDK是什么

测什么?

功能怎么测

 接下来为大家讲述一番我的真实案例

1、做了些什么

2、做的方法

3、做得好的:

4、做得不好的:

5、个人成长:

6、后续学习改进的建议


去年有在跟进一个SDK项目,主要负责iOS端的SDK测试,研发过程曲折,延期上线,测试工作量巨大。收获挺大的,在此跟大家做一些总结分享下,望你我所遇,皆有收获。

SDK是什么

客户端SDK是为第三方开发者提供的软件开发工具包,包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢?以云信即时消息服务为例,如下图所示,应用客户端通过调用云信SDK接口,进行消息等数据查询存储等操作,或通过协议与云信服务器间进行通信。300876ddd72c91fcc44caaec30b03d39.png

测什么?

1. 客户端SDK测试的对象

客户端SDK测试,就是对提供给开发者的工具包里面的内容进行测试

因此测试的主要内容有:

  • SDK接口和文档
    SDK接口是测试的主要对象,也是核心的内容

  • SDK日志
    对开发者来说,SDK接口里面的具体实现是透明的,当上层调用时遇到问题,只能依赖SDK打印的日志来定位分析。所以SDK日志是否完备,是否有助于解决问题,对应用开发者和SDK提供方来说都很重要

  • Demo或行业解决方案
    Demo是SDK提供方用来示例如何调用接口实现具体的功能,也可以作为开发者直观感受SDK接入效果。行业解决方案类似Demo,但是,比Demo更加像一个产品,具有比较完整和典型的行业应用场景。可以让行业开发者比较明确知道,接入这个SDK做出来的产品效果如何

  • 其他周边
    比如UIkit等,可能只是在SDK开发中的附带输出,但对有的开发者来说能极大降低接入成本

2. 客户端SDK接口测试类型

客户端SDK根据需求和开发平台不同,可能需要选择不同的测试类型对SDK接口进行测试

常见的测试类型有:

  • 功能测试
    保证SDK接口功能正确性和完备性。客户端SDK接口测试跟服务端接口测试类似,包括场景覆盖和接口参数覆盖

    主要测试各种参数组合下的返回值,考虑数据是否缓存与存储,是否有回调,对于请求成功或失败都能按预期进行处理

  • 性能测试
    保证SDK接口满足特定的性能需求,比如资源占用、移动设备耗电量等。在云信IM登录的场景,登录时可能收到大量同步数据包和离线消息包,那么对这些数据包的解析以及本地储存的性能就要进行保证,否则可能出现登录响应很慢甚至卡住的问题,所以测试时就需要考虑这个场景的性能

11410d9b842caad2c4b6e2a750de1a37.png

  • 兼容性测试
    保证SDK兼容特定的设备平台,并与其他软件兼容。兼容设备平台的工作量通常是比较大的,先根据产品需求和市场现状对需要适配的设备平台做分析,再根据需要覆盖的机型、系统版本、分辨率等进行优先覆盖排序

    移动端SDK兼容性测试需要考虑下对模拟器的支持,因为很多开发者可能就是先在模拟器上开发。客户端SDK覆盖多平台设备的,还要考虑多端消息数据包的互通

  • 稳定性测试
    考察业务场景在一定压力下,持续运行一段时间,接口功能和设备资源占用有无异常。比如云信实时音视频通话场景中,要保证多人长时间通话且不断有人进出时的接口功能和设备资源占用无异常

  • 网络相关测试
    保证在不同网络类型,不同网络环境下,SDK接口都能较好的处理。在涉及到多媒体资源或音视频通信,弱网下测试的需求较多,并且弱网下的处理通常需要反复优化和对比,不仅是新老版本效果对比,还包括竞品的效果对比测试

  • 安全性测试

    对隐私数据保护,访问权限的控制,用户服务鉴权等,SDK接口的安全性问题也是比较突出。安全性很多是在架构设计和开发设计中就考虑进去,但是最好还是有专门的安全性测试

功能怎么测

上述诸多测试类型中,功能测试先行。在进行客户端SDK测试前,需要全面的了解测试对象的细节:

  • 了解业务流程,结合API接口文档和开发指南,理顺接口的使用场景和调用关系;

  • 了解SDK协议,理解协议中字段的意义以及服务器端的处理逻辑;

  • 了解各接口或协议返回码,分析对应的场景;

  • 了解开发实现细节,可以绘制成图,便于测试分析和分层验证。

对客户端SDK进行测试,可以采用的分层测试方式由上至下依次有:基于Demo和解决方案->基于接口调用->基于代码。

1、基于Demo和解决方案的测试

大多客户端SDK在提测时,都会有对应的Demo或者解决方案提交给测试,因此可以覆盖到该Demo或解决方案对应的接口或业务场景。而且测试人员可以比较直观的看到界面表现,上手快,所以在客户端SDK测试中比较常用,也是比较有效的。

但这种测试方式的缺点也很多,Demo对接口和业务场景覆盖比较有限,对接口的输入输出参数不能全覆盖,发现问题时定位复杂度增加。精心设计的Demo以及多解决方案的形式或许可以最大程度满足测试需要,但是需要较大的Demo开发测试投入,也使得问题暴露的时间大大滞后。基于Demo和解决方案的测试,可以是手工的也可以是UI层自动化测试。

2、基于接口调用的自动化测试

基于接口调用的测试,包括对单个接口的测试,也包括业务场景的覆盖。这种测试方式直接有效,需要一定开发基础

目前,我所在项目组的同事也有一些实践,以云信iOS SDK测试为例,最小回归测试对应接口也已经自动化,测试工程基本结构如下:

4231389c9307f036aa7228bc736ad371.png

基于接口调用的自动化测试,需要有产品的思路、开发的知识和测试的思维,做起来有难度。但是因为SDK接口通常比较稳定,所以一旦实现并投入使用,测试效率和质量的收益都很大,值得拥有。

3、基于代码的单元测试

单元测试是为开发代码质量保驾护航的一个重要环节,在测试左移推进的道路上,大家越来越意识到单元测试的重要价值。特别是在一些核心业务上,值得开发同学投入精力去做。

其他测试类型的展开,跟应用层测试类似,就不再重复了。

 接下来为大家讲述一番我的真实案例

整个项目的进程大致是:

①  技术背景宣讲->

②技术方案确定->

③开发编码(测试准备并行)->

④部分方案变更->

⑤测试开始测试->

⑥开发bugfix->

重复③④⑤⑥步骤n次(这次的n有点多)->

⑦提供framework包给业务方,配合测试、bugfix->

⑧上线。

在这里不吐槽项目过程的一些问题,仅分析测试在这里做了些什么、做的方法、做得好的、做得不好的、个人成长、后续学习改进的建议。

1、做了些什么

  1.  半路进入这个项目(项目已在进程③),负责iOS SDK的测试,快速找pm了解大致的技术方案,根据模块快速的划分测试分工(iOS全职算2个人,实际是3个人部分投入);
  2.  根据sdk的特点,对单测框架选型,最终定了xctest;
  3. 根据技术方案制定tc,评审tc;
  4. 编写测试demo,画UI,调用sdk的方法,从功能和方法级别对sdk进行测试;
  5. 编写性能测试demo,对db性能进行测试;
  6.  配合业务测试一起排查问题、解决问题,上线。

2、做的方法

测试框架选型:

详细查看了xctest的说明,结合之前了解的GHUnit、ocMock,再根据项目的特点,纯数据的处理、DB文件的读、写,所以选择了轻量式的跟xcode结合紧密的xctest,基本满足项目的测试需要。

sdk测试方法:

在开发已搭建iOS Application demo的基础下,就直接在demo里编写代码调用framework里的方法,将方法的实际返回显示到界面上。

在测试顺序上,基本从底部->上层->模拟业务方调用的顺序进行测试,首先测试db的功能(C层),满足正常功能(读、写、多线程读写等),再测试oc层dataBase(oc上对C层的方法进行封装,方便上层调用),再测试OC manager层(有部分业务含义,主要是各种业务表的增、删、改、查方法),最后测试对外暴露的公共接口(读、写)的各种逻辑。利用分层测试的策略,sdk的各个剖面基本都覆盖到了。最后通过模拟业务方调用sdk公共接口,简单的校验了sdk的初始化逻辑和读写逻辑。

3、做得好的:

测试用例对功能级别和方法级别的覆盖率较高,codeReview几乎达到了100%,从方法层面和功能层面保障了sdk的质量,达到之前的预期。

提bug时尽量debug出问题的原因,提供可能的解决方案,帮助提升开发解决bug的效率。

4、做得不好的:

1、          花在方法级别的单测时间过长,提供给业务方的时间延后,有些问题在业务接入后才暴露

2、          整体面上和细节的考虑不平衡,sdk测试不仅是要保障各个方法、接口正确,还要保障业务复杂场景下的数据正确

3、          忙于sdk的测试,未从业务测试角度出发,提供相应的环境切换工具、快速查日志、快速定位问题方法

5、个人成长:

  1. 在项目中实战了sdk的测试,sdk要测到什么粒度,各个模块如何平衡,测试主要编写sdk暴露的公共接口的测试,辅助开发进行私有方法和内部方法的单测。
  2. 业务测试代码review时更多的是各种UI的绘制,数据model的构造、解析,sdk代码review时看到的实现更底层,比如多线程的调度,提升了代码的深度理解

6、后续学习改进的建议

  1. 遵守单测的规范,利用xctest框架,将单测的脚本移植到sdk的工程,引入XcodeCoverage(目前已引入)统计单测覆盖率,并作为开发提测交付物之一,最好是加入到持续集成(目前已引入)
  2. 提供帮助业务测试快速查日志、定位问题的方法或工具
  3. 后续测试sdk时,不仅要从方法级别、功能级别保障质量,要更多的思考业务场景,尽可能的模拟业务的使用场景,构造复杂的条件(比如多线程、弱网、网络切换)
  4. 在技术方案评审阶段,多多思考,否掉不合理的方案,减少开发推倒重新编码的情况,相应的减少测试重复测试。

希望下次在做sdk项目测试时,能汲取此次的经验和教训,更进一步的提升技术能力。

写在最后

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~

你也可以加入下方的的群聊去和同行大神交流切磋

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品设计方法论之基础

1、信息控件 输入框限制 输入文本的内容限制。常见的内容限制主要纯字母 (如英文有纯数字 (如手机号码)、名)、纯汉字(如中文名) ,以及各种类型的排列组合或违禁内容的输入限制。如果用户输入限制的内容,我们可以按无法输入的逻辑处理,也可以…

LeetCode题解 动态规划(三):343 整数拆分;96 不同的二叉搜索树

343 整数拆分 medium 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 这道题乍一看没有点儿动态规划的影子,反而感觉用数学法可以求解。 但是…

后勤管理系统—服务台管理功能

数图互通是一家IT类技术型软件科技公司,专业的不动产、工作场所、空间、固定资产、设备家具、设施运维及可持续性管理解决方案软件供应商。 一、后勤管理系统服务台管理功能包含: 1、专业自动化、集中管理的自助服务助理,随时响应服务请求。…

作为公司,这个5款在线软件工具赶紧安利起来!

2023年了 ,您的企业还没使用在线软件工具吗?自从用了在线工具之后,感觉打开了新办公世界的大门,效率蹭蹭蹭地往上涨啊。对于喜欢追求效率和便捷的我来说,在线实在是太棒了!今天安利几个非常不错的在线软件工…

基于matlab使用神经网络清除海杂波

一、前言此示例演示如何使用深度学习工具箱™训练和评估卷积神经网络,以消除海上雷达 PPI 图像中的杂波返回。深度学习工具箱提供了一个框架,用于设计和实现具有算法、预训练模型和应用程序的深度神经网络。二、数据集该数据集包含 84 对合成雷达图像。每…

智能工厂自动化设备如何将数据采集到物联网云平台上

制造业工厂在进行生产管理、数字化转型升级的过程中,大量自动化设备的数据采集上云一直是困扰厂商的难题之一。因设备种类多、工艺复杂、设备老旧无多余通信接口导致数据无法集中、工艺无法实时管控,加上设备服务商的本地支持比较有限,因此设…

react-jwchat

react-jwchat: react-jwchat是一个基于React实现的web聊天组件。 如何阅读大型前端开源项目的源码 - 掘金 rollup专注以ESModule打包/自动treeshaking,更准确的来说rollup是小而美的打包工具 ts“typescript” ts是js类型的超集,被编译成纯js再执行 js&#xff…

阳康后是否二次感染,长新冠与肠道菌群的关联,多种潜在的干预措施

谷禾健康 随着大家陆续“阳康”,大家逐渐恢复以往的生活,城市的烟火气回来了。 然而阳康后真的万事大吉了吗? 还是有很多朋友处于这样的状态:感觉恢复了,又好像没有完全恢复,身体多少有点不适,开…

VirtualBox 虚拟机安装Windows10,珍藏版!!!

1、virtualbox管理器开始运行,点击【新建】按钮,开始新建虚拟电脑(输入名称,修改路径,勾选版本等),如下图; 2、下一步,选择内存大小,默认推荐2048MB 3、创建后…

java基本类型转换

1.什么是类型转换? 因为java是一门强类型语言,所以在数据运算中会存在类型转换。 基本类型转换分为自动转换和强制转换。 自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可以说低级自动向高级转换。这儿的容量…

使用logstash把mysql同步到es,Kibana可视化查看

1:首先需要电脑本地有es环境,并且要牢记版本后,后续安装的logstash和Kibana一定要版本对应 查看es版本:http://localhost:9200/ 2:安装对应版本的logstash:找到自己对应ES版本,然后解压 Logst…

聚观早报 |微软正式将ChatGPT引入必应;百度将于3月上线ChatGPT

今日要闻:微软正式将ChatGPT引入必应;抖音否认3月全国上线外卖服务;百度将于3月上线ChatGPT产品;印尼跃升成全球第二大钴生产国;特斯拉在德国喜获“开年红” 微软正式将ChatGPT引入必应 2 月 8 日,据 CNET …

低代码开发平台|生产管理-成本核算搭建指南

1、简介1.1、案例简介本文将介绍,如何搭建生产管理-成本核算。1.2、应用场景计算主生产及子生产计划的工序成本、领料成本,统计出总的生产成本金额。2、设置方法2.1、表单搭建1)新建表单【商品信息】,字段设置如下;名称…

数据库模式(schema)是什么?

在数据库的术语中,模式(schema)是一个逻辑概念,用于组织数据库中的对象。模式中的对象通常包括表、索引、数据类型、序列、视图、存储过程、主键、外键等等。 模式可以为数据库对象提供逻辑隔离功能,不用应用程序可以…

基于libcurl 实现web-uploader客户端 大文件分片,断点续传(curl-uploader)

嵌入式设备Arm linux 基于libcurl 实现大文件分片上传,断点续传,分片大小可控,使用libcurl 实现web-upload linux c/c 客户端(curl-uploader)。通过wireshark 抓包网页版客户端上传文件过程,分析http post 流程。工程代码&#xf…

【排序算法】快速排序(Quick Sort)

快速排序(Quick Sort)使用分治法算法思想。快速排序介绍它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排…

SCADA软件平台数据库功能的应用

一、前言 SCADA系统是以计算机为基础的过程控制和调度自动化系统,它对工业现场的设备进行监视和控制,并实现数据采集与分析、设备运行控制、异常报警等。数据库系统作为SCADA系统中的重要组成部分,是进行数据采集、处理和存储的基础&#xf…

软件设计(八)

软件设计(七)https://blog.csdn.net/ke1ying/article/details/128927149 71、计算机系统主要是由 DRAM 构成的。 解析:随机访问存储器RAM有两类。 DRAM:(dynamic)动态随机访问存储器。SRAM比DRAM贵很多,DRAM电容很小&#xff0…

基于深度学习的安全帽监管系统

摘 要 安全生产管理是建筑、重工业等高危企业发展的重要方针,安全帽在施工生产环境中对人员头部防护起着关键作用,因此加强安全帽佩戴监管十分必要。近年来,基于图像视觉的安全帽佩戴监测方法成为了企业实施管理的主要手段,如何提高安全帽佩戴检测精度和检测速度是应用的关键难…

Linux系列文章 —— 进程概念(图解PCB、进程的描述、状态、创建、组织、查看详解)

系列文章目录 文章目录系列文章目录前言一、冯诺依曼体系结构二、操作系统三、进程概念进程概念描述进程(PCB)组织进程查看进程创建进程(fork)进程队列进程状态运行状态 - R睡眠状态 - S停止状态 - T僵尸进程 - Z孤儿进程进程优先…