图书管理软件是非常专业的图书馆图书管理软件,用于帮助图书管理员高效完成日常工作,包括图书扫描录入数据库,搭配扫码设备,一键智能录入,还有图书编目软件,告别人工编目,大大提升了工作效率,还有图书借阅管理,书库管理查询、借书/还书查询以及到期未还书名单,随时可查,还有读者的借书记录等等,功能全面,图书管理员的必备神器!

文件:url80.ctfile.com/f/25127180-734965570-4486ed?p=551685 (访问密码: 551685)

众所周知,在云产品和SaaS蓬勃发展的当下,企业中有许多系统和环节都是依赖于第三方提供的服务或应用,而不必自己去搭建和实现,从而节省人力和物力,避免重复造轮子。

第三方应用可以通过厂商提供的API或SDK等形式集成。

对于测试同学来说,API测试,也就是所谓的接口测试,应该是再熟悉不过了,但对于SDK的了解以及测试可能就没有API那么熟悉了。

所以,今天我们就来聊一聊什么是SDK,以及SDK如何测试。

什么是SDK
SDK的全称是Software Development Kit(软件开发工具包),通常包括SDK接口、开发文档和Demo示例等。

API的全称是Application Program Interface(应用程序接口),就是软件系统不同组成部分衔接的约定。

API和SDK的区别
常见的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层级结构及测试

如果把SDK想象成一个洋葱,你认为它是一个什么样的层级结构?

代码层

最里面的一层就是代码层,代码层是SDK的基石,决定了后面的走向。

那么基于代码层,我们可以去做哪些测试呢?

首先是单元测试,这个主要是针对开发同学需要关注的场景,需要对一些具体的业务逻辑进行单元测试,这部分可能测试同学会使用的比较少,单元测试一般会用到Junit单元测试框架、Mockito Mock框架、Jacoco代码覆盖率统计工具等,对于编程语言的了解程度还是有比较高的要求,如果测试同学对于语言比较了解的话,也可以考虑自己写单元测试。

其次,基于代码的话,我们还可以写一些接口测试,接口测试的语言能力要求相对于单元测试来说会稍微低一点。业务代码最终使用的是SDK提供的接口,内部实现的黑盒就可以让开发去保证质量,从测试的角度,我们只需要测试它的公开接口,保证这些公开接口没问题,而且这种也是性价比比较高的方式。

针对于代码层级的接口测试,通常我们会选用原生的语言去实现,比如这个SDK是用Java写的,那么我们就用Java去写用例,这一点与下面要说的二进制产物层级的接口测试会有一些区别。

除了单元测试和接口测试以外,还有一些可以做的代码层测试,比如静态代码扫描,现在还是有挺多静态代码扫描工具的,例如:SonarQube、Scanmycode、Checkstyle、FindBugs、PMD、Jtest Pyflakes、Pylint、pep8、FxCop、StyleCop等,其原理就是在写完代码以后,不需要编译或者构建,直接用扫描工具对代码进行扫描,找出来里面存在的语义缺陷或者安全漏洞,这种扫描一般扫的是代码的问题。

另外我们还可以用一些脚本去检测代码中的敏感信息,比如:硬编码域名信息、使用了一些不可商用的开源库的License、海外版本的App中有中文(有可能影响上线海外App应用商店),像这些都有安全审计的风险,都可以用代码扫描的方式进行检测。

并且这些扫描可以做成增加扫描的形式,就不用每次都全量扫描,从而加快执行速度。

二进制产物

代码层再向外一层就是二进制产物层。

基于二进制产物,可能是xxx.jar、xxx.war、xxx.py等工具包,对于这样的二进制产物,我们可以测试什么呢?

因为从代码到二进制产物,其实已经完成了构建的过程,也就是说它可以直接被运行和调用。因此我们可以做一些接口测试,与代码层的接口测试有点不一样的是,代码层的接口测试一般推荐使用原生语言进行测试,但是在二进制产物层的接口测试,我们还可以使用其他的语言,比如:要在Python中调用xxx.jar包,就可以借助Jpype来实现,从而在Python项目中也可以调用Java类和方法。
如果在SDK中调用了一些高敏感的API,我们在这个层级也可以用一些工具进行扫描和拦截。
包大小的检测,SDK包的大小会直接影响用户的下载和使用率,也是一个非常重要的指标,有数据表明,apk的包体积每上升6M,下载转化率就会降低1%,接近20%的用户都会因为存储空间有限而卸载应用。
Demo

再向外我们来到了Demo层。

一般是进行功能测试和性能稳定性等专项测试。与其他需求测试一样,需要进行测试排期,分配人员和时间,走提测流程的。

集成应用

最外层就是SDK测试完成后,还需要基于集成包进行的测试,SDK本身没有问题,不代表它接入到其他业务系统就没有问题,很多SDK的问题其实都是出现在业务的配合上,比如SDK的某一个功能设计者设计它的时候希望它是一个调用频率很低频的操作,但业务在实际调用的时候做成了比较高频的调用,那这种情况就会产生一些性能问题,像这种可能就是在集成的阶段才会发现。

除此之外,还有对鉴权的测试,SDK通常会有一套鉴权和调用系统,在结合业务的时候,业务系统也会有一套鉴权机制,那么两者之间建立的对应关系有没有问题。

再有就是UI规则,比如说业务系统本身有一套UI规则,与SDK不一致,还有就是SDK与业务系统之间的信息传递,这些都是比较常见的问题。

集成应用的测试一般会跟着版本走,SDK测试得差不多了,才会进行集成应用的测试,太早的话可能SDK都还没测完,太晚的话出现问题可能来不及改,根据业务发版周期选择合适的测试时间。

从SDK的层级体系来看,其实是一个从内到外、从白盒到黑盒过渡的一个测试体系。

Demo阶段的SDK如何测试
Demo阶段的SDK测试,简单来说就是对提供给其他开发者的工具包里面的内容进行测试。

而SDK通常包含SDK接口、开发文档和Demo示例等。

因此,测试的主要内容就有SDK接口文档、日志、Demo。

测试类型有功能测试、性能测试、兼容性测试、稳定性测试、网络相关测试、安全性测试等。

并且最终还可以实现SDK的自动化测试。

SDK接口文档测试
主要检查文档是否完整、正确、清晰,比如:接入指南是否包含了环境依赖说明、集成方法说明、调用方法说明,接口文档的方法、参数名称、参数类型、参数描述、是否必填、示例、返回值等。

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

Demo测试
Demo是SDK提供方用来演示如何调用接口实现具体的功能,可以让其他开发者直观地感受SDK的接入效果,可以较明确的知道接入这个SDK做出来的产品效果如何,因此也是我们测试的重点,应该尽可能多的覆盖各种业务场景。

功能测试
保证SDK接口功能的正确性和完备性,客户端SDK接口测试跟服务端接口测试类似,包括场景覆盖和接口参数覆盖,主要测试各种参数组合下的返回值,数据是否缓存与存储,是否有回调,对于请求成功或失败都能按预期进行处理。

性能测试
保证SDK接口满足特定的性能需求,比如:资源占用、响应时间等。

Android实现图书借阅管理系统的开发相关推荐

  1. Springboot+vue开发的图书借阅管理系统项目源码下载-P0029

    前言 图书借阅管理系统项目是基于SpringBoot+Vue技术开发而来,功能相对比较简单,分为两个角色即管理员和学生用户,核心业务功能就是图书的发布.借阅与归还,相比于一些复杂的系统,该项目具备简单 ...

  2. 图书借阅管理系统微信小程序的开发 报告+开题报告+PPT+SSM项目源码及数据库文件+演示视频

    摘 要 尽管有的图书馆有图书管理系统,但是仅仅限于图书管理员使用,属于单机系统,对于Internet服务几乎没有,更不用说是WAP等服务.这样的图书管理系统根本没有发挥它的效力,资源闲置比较突出.基于 ...

  3. Django web开发系列(二)图书借阅管理系统之模型设计

    一 前言 在上一篇文章需求分析中,已经大致说明了为什么要开发图书借阅管理系统.系统应该具备哪些角色或行为.系统如何工作等,对该系统应该有了大致的印象,那接下来的文章就是介绍如何一步步实现. 本文将介绍 ...

  4. sql统计系统时间那一个月数量_关于BE00007图书借阅管理系统bug修复总结

    引言:昨日我重新审视了B-E00007-基于Java web的图书借阅管理系统的bug问题,主要是借阅图书和归还图书的bug问题,这两个借阅日期和归还日期不太准确,以及借阅后图书数量未发生变化,所以对 ...

  5. java毕业设计图书借阅管理系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计图书借阅管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计图书借阅管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  6. 基于微信小程序图书借阅管理系统(微信小程序毕业设计)

    基于微信小程序图书借阅管理系统 图书借阅管理系统用户端是基于微信小程序,管理员端是基于java编程语言,mysql数据库,ssm框架,idea工具开发,本系统是分为用户和管理员两个角色,其中用户的主要 ...

  7. 基于云服务器 B/S模式 JavaWeb RFID 图书借阅管理系统

    RFID图书借阅管理系统:点击此处访问系统 前排提示: 源码.文档(开题/结题报告/演示视频)包含于上述链接. 本文是一篇初学者写的 "软件文档". 全部仔细阅读完毕需要10min ...

  8. 图书借阅管理系统的设计与实现/书籍借还管理系统

    摘要 随着Internet的发展,人们的日常生活已经离不开网络.未来人们的生活与工作将变得越来越数字化.网络化和电子化.网上借阅一系列功能将成为人们最关注话题,本论文是以构建图书借阅为目标,使用 Ja ...

  9. Java课程设计-图书借阅管理系统

    摘要 图书管理工作是每个学校必须面对的工作,如何利用较为先进的技术开发高效.安全.各平台间相互数据共享的信息化平台,也就是设计出稳定.全面.有效的图书借阅管理系统,这就显得尤为重要.文中介绍了图书借阅 ...

最新文章

  1. 面向对象编程(OPP)
  2. LightSpeed 的Left Join Bug解决方案
  3. “AlphaGo之父”获最新一届ACM计算奖
  4. 第13次预习课-20180919 多进程编程
  5. Flink专题-BaseTransform
  6. mysql事务 brave,mysql 查询当天、本周,本月,上一个月的数据
  7. 江西省一级计算机考试试题,2江西省计算机一级考试试题
  8. python basemap的安装
  9. linux下mono播放PCM音频
  10. 哪些版本linux支持arm,腾讯QQ Linux版本正式回归 支持x64 ARM64 MIPS64架构
  11. 智慧职教云Java题库_智慧职教作业的答案,云课堂智慧职教java职业证书题库答案,职教云智慧职教题库答案...
  12. dtim 间隔(Delivery Traffic Indication Message)
  13. Beijing Thwarts Coke's Takeover Bid
  14. Pycharm 使用多个光标进行编辑
  15. PyCharm下载插件失败解决方法
  16. 微信开发者工具,调试公众号网页,控制台不显示,解决方案
  17. NOI2018 游记
  18. ur5机器人solidworks导出urdf(附带SW的y轴朝上和rviz零件散落的解决方法)
  19. 每年存1.4万,40年后你将有多少钱?算完惊呆了!
  20. MATLAB限制矩阵大小,matlab – 如何将矩阵划分为不等大小的子矩阵?

热门文章

  1. 计算机考试怎么考申论,公务员考试申论评分标准,这些你都知道吗?
  2. UHF超高频RFID纸质电子标签与树莓派通信
  3. 狄克斯特拉算法(Dijkstra)——算法思想及代码实现
  4. screen基本操作
  5. 第五章 树16 AcWing 1628. 判断红黑树
  6. vue实现图片切换效果
  7. 浅学C++(3)学习C语言(电话簿)
  8. 【今日头条2019,笔试题】机器人跳跃问题
  9. veracrypt取消加密卷_VeraCrypt如何创建文件型加密卷?保护文件资料安全
  10. 华为手机安装Goole play教程及安装包