鉴源论坛 · 观模丨基于应用程序编程接口(API)的自动化测试(上)

2023-11-08

作者 | 黄杉 华东师范大学软件工程学院博士

         苏亭 华东师范大学软件工程学院教授

版块 | 鉴源论坛 · 观模

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

应用程序编程接口(API)

应用程序编程接口,英文全称为Application Programming Interface[7](简称API),是一组定义了软件组件如何互相通信和交互的规则和协议。和用户接口(User Interface,简称UI)不同,API的目的是连接不同的软件,允许不同的软件应用程序之间共享功能和数据,而无需了解其内部实现细节。

API的表现形式一般是使用某种编程语言编写的函数(function)或者数据结构(data structure)。对一个应用程序中的编程接口进行定义和说明的文档被称为API规格说明(API specification)。公开的API和其对应的规格说明使得该应用程序开发者之外的开发人员能够调用这些API,并通过新编写的软件逻辑实现新功能或者对原有功能进行扩展。这使得开发人员能够构建更加模块化、可扩展和可重用的软件。API在现代软件开发中起着重要作用,它们促进了分布式系统、微服务架构和应用程序集成。通过使用API,开发人员可以利用现有功能,加快开发速度,提高代码的可维护性和可重用性。

02

自动化API测试

随着软件技术的发展,由于软件结构的高度复杂和软件开发周期的不断缩短,为了确保应用程序的质量和安全,API自身的功能正确性和使用安全性越来越重要,能快速有效地对API进行测试是关键。API测试是一种直接对API进行测试的软件测试技术,主要用于保证开发人员所编写的API满足给定的功能目标、性能目标和安全目标。

1.jpg

现代软件的架构大部分采用模块化和分层化的模式,各模块和层次之间通过API进行功能交互和数据传输。当某个模块或者软件层提供的API存在软件错误(bug),那么依赖该模块或者该软件层的其他模块和软件层自身功能也将出现错误。最坏情况下可能导致应用程序整体出错,影响用户使用体验,危害用户数据安全。因此,API测试是非常必要且需要重视的一个软件开发流程阶段。当API测试足够充分并且结果表明被测API正确无误时,使用这些API构建的应用程序或者程序功能才有基础的质量和安全保障。

从最初的软件开发瀑布模型(Waterfall model)到时下流行的敏捷开发(Agile development)和DevOps,软件开发周期不断缩短,使得如何高效保障应用程序的质量和安全受到更多的关注,也就催生了自动化测试(Automated testing)。API测试也顺势进入自动化时代。从通用自动化API测试技术(如单元测试、模糊测试)到特定编程语言的测试框架(如pytest[9]、JUnit[10]),从传统的应用程序编程库(library)API测试到Web场景下的RESTful API测试,自动化API测试技术得到广泛发展。

03

自动化API测试对象

自动化API测试的对象目前主要分为两种:函数级API(Function-level API)和RESTful API。前者是传统的程序编程库(或者称为第三方库)或者系统库中为开发者提供的API接口,需要开发者在软件代码中实际调用才能够发挥作用。后者则是在Web和云场景下广泛使用的具有REST规范的API,一般以客户端向服务器发起HTTP请求的形式呈现。对两者进行自动化测试在形式上相同,都需要测试人员编写特定的测试驱动进行API调用来完成测试,测试的重要内容也都是检查API调用的执行结果是否符合预期以及API执行过程中是否出现错误。而不同之处在于,函数级API通常运行在本地环境,而RESTful API运行在云端环境,API的调用形式不同,整体的交互环境和测试框架也有所差异。

3.1 函数级 API

函数级API(Function-level API)主要是指库API和系统调用。一般软件开发过程中,开发人员编写的单个函数或者软件模块中暴露的API接口也属于函数级API范畴。对于这一类API的自动化测试主要通过由开发人员编写的或者自动生成的测试驱动(test driver)完成。

库API指的是SDK(Software Development Kit)、标准库(Standard libraries)和第三方库(Third-party libraries)开放给软件开发人员调用的函数,如Android SDK和Python官方标准库中的API。库API通常是构建整个应用程序的基础,软件提供给用户的各种高级功能都将通过调用已有API或者组合已有API的方式实现,因此库API的正确性和安全性不言而喻。

系统调用(syscall)指的是操作系统中提供给开发人员进行用户空间和系统内核进行交互的接口,用于访问底层的操作系统功能,如Linux中的open、malloc和fork。

3.2 RESTful API

RESTful API通过直观简短的统一资源标识符(URI)定义资源,通过JSON、XML等文件格式进行数据传输。RESTful API使用基于HTTP动词的语义的操作来操作这些资源,例如GET、POST、DELETE和PUT。在处理HTTP请求期间,API可能需要从数据库读取/写入数据,并与其他web服务通信。测试RESTful API不仅需要为不同的端点编写HTTP消息,还需要选择正确的查询参数,以及正文有效载荷消息。


本文系统介绍了应用程序编程接口(API)的概念及其在软件开发中的作用与重要性,重点分享自动化API测试的发展历程与测试对象。后续,在基于应用程序编程接口(API)的自动化测试(下)中,笔者将深入剖析单元测试、模糊测试等当前主流的自动化API测试形式与技术。

参考文献:

[1] Vaggelis Atlidakis, Patrice Godefroid, and Marina Polishchuk. 2019. RESTler: Stateful REST API Fuzzing. In 2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE), 748–758. DOI:https://doi.org/10.1109/ICSE.2019.00083

[2] Domagoj Babić, Stefan Bucur, Yaohui Chen, Franjo Ivančić, Tim King, Markus Kusano, Caroline Lemieux, László Szekeres, and Wei Wang. 2019. FUDGE: fuzz driver generation at scale. In Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2019), Association for Computing Machinery, New York, NY, USA, 975–985. DOI:https://doi.org/10.1145/3338906.3340456

[3] Sujit Kumar Chakrabarti and Prashant Kumar. 2009. Test-the-REST: An Approach to Testing RESTful Web-Services. In 2009 Computation World: Future Computing, Service Computation, Cognitive, Adaptive, Content, Patterns, 302–308. DOI:https://doi.org/10.1109/ComputationWorld.2009.116

[4] Harrison Green and Thanassis Avgerinos. 2022. GraphFuzz: Library API Fuzzing with Lifetime-aware Dataflow Graphs. In 2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE), 1070–1081. DOI:https://doi.org/10.1145/3510003.3510228

[5] Kyriakos Ispoglou, Daniel Austin, Vishwath Mohan, and Mathias Payer. 2020. {FuzzGen}: Automatic Fuzzer Generation. 2271–2287. Retrieved July 5, 2023 from https://www.usenix.org/conference/usenixsecurity20/presentation/ispoglou

[6] Carlos Pacheco, Shuvendu K. Lahiri, Michael D. Ernst, and Thomas Ball. 2007. Feedback-Directed Random Test Generation. In 29th International Conference on Software Engineering (ICSE’07), IEEE, Minneapolis, MN, USA, 75–84. DOI:https://doi.org/10.1109/ICSE.2007.37

[7] 2023. API. Wikipedia. Retrieved August 16, 2023 from https://en.wikipedia.org/w/index.php?title=API&oldid=1170248429

[8] 2023. EvoMaster: A Tool For Automatically Generating System-Level Test Cases. Retrieved August 16, 2023 from https://github.com/EMResearch/EvoMaster

[9] pytest: helps you write better programs — pytest documentation. Retrieved August 16, 2023 from https://docs.pytest.org/en/7.4.x/index.html

[10] JUnit 5. Retrieved August 16, 2023 from https://junit.org/junit5/

[11] libFuzzer – a library for coverage-guided fuzz testing. — LLVM 18.0.0git documentation. Retrieved August 16, 2023 from https://www.llvm.org/docs/LibFuzzer.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

鉴源论坛 · 观模丨基于应用程序编程接口(API)的自动化测试(上) 的相关文章

随机推荐

  • 矩阵的转置

    稀疏矩阵 当一个矩阵中的很多元素都是零 而且非零元素的分布没有规律时 该矩阵称为稀疏矩阵 稀疏矩阵的压缩存储方法 从稀疏矩阵的概念 我们可以知道 稀疏矩阵的大多元素都是零 所以 我们只需要存储非零元素即可 这时 我们引入三元组表的概念 三元
  • redis数据类型List的安全队列和不安全队列

    在学习RPOPLPUSH命令的时候 官方文档中有提到安全队列和不安全的队列 一开始没有看懂 现在理解了做个笔记 一般情况下 我们可以借助List来实现消息队列 比如一个客户端通过命令LPUSH BLPUSH 把消息入队 另一个客户端通过命令
  • C语言 指针初阶

    头文件 define CRT SECURE NO WARNINGS 1 include
  • python爬虫七:图新验证码的识别

    1 Tesseract安装与简介 阻碍我们爬虫的 有时候正是在登录或者请求一些数据时候的图形验证码 因此这里我们讲解一种能将图片翻译成文字的技术 将图片翻译成文字一般被称为光学文字识别 Optical Character Recogniti
  • 使用Python,Tesseract更正文本方向

    这篇博客将介绍如何使用 Tesseract 的方向和脚本检测 OSD 模式执行自动文本方向检测和更正 orientation and script detection OSD 方向和脚本检测 text orientation 文本定向 OS
  • axios详解以及完整封装方法

    一 axios是什么 Axios 是一个基于 promise 网络请求库 作用于node js 和浏览器中 它是 isomorphic 的 即同一套代码可以运行在浏览器和node js中 在服务端它使用原生 node js http 模块
  • 地形纹理Splatting技术(翻译)

    地形纹理Splatting技术 翻译 文章来源 http www gamedev net reference articles article2238 asp Texture Splatting in Direct3D Introducti
  • 怎么重新编译CE5.6?

    按以下步骤 可以重先编译CE5 6 一 准备工作 1 CE5 6源码 http http www cheatengine org downloads php2 微软的WDK http www microsoft com downloads
  • AD20/Altium designer——如何生成Gerber打板文件

    Gerber文件是线路板行业软件描述线路板 线路层 阻焊层 字符层等 图像及钻 铣数据的文档格式集合 是线路板行业图像转换的标准格式 通常我们打板时厂家会要求发送Gerber文件 本文介绍如何在AD20到处Gerber文件 1 文件 制造输
  • AI与伦理道德

    我们无法知道我们将无限地得到人工智能的帮助 还是被藐视并被边缘化 或者很可能被它毁灭 的确 我们担心聪明的机器将能够代替人类正在从事的工作 并迅速地消灭数以百万计的工作岗位 人工智能的研究与开发正在迅速推进 也许我们所有人都应该暂停片刻 把
  • 三十六计之混战计

    三十六计的第四篇 共六计 釜底抽薪 混水摸鱼 金蝉脱壳 关门捉贼 远交近攻和假途伐虢 此篇计谋适合于敌友不分 军阀混战时使用 第十九计 釜底抽薪 不敌其力 而消其势 兑下乾上之象 不敌其力 敌 动词 攻打 力 最坚强的部位 而消其势 势 气
  • python接口自动化之DDT数据驱动测试

    一 简单介绍 DDT Date Driver Test 所谓数据驱动测试 简单来说就是由数据的改变从而驱动自动化测试的执行 最终引起测试结果的改变 通过使用数据驱动测试的方法 可以在需要验证多组数据测试场景中 使用外部数据源实现对输入输出与
  • 04 openEuler UKUI 桌面环境的安装和使用

    04 openEuler UKUI 桌面环境的安装和使用 文章目录 04 openEuler UKUI 桌面环境的安装和使用 4 1 UKUI简介 4 2 UKUI安装方法 4 2 1 更新软件源 4 2 2 安装UKUI 4 2 3 设置
  • CMT2380F32模块开发15-SPI例程

    这篇文章基本就是水一篇 因为例程需要操作铁电存储器FM25640 我的开发板上没有这个 我也没有买这个芯片 这个芯片也不便宜 10元左右 所以这篇就讲讲原理 简单讲讲函数吧 SPI 接口是工作于全双工模式下的同步串行数据通信接口 使用4个引
  • matlab中用于小数取整的函数的用法

    matlab中小数取整的函数大约有四个 floor ceil round fix 若 A 2 0 1 9 1 55 1 45 1 1 1 0 1 1 1 45 1 55 1 9 2 0 floor 朝负无穷方向靠近最近的整数 floor A
  • html页面通过id在页面内跳转,HTML跳转到页面指定位置的几种方法

    前言 有时候 我们想阅读页面中某段精彩的内容 但由于页面太长 用户需要自己滚动页面 查找起来非常麻烦 很容易让人失去继续往下阅读的兴趣 这样体验非常不好 所以我们可以想办法 实现点击某段文字或者图片跳转到页面指定位置 方便用户的阅读 一 纯
  • Python打开读文件:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xed in position 7014: invalid conti

    1 问题 Python用open 打开文件 读取其中内容时 报错说编码错误 utf 8 编码不能给字节0xed编码 feed LM input feed file data raw 21000101 204243 txt Traceback
  • Electron 开发环境注意项、踩坑补坑记录

    Electron Bug 解决 1 package json里的lib参数删除 2 项目目录不允许有中文 否则不能下载打包依赖 导致无法打包 3 每次打包软件前都可能缺失依赖包 需要手动在package json文件里的dependenci
  • ubuntu或者linux下卸载和安装多个jdk版本,1.6,1.7和1.8版本

    今天我教大家在ubuntu下安装多个jdk 我的系统是ubuntu 14 04 64位的 所以我下的的都是适合我的系统的 大家可以根据自己的系统从下面的页面中选择下载适合自己系统的jdk版本 jdk1 6 http www oracle c
  • 鉴源论坛 · 观模丨基于应用程序编程接口(API)的自动化测试(上)

    作者 黄杉 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 鉴源论坛 观模 社群 添加微信号 TICPShanghai 加入 上海控安51fusa安全社区 01 应用程序编程接口 API 应用程序编程接口 英文全称为