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

news2025/1/15 21:01:11

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

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

版块 | 鉴源论坛 · 观模

社群 | 添加微信号“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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UI自动化之关键字驱动

关键字驱动框架:将每一条测试用例分成四个不同的部分 测试步骤(Test Step):一个测试步骤的描述或者是测试对象的一个操作说明测试步骤中的对象(Test Object):指页面的对象或者元素对象执行的动…

浪潮信息Owen ZHU:大模型百花齐放,算力效率决定速度

与狭义的人工智能相比,通用人工智能通过跨领域、跨学科、跨任务和跨模态的大模型,能够满足更广泛的场景需求、实现更高程度的逻辑理解能力与使用工具能力。2023年,随着 LLM 大规模语言模型技术的不断突破,大模型为探索更高阶的通用…

打磨 8 个月、功能全面升级,Milvus 2.3.0 文字发布会现在开始!

Milvus 社区的各位伙伴: 大家晚上好!欢迎来到 Milvus 2.3.0 文字发布会! 作为整个团队的匠心之作,Milvus 2.3.0 历经 8 个月的设计与打磨,无论在新功能、应用场景还是可靠度方面都有不小的提升。 具体来看:…

电脑莫名其妙重启 为设备 ROOT\DISPLAY\0000 加载驱动程序 \Driver\WUDFRd 失败

卸载向日葵即可解决!!!!!下面是报错日志,估计是远程连接导致的问题

Flask项目请求图片资源返回403错误

问题 解决 在图片url前缀前加 "https://images.weserv.nl/?url" 参考 如何解决访问外部图片返回 403 Forbidden 错误 - 知乎 vue中请求接口会自动带上本地ip_vite打包后请求地址为什么带本地地址_夜月晓晓的博客-CSDN博客

3D点云处理:基于PCA计算点云位姿 平面位姿(附源码)

文章目录 1. 基本内容2. PCA求解步骤(非公式推导)3. 代码实现4. 参考文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_1. 基本内容 基于PCA计算点云位姿通常是指在三维空间中使用PCA(主成分分析)来估计点云数据的姿态或定位,即确定点云数据在三维空间中的位置(平移…

2022年12月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:漫漫回国路 2020年5月,国际航班机票难求。一位在美国华盛顿的中国留学生,因为一些原因必须在本周内回到北京。现在已知各个机场之间的航班情况,求问他回不回得来(不考虑转机次数和机票价格)。 时间限…

idea 链接mysql连不上

打开文件 C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.1\jbr\conf\security\java.security修改内容 搜索:jdk.tls.disabledAlgorithms 修改 链接地址 在链接后面添加 ?useSSLfalse jdbc:mysql://127.0.0.1:3306/db_admin3?useSSLfalse

java+jsp+servlet+mysql蛋糕商城

项目介绍: 本系统为基于jspservletmysql的蛋糕商城,包含管理员和用户角色,用户功能如下: 用户:注册、登录系统;查看商品分类;查看热销、新品商品;查看商品详情;搜索商品…

XSS漏洞及复现

一、什么是XSS 跨站脚本( Cross-site Scripting )攻击,攻击者通过网站输入框输入payload(脚本代码 ),当用户访问网页时,恶意payload自动加载并执行,以达到攻击者目的( 窃取cookie、恶意传播、钓鱼欺骗等)为了避免与HTML语言中的C…

(数学) 剑指 Offer 62. 圆圈中最后剩下的数字 ——【Leetcode每日一题】

❓ 剑指 Offer 62. 圆圈中最后剩下的数字 难度:简单 0, 1, ,n-1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如…

最新文献怎么找|学术最新前沿文献哪里找

查找下载最新文献最好、最快、最省事的方法就是去收录该文献的官方数据库中下载。举例说明: 有位同学求助下载一篇2023年新文献,只有DOI号10.1038/s41586-023-06281-4,遇到这种情况可以在DOI号前加上http://doi.org/输入地址栏查询该文献的篇…

数据结构:排序解析

文章目录 前言一、常见排序算法的实现1.插入排序1.直接插入排序2.希尔排序 2.交换排序1.冒泡排序2.快速排序1.hoare版2.挖坑版3.前后指针版4.改进版5.非递归版 3.选择排序1.直接选择排序2.堆排序 4.归并排序1.归并排序递归实现2.归并排序非递归实现 5.计数排序 二、排序算法复杂…

DDR2 IP核调试记录1

一、IP核生成不成功可能原因 1、打开 Quartus II 软件时,请右键选择以管理员方式运行,切记,否则可能导致 IP 生成不成功。 2、创建工程时不要将工程创建在和 Quartus II 安装目录相同的盘符下,否则可能导致生产 IP 失败。 3、如果…

Revit SDK:AutoJoin 自动合并体量

前言 Revit 有一套完整的几何造型能力,每一个体量都是一个GenericForm,这些体量可以通过拉伸、扫掠等创建。这个例子介绍如何将他们合并成一个体量。 内容 合并体量的关键接口: // Autodesk.Revit.DB.Document public GeomCombination Com…

提升eBay、亚马逊搜索排名:测评自养号战略揭秘

想要在跨境市场上获得更多销售额,让客户可见非常重要。而自养号测评是个不错的选择,可以帮助您提高排名和产品知名度。许多因素共同作用,吸引更多客户关注您的产品。 网上购物也以同样的方式进行。人们在亚马逊上搜索特定产品并寻找一些选择…

【核心复现】基于改进灰狼算法的并网交流微电网经济优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Acwing 1233. 全球变暖 (每日一题)

如果你觉得这篇题解对你有用,可以点个赞或关注再走呗,谢谢你的关注~ 题目描述 你有一张某海域 NN 像素的照片,”.”表示海洋、”#”表示陆地,如下所示: … .##… .##… …##. …####. …###. … 其中”上下左右”…

基于法医调查算法优化的BP神经网络(预测应用) - 附代码

基于法医调查算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于法医调查算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.法医调查优化BP神经网络2.1 BP神经网络参数设置2.2 法医调查算法应用 4.测试结果:5…

八、性能测试

八、性能测试 8.1 性能测试代码 #include"ConcurrentAlloc.h"// ntimes 一轮申请和释放内存的次数 // rounds 轮次 void BenchmarkMalloc(size_t ntimes, size_t nworks, size_t rounds) {std::vector<std::thread> vthread(nworks);std::atomic<size_t&g…