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

文件: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. Swift教程Swift语言快速入门(内部资料)
  2. Facebook开源工具包LASER,支持93种语言
  3. C4C Adapt menu debugging
  4. 薪资/薪水/金额的数据类型
  5. Draconian,自由或保姆状态:Java,C#,C,C ++,Go和Rust中的并发意识形态
  6. lisp如何将度分秒转换为弧度_重磅干货!如何利用Stata进行空间冷热点分析 | 社论前沿...
  7. Spark基础学习笔记13:Scala函数
  8. 一级计算机框线设置为窄线,计算机等级一级MS Office考题:第二套字处理题
  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
  10. Genius ACM(倍增+归并排序)
  11. 网易云音乐自建服务器,自建私有云音乐服务–Subsonic
  12. IE工程师应该如何规划职业发展?-优思学院
  13. MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
  14. 通过Excel表格批量生成汉信码
  15. 火影智能AI伪原创插件伪原创源码
  16. 台式机切换有线/无线网脚本
  17. 空间直线的最小二乘拟合
  18. 基于uFUN开发板和扩展板的联网校准时钟
  19. 普通话证计算机证英语证,老师的必备证书:教师资格证、普通话证、英语四六级、计算机二级...
  20. content is king – Bill Gates (1/3/1996) 内容为王 - 比尔盖茨

热门文章

  1. 解决IE6、IE7、IE8、Firefox兼容的几种方案
  2. sql练习 使用储存池
  3. 用计算机公式计算优良,『excel怎样合并单元格』如何在EXCEL中如何用公式计算全年级各班各科平均分、优秀率、合格率的方法...
  4. 开发者特供丨72小时解锁华为黑科技,错过这次又等一年!
  5. c语言编程电话簿,C语言实现电话簿项目.pdf
  6. 算法二(python)
  7. CentOS7.2下一键安装Openstack
  8. There is no getter for property named ‘distinct‘ in ‘class tk.mybatis.mapper
  9. 微前端系列讲解--应用集成方案(qiankun+umi+vue)
  10. 杭州河坊街特色手机饰品——招财猫!