“阅读本文大概需要9分钟。
你好,我是测试蔡坨坨。
众所周知,在云产品和SaaS蓬勃发展的当下,企业中有许多系统和环节都是依赖于第三方提供的服务或应用,而不必自己去搭建和实现,从而节省人力和物力,避免重复造轮子。
第三方应用可以通过厂商提供的API或SDK等形式集成。
对于测试同学来说,API测试,也就是所谓的接口测试,应该是再熟悉不过了,但对于SDK的了解以及测试可能就没有API那么熟悉了。
所以,今天我们就来聊一聊什么是SDK,以及SDK如何测试。
SDK的全称是Software Development Kit(软件开发工具包),通常包括SDK接口、开发文档和Demo示例等。
API的全称是Application Program Interface(应用程序接口),就是软件系统不同组成部分衔接的约定。
常见的API形式有http协议请求接口、websocket协议请求接口等,而SDK可能是xxx.jar、xxx.war、xxx.py、xxx.framework、xxx.a、xxx.aar、xxx.so等。
通俗地说,API可以比作房门钥匙,在一个房子里,每个房间有不同的用途和资源,想要获取相应房间的资源,我们需要先用钥匙打开房间门,比如去书房拿书、去卧室拿枕头,都需要先找到相应的房间钥匙,而拿书和拿枕头的过程,就是调用API的过程,也就是钥匙开门的过程。
SDK相当于一个大的工具包,把这些钥匙都串在一块儿,将API集合到一起,拥有SDK,便可以在该房子里畅通无阻,想要哪个房间的资源,就调用相应的方法。
两者的区别就是,API是一个确定的功能,明确了它的作用,而SDK是很多方法的集合体,只要引入SDK工具包,无论想实现什么,SDK里总有能实现的方法。
简单来说,SDK=放着你想要的软件功能的工具包,API=SDK上唯一的接口。
API举栗:
http接口文档:
名称: 全国高校信息查询接口
描述: 用于查询全国高校信息
Host: www.iamwawa.cn
Request URL: /home/daxue/ajax
Request Method: POST
Content-Type: application/x-www-form-urlencoded
headers: user-agent:Chrome
调用:
调用http接口的方式有很多,比如postman、apifox、jmeter、python requests、java httpclient等。
SDK举栗:
腾讯云短信xxx.py包:
调用:
通过编写代码调用SDK工具包。
# -*- coding:utf-8 -*-
# 作者:测试蔡坨坨
# 时间:2020/12/3 16:46
# 功能:发送短信SDK
from django.conf import settings
from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
def send_sms_single(phone_num, template_id, template_param_list):
"""
单条发送短信
:param phone_num: 手机号
:param template_id: 腾讯云短信模板ID
:param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
:return:
"""
appid = settings.TENCENT_SMS_APP_ID # 自己应用ID
appkey = settings.TENCENT_SMS_APP_KEY # 自己应用Key
sms_sign = settings.TENCENT_SMS_SIGN # 自己腾讯云创建签名时填写的签名内容
sender = SmsSingleSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
except HTTPError as e:
response = {'result': 1000, 'errmsg': "网络异常发送失败"}
return response
如果把SDK想象成一个洋葱,你认为它是一个什么样的层级结构?
单元测试
,这个主要是针对开发同学需要关注的场景,需要对一些具体的业务逻辑进行单元测试,这部分可能测试同学会使用的比较少,单元测试一般会用到Junit单元测试框架、Mockito Mock框架、Jacoco代码覆盖率统计工具等,对于编程语言的了解程度还是有比较高的要求,如果测试同学对于语言比较了解的话,也可以考虑自己写单元测试。接口测试
,接口测试的语言能力要求相对于单元测试来说会稍微低一点。业务代码最终使用的是SDK提供的接口,内部实现的黑盒就可以让开发去保证质量,从测试的角度,我们只需要测试它的公开接口,保证这些公开接口没问题,而且这种也是性价比比较高的方式。
针对于代码层级的接口测试,通常我们会选用原生的语言去实现,比如这个SDK是用Java写的,那么我们就用Java去写用例,这一点与下面要说的二进制产物层级的接口测试会有一些区别。静态代码扫描
,现在还是有挺多静态代码扫描工具的,例如:SonarQube、Scanmycode、Checkstyle、FindBugs、PMD、Jtest Pyflakes、Pylint、pep8、FxCop、StyleCop等,其原理就是在写完代码以后,不需要编译或者构建,直接用扫描工具对代码进行扫描,找出来里面存在的语义缺陷或者安全漏洞,这种扫描一般扫的是代码的问题。敏感信息
,比如:硬编码域名信息、使用了一些不可商用的开源库的License、海外版本的App中有中文(有可能影响上线海外App应用商店),像这些都有安全审计的风险,都可以用代码扫描的方式进行检测。
并且这些扫描可以做成增加扫描的形式,就不用每次都全量扫描,从而加快执行速度。接口测试
,与代码层的接口测试有点不一样的是,代码层的接口测试一般推荐使用原生语言进行测试,但是在二进制产物层的接口测试,我们还可以使用其他的语言,比如:要在Python中调用xxx.jar包,就可以借助Jpype来实现,从而在Python项目中也可以调用Java类和方法。扫描和拦截
。包大小的检测
,SDK包的大小会直接影响用户的下载和使用率,也是一个非常重要的指标,有数据表明,apk的包体积每上升6M,下载转化率就会降低1%,接近20%的用户都会因为存储空间有限而卸载应用。从SDK的层级体系来看,其实是一个从内到外、从白盒到黑盒过渡的一个测试体系。
Demo阶段的SDK测试,简单来说就是对提供给其他开发者的工具包里面的内容进行测试。
而SDK通常包含SDK接口、开发文档和Demo示例等。
因此,测试的主要内容就有SDK接口文档、日志、Demo。
测试类型有功能测试、性能测试、兼容性测试、稳定性测试、网络相关测试、安全性测试等。
并且最终还可以实现SDK的自动化测试。
主要检查文档是否完整、正确、清晰,比如:接入指南是否包含了环境依赖说明、集成方法说明、调用方法说明,接口文档的方法、参数名称、参数类型、参数描述、是否必填、示例、返回值等。
对开发者来说,SDK接口里面的具体实现都是透明的,当上层调用遇到问题时,只能依赖SDK打印的日志来定位分析,所以日志是否完备,是否有助于解决问题,对应用开发者和SDK提供方来说都很重要。
Demo是SDK提供方用来演示如何调用接口实现具体的功能,可以让其他开发者直观地感受SDK的接入效果,可以较明确的知道接入这个SDK做出来的产品效果如何,因此也是我们测试的重点,应该尽可能多的覆盖各种业务场景。
保证SDK接口功能的正确性和完备性,客户端SDK接口测试跟服务端接口测试类似,包括场景覆盖和接口参数覆盖,主要测试各种参数组合下的返回值,数据是否缓存与存储,是否有回调,对于请求成功或失败都能按预期进行处理。
保证SDK接口满足特定的性能需求,比如:资源占用、响应时间等。
保证SDK兼容特定的设备平台,并与其他软件兼容。
测试业务场景在一定压力下,持续运行一段时间,接口功能和设备资源占用有无异常。
不同网络类型,不同网络环境下,SDK接口都能较好的处理,比如弱网测试。
对隐私数据的保护,访问权限的控制,用户服务的鉴权等。
与接口自动化测试类似,我们可以将Demo测试写成自动化脚本的形式,比如使用TetsNG框架并持续集成到Jenkins,方便快速回归。
以上,完。
脚踏实地,仰望星空,和坨坨一起学习软件测试,升职加薪!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有