前言
小编最近参与了两个SDK测试项目,一个是与外部企业APP对接的SDK测试,对于要接入APP完全不了解,只针对SDK demo的功能和调用进行测试;另一个是与公司内部产品APP对接的SDK测试项目,是针对SDK与APP源码集成后进行测试,通过这两个项目,小编对SDK测试工作有了更深入认识,在此对SDK测试内容和测试方法进行总结分享给大家。
SDK简介
SDK(Software Development Kit)是为第三方开发者提供的软件开发工具包,包括SDK接口、开发文档和Demo示例等。移动端APP通过调用SDK接口来实现特定的业务功能。如地图APP通过调用导航引擎SDK来实现导航信息更新功能;录音助手APP通过调用语音SDK来实现音频解码转写的功能。
SDK测试内容
SDK测试,是对SDK提供的功能和接口进行测试,测试需要关注哪些内容呢?根据项目经验,大概整理如下几个方面: 1)功能测试 SDK测试首先需要对SDK内部模块以及接口实现的业务层面功能进行测试。如录音SDK需要对手机录音、音频转写、音频分享等业务要求的功能进行测试。 2)接口测试 SDK需要保证SDK接口功能正确性和完备性。SDK接口测试跟服务端接口测试类似,包括场景覆盖和接口参数覆盖。主要测试各种参数组合下的返回值,考虑数据是否缓存与存储,是否有回调,对于请求成功或失败都能按预期进行处理。 3)性能测试 SDK性能测试主要包括内存占用、内存泄漏情况、CPU占用、接口响应速度、流量消耗等方面进行测试。 4)兼容性测试 SDK需要兼容不同的设备平台,并与其他APP兼容。测试时,需要提前确认SDK适配的平台设备、机型系统、分辨率等兼容性的要求,然后针对要求进行测试,iOS移动端主要对与机型系统相关性较大的功能以及UI适配等方面进行测试。 5)稳定性测试 稳定性测试需要测试SDK的功能在一定压力下,持续运行一段时间,接口功能和设备资源占用有无异常。比如手机录音功能,测试手机录音持续录音10个小时,录音功能正常,内存、CPU等占用正常,不会被系统杀掉。 6)网络相关测试 网络测试,需要保证在不同网络类型,不同网络环境下,SDK接口都能较好的处理。 7)安全性测试/隐私数据加密测试 接口的安全性,需要对接口的请求和返回数据加密性的要求进行测试; 8)访问权限的测试 SDK需要访问系统或者APP的某些权限,需要对权限相关进行测试,如SDK需要访问系统麦克风权限、地理位置权限、网络权限、登录权限等。在权限允许和拒绝时,响应符合需求预期。
SDK测试方法
对SDK进行测试,通常需要根据不同的情况采用不同方法进行测试,具体分以下几种情况: 1)基于集成SDK的完整APP进行测试 iOS端SDK集成方式,目前常见的有两种: 1)CocoaPods 方式:在主APP代码中Podfile 文件中添加SDK对应的pod分支;打开终端,切换到项目目录;执行 pod install 或 pod update。 如地图的导航引擎、搜索引擎通常采用这种方式。 2)源码方式:从GitHub获取SDK的源代码;将 SDK 源代码导入 App 项目,并选中 Copy items if needed项目设置 "Build Phase" -> "Link Binary With Libraries" 中添加相应的依赖库。 测试时拿到手的是SDK集成后的整个APP,无论是源码集成还是CocoaPods集成, SDK测试的功能入口和输出及UI界面都是完整的,这种测试方法是最直观的,测试覆盖也最全面。 2)基于demo的测试 如果测试的对象是SDK demo,而非集成后的完整APP,那就需要特定的方法。SDK demo相对于完整APP来说一般都比较简陋,只提供触发调用SDK接口的操作入口和特定的响应输出(如页面跳转或者日志输出),测试时只需要对SDK接口的输入和输出的功能实现逻辑层面进行测试。 例如项目集成的SDK需要实现的某个接口功能是:用户触发文件传输操作时,能够调用SDK的文件传输方法,并在传输完成时进行回调;那么需要提测时SDK demo中提供的功能:添加操作入口如按钮“文件传输”,并在代码中添加回调信号如回调时输出toast “文件传输完成”。 测试时需要检查在SDK demo中点击“文件传输”按钮时,SDK是否能正确调用文件传输接口,文件传输过程是否正常,文件传输完成时,是否正常回调。 这种测试方法有部分测试场景覆盖不全的风险,如某些异常操作场景难以覆盖到,而且开发测试demo也需要一定成本。 3)基于代码的单元测试 这种方法提测时一般只提供SDK源代码和SDK接口说明文档,测试时针对各个接口方法进行编写测试代码进行单元测试。 小编在项目中遇到的是基于SDK demo和代码结合的测试,SDK demo端只提供简单的操作入口,利用修改代码来制造不同的场景作为输入,检查代码回调是否符合预期。这种测试方法可以创造更多的输入场景,但是操作起来比较复杂,且不够直观,只能保证功能逻辑层面的正确性,无法直观看到SDK回调后APP端的响应。 以上是小编根据最近的项目经验,对SDK测试内容和测试方法进行了总结,如果大家有其他更好的方法或建议,欢迎留言补充~