0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于应用程序编程接口(API)的自动化测试(上)

上海控安 来源:上海控安 作者:上海控安 2023-09-01 11:17 次阅读

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

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

版块 |鉴源论坛 · 观模

社群 |添加微信号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满足给定的功能目标、性能目标和安全目标。

现代软件的架构大部分采用模块化和分层化的模式,各模块和层次之间通过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.2RESTful 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.

[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.

[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

[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

[5] Kyriakos Ispoglou, Daniel Austin, Vishwath Mohan, and Mathias Payer. 2020. {FuzzGen}: Automatic Fuzzer Generation. 2271–2287. Retrieved July 5, 2023

[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.

[7] 2023. API. Wikipedia. Retrieved August 16, 2023

[8] 2023. EvoMaster: A Tool For Automatically Generating System-Level Test Cases. Retrieved August 16, 2023

[9] pytest: helps you write better programs — pytest documentation. Retrieved August 16, 2023

[10] JUnit 5. Retrieved August 16, 2023

[11] libFuzzer – a library for coverage-guided fuzz testing. — LLVM 18.0.0git documentation. Retrieved August 16, 2023

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化测试
    +关注

    关注

    0

    文章

    201

    浏览量

    26881
  • API
    API
    +关注

    关注

    2

    文章

    1470

    浏览量

    61732
  • 编程接口
    +关注

    关注

    1

    文章

    36

    浏览量

    7976
收藏 人收藏

    评论

    相关推荐

    OPhone自动化测试技术概述

    本文将对OPhone平台上可采用的几种自动化测试技术进行介绍,并对每种技术的优缺点做简要的总结。OPhone台除了为应用程序开发提供丰富的API外,也为开展
    发表于 05-06 08:58

    自动化测试框架思想和构建

    自动化测试一般是指软件测试自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预
    发表于 07-18 06:52

    JavaScript API自动化测试方案的管理设计与实现

    Logcat并写入,最终写成方案并测试,在应用程序中,JavaScript API作为连接程序与web页面的桥梁,扩展了内嵌web页面的JavaScript的能力,为web应用带来更好
    发表于 11-07 11:10 5次下载
    JavaScript <b class='flag-5'>API</b><b class='flag-5'>自动化</b><b class='flag-5'>测试</b>方案的管理设计与实现

    Android应用程序GUI遍历自动化方法

    和性能。 为了提高应用程序自动执行技术的图形用户界面( GUI)覆盖率和自动化程度以满足Android应用
    发表于 12-09 11:06 0次下载
    Android<b class='flag-5'>应用程序</b>GUI遍历<b class='flag-5'>自动化</b>方法

    使用Postman成功实现API测试自动化的最佳实践

      API 测试自动化支持两个独立软件系统之间的通信和数据交换。实现 API 的软件系统包含可由另一个软件系统执行的功能/子例程。它通过增加测试
    的头像 发表于 06-20 10:19 886次阅读

    使用Postman成功实现API测试自动化的最佳实践

      API 测试自动化支持两个独立软件系统之间的通信和数据交换。实现 API 的软件系统包含可由另一个软件系统执行的功能/子例程。它通过增加测试
    的头像 发表于 07-05 10:46 914次阅读

    使用Postman成功实现API测试自动化的最佳实践

    API代表应用程序编程接口,用于通过使用任何通信模式来平滑两个不同应用程序之间的交互。每次您在智能手机上查看天气或火车时间时,您都在使用
    的头像 发表于 12-08 15:01 622次阅读
    使用Postman成功实现<b class='flag-5'>API</b><b class='flag-5'>测试</b><b class='flag-5'>自动化</b>的最佳实践

    跨平台移动应用程序测试自动化框架确保质量与速度

      随着市场上推出的移动应用程序数量不断增加,测试工程师努力在移动应用程序在在线市场上发布之前满足所有测试用例。在现实世界中,它们总是悄悄潜入,并且经常重新出现,即使使用最佳的手动
    的头像 发表于 12-09 14:21 694次阅读

    测试自动化中的Python

      用于测试编程需要与开发应用程序编程不同的方法。如果你想要一种专门用于测试编码的简单而精简的语言,Python 是一个不错的选择。Py
    的头像 发表于 12-09 14:53 778次阅读

    如何自动化测试你的接口

    不知道大家的项目是否都有对接口API进行自动化测试,反正像我们这种小公司是没有的。由于最近一直被吐槽项目质量糟糕,只能研发自己看看有什么接口
    的头像 发表于 04-07 15:29 1205次阅读
    如何<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>你的<b class='flag-5'>接口</b>?

    什么是自动化测试框架

    自动化测试框架,即是应用于自动化测试所用的框架。按照框架的定义,自动化测试框架要么是提供可重用的
    发表于 04-18 14:44 854次阅读

    基于Raspberry PI的应用程序的典型场景家庭自动化

    电子发烧友网站提供《基于Raspberry PI的应用程序的典型场景家庭自动化.zip》资料免费下载
    发表于 06-13 11:05 0次下载
    基于Raspberry PI的<b class='flag-5'>应用程序</b>的典型场景家庭<b class='flag-5'>自动化</b>

    什么是自动测试设备(ATE)?如何进行自动化测试

    自动测试设备(ATE)可以是利用少量设备的简单测试,也可以是大型复杂测试,包括探测站、气动自动化、以及机器人自动化等。,而现在,
    的头像 发表于 05-09 16:46 2333次阅读
    什么是<b class='flag-5'>自动测试</b>设备(ATE)?如何进行<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>?

    接口自动化测试流程讲解 企业接口自动化测试步骤

    接口自动化测试是指通过编写脚本或使用自动化工具,对软件系统的接口进行测试的过程。
    发表于 07-28 14:54 2092次阅读
    <b class='flag-5'>接口</b><b class='flag-5'>自动化</b><b class='flag-5'>测试</b>流程讲解 企业<b class='flag-5'>接口</b><b class='flag-5'>自动化</b><b class='flag-5'>测试</b>步骤

    基于应用程序编程接口API)的自动化测试(下)

    本文将深入剖析单元测试、模糊测试等当前主流的自动化API测试形式与技术。
    的头像 发表于 09-20 17:16 897次阅读
    基于<b class='flag-5'>应用程序</b><b class='flag-5'>编程</b><b class='flag-5'>接口</b>(<b class='flag-5'>API</b>)的<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>(下)