浅谈LLM时代下的REST API自动化测试

AI 1个月前 admin
93 0 0


浅谈LLM时代下的REST API自动化测试

引言

  如今API(Application Interface)作为现代软件架构中各个组件通信的基础设施,已经成为软件工程架构组织的重要组成部分。相应的,这一发展趋势也对软件工程的质量保障体系提出了新的要求,尤其是在确保通过API通信组织的微服务后端和web系统的平稳运行方面。因此,测试人员能够基于API接口规范,设计并执行有效的API测试任务尤为重要。在工业界和学术界,相关的技术人员和研究人员都做出了积极的探索和实践,致力于提升API测试的效率和准确性。

    API测试功能通常通过“平台”或者“工具”的形式提供给一线开发和测试人员,API测试平台和工具不仅可以大大提升软件开发和测试的效率,更可以为微服务系统的软件生态提供持续稳定的质量保障。随着LLM(Large Language Model:大语言模型)的应用进入蓝海时期,结合LLM的应用,API测试技术也涌现出了新的创新点。LLM凭借着强大的自然语言处理能力,在推动API测试平台和工具的自动化和智能化进程方面具有较大的潜能。

    本文将通过对现有的工业界和学术界REST API测试平台和工具进行部分的列举和对比,帮助读者理解REST API测试平台和工具的基本架构和测试流程,最终依据初步的REST API测试调研结果,讨论LLM能够如何赋能于REST API测试技术。

浅谈LLM时代下的REST API自动化测试

工业界的REST API测试平台实践经验


1

工业界REST API测试平台概述

    在工业实践中,API测试是微服务架构软件系统构建质量保障体系的重要工具和关键环节。业界REST API自动化测试的基本设计理念遵循测试输入生成、测试执行和测试断言的基本测试流程,在满足业界底层算法和接口传输协议的基础上,实现测试流程执行的自动化,提高测试效率。最终,业界 REST API自动化测试形成了“平台”为形式的方案,作为一种日常的测试工具推广到一线开发和测试人员使用。

    本文对目前主要的业界REST API测试方案进行调研,根据部分工作总结REST API自动化测试流程的典型框架如下:

浅谈LLM时代下的REST API自动化测试

业界REST API自动化测试典型框架

2

工业界REST API测试平台案例分析


    接下来,本文将列举和介绍目前业界主要的API自动化测试平台,对它们的特性进行分析和比较。

部分业界REST API自动化测试平台的调研结果

浅谈LLM时代下的REST API自动化测试


3


业界平台实现特点

    目前来说,业界的REST API测试平台案例存在以下特点:

1.注重对复杂技术架构的兼容性和可扩展性

    大型企业的软件系统具有复杂和多样化的技术架构,涵盖多样化的技术栈和API调用协议类型(如Thrift、gRPC等)。API自动化测试平台需要实现应用在不同语言、协议等技术环境的测试框架,以集成到复杂企业软件架构中,确保API测试平台的适用性。

2.与业界软件生态深度结合

    业界API测试平台更注重于向公司提供丰富的基础能力,提供测试任务构建、测试执行、检查点校验和测试报告生成等功能的一站式自动化平台,并结合业界良好的产品生态,与SDLC(Secure Software Development Life Cycle)深度结合,优化一线人员的使用体验。

    例如:字节跳动的BAM通过对接内部的代码仓库平台Codebase来实现公司内部全部服务的统一接口管理;美团的Lego开发团队将API测试的SDK推广到一线研发和测试人员使用,向测试人员提供线上接口调用流量排序等信息,帮助测试人员制定计划优先维护哪些API的测试用例。

3.偏重于黑盒测试

    目前来说,业界仅支持API的黑盒测试,也就是着眼于接口的功能,依赖测试人员创建测试任务,通过API执行的反馈信息进行断言判断和测试报告生成。纯黑盒测试虽然增强了API测试平台的通用性,降低了平台的接入成本,但是在纯黑盒测试达到瓶颈时,只能通过白盒测试提供信息来进一步提升测试效果。比如在测试中纳入覆盖信息,就可以在API测试中提供更多的信息,引导测试探索更多的程序行为。

浅谈LLM时代下的REST API自动化测试

学术界的REST API测试工具探索

1

学术界REST API测试平台概述

    近年来,学术界对REST API测试的研究日益活跃,相对于工业界API测试平台通常注重于解决复杂技术架构的兼容性和可扩展性问题,学术界的API测试工具更关注REST API测试用例自动化生成的高效性和准确性
    目前,学术界已经发布了多个开源REST API 测试工具,这些工具不仅在前沿研究(SOTA:State-of-the-Art)中表现突出,有些还通过与工业界合作开展了实证研究,进一步验证了工具的应用价值。
    接下来,本文将简要介绍两款具有代表性的学术界REST API 自动化测试工具。

2

学术界REST API测试平台案例分析


1. Restler

    Restler 是学术界提出的第一个有状态 REST API Fuzz 测试工具。Restler主要接受REST API的Swagger Specification(一种REST API的接口描述文档)作为输入,解析Swagger Specification并自动化生成并执行一系列API调用,对REST API进行Fuzz测试。

浅谈LLM时代下的REST API自动化测试

restler-fuzzer:https://github.com/microsoft/restler-fuzzer


    Restler主要通过以下两种方式生成API调用序列:

•通过接口描述文档静态分析请求参数依赖

    Restler Compiler提供对REST API Specification文档的静态分析结果,通过参数类型推断请求之间的生产者-消费者关系(如下图中POST请求返回的id信息和DELETE、GET和PUT请求的id参数存在生产者-消费者依赖),用于创建API调用序列。

浅谈LLM时代下的REST API自动化测试

ICSE’19:RESTler: Stateful REST API Fuzzing,example of producer-consumer relationship of API operations


•基于API调用的反馈信息动态维护调用序列

    Restler Test Engine支持在Swagger文档静态分析结果的基础上的自动化测试用例生成和执行。Restler还可以对测试执行的反馈进行学习,动态维护调用序列:如果生成的API调用序列 A-B-C 在使用过程中 A 或 B 遇到类似 500 等错误状态码,则将该序列加入黑名单,之后不再维护与生成。

    Restler已经在GitLab、Azure和Office365云服务中得到应用,发现了一系列有效的代码缺陷。

2. EvoMaster

    EvoMaster 是第一个在GitHub开源的AI-driven的自动化测试生成工具,它使用进化算法(Evolutionary Algorithm)和动态程序分析(Dynamic Program Analysis)自动化生成API测试用例。EvoMaster可以自动为web/企业应用程序生成系统级测试用例。它不仅支持对REST API执行Fuzz测试,还可以支持GraphQL API和RPC的Fuzz测试。

    如下图,在架构上,EvoMaster的实现主要划分为负责和SUT(System under Test)交互的Driver和负责测试用例生成的Core两个组件,Driver和Core之间通过HTTP进行通信。

浅谈LLM时代下的REST API自动化测试

TSEM’23:White-Box Fuzzing RPC-Based APIs with EvoMaster: An Industrial Case Study,Overview of EvoMaster


本文将EvoMaster的特点从算法和功能上总结如下:

1.在算法上

    EvoMaster 内部使用进化算法和动态程序分析来生成有效的测试用例。具体来说,该类方法从一个随机的初始种群开始进化测试用例,试图最大化代码覆盖率和缺陷数量等指标。

    此外,EvoMaster还利用了多种在软件测试领域广泛应用的启发式算法来提高工具性能。

2.在功能上

    EvoMaster 主要特性包括:支持 Web API (REST、GraphQL 和 RPC) 的黑盒和白盒测试模式、对JVM语言的字节码分析和SQL handling白盒测试(利用SQL数据库的交互信息产生更高覆盖率的测试用例)等。


3


学术界工具特点

1.聚焦于自动化测试输入生成

    学术界工具主要致力于自动化REST API测试输入的生成,其通过推导API调用序列蕴含的参数依赖关系,自动化生成符合API规范合法性和业务逻辑的API调用操作序列,从而对API测试的复杂场景进行测试,发现程序缺陷。

2.依赖状态码和返回信息作为反馈信号

    目前,学术界的API自动化测试工具依赖于公开 API 的状态码和返回信息作为反馈信号,一种可能的原因是用于评估工具的数据集不得不包含一些被广泛使用、API 数量大、可被外部访问的网站或服务(如 Youtube、Twitter 等),但这些网站或服务通常不提供源代码。这种情况下,学界的测试工作难以深入探索白盒 API 测试,而更多局限于黑盒测试。


浅谈LLM时代下的REST API自动化测试

LLM如何赋能于REST API测试技术

    随着GPT-4.0、Gemini、Claude等LLM(Large Language Model:大语言模型)的推出,LLM已成为技术创新的焦点,展现出巨大的发展潜力和广泛的应用前景。处于大模型技术应用的蓝海时期,我们不禁期待LLM能够如何赋能于REST API测试技术,是否会引领新一代智能化REST API测试的潮流,激发出该领域的创新活力。

    因此,基于初步的调研与分析,本文提供了五个可能有潜力的LLM赋能于REST API测试的方面,希望能够对相关技术人员和研究人员有所启发。


1

REST API参数依赖增强和生成

    REST API参数依赖指的是在一个REST API调用序列中,API的参数值和调用返回值之间的约束和依赖关系,被用于指导自动化测试用例生成工具构造REST API调用参数,生成REST API调用操作序列。传统方法中,API参数约束和依赖主要通过对API Specification文档静态分析获得。比如在ICST’20的工作RESTESTGEN中采用了ODG(Operation Dependency Graph)的图结构建模API调用序列的参数依赖关系(API调用操作getPetById的参数petId依赖于调用getPets返回的petId序列)。

浅谈LLM时代下的REST API自动化测试

IEEE ICST’20:RESTTESTGEN: Automated Black-Box Testing of RESTful APIs

    将LLM应用于REST API的参数约束和依赖提取,其在以下两个方面具有相对于静态分析的优势:

1.对基于自然语言的接口描述信息的理解和提取(文档信息提取)

    静态分析倾向于对结构化的文本进行分析建模,而接口文档中包含了部分开发人员的自然语言的描述信息,它们描述了参数的含义和功能,LLM可以提取这些信息增强或者生成REST API的参数约束和依赖关系。

浅谈LLM时代下的REST API自动化测试

IEEE ICSE-NIER’24:Leveraging Large Language Models to Improve REST API Testing,Guielines of LLM prompt for extracting logical constraints.


2.结合项目背景知识和领域知识迁移的语义上下文理解(语料知识推断)

    LLM可以具有强大的上下文理解能力,结合项目背景和习得的大规模语料库知识,可以生成符合真实语义的参数依赖关系。比如向LLM提供一个火车订票的需求场景和两个接口字段:出发时间和到达时间,可以得到一组参数依赖关系:出发时间 <(早于)到达时间。


2

初始Seeds生成


    在API Fuzz测试中,Fuzzer需要在执行前从语料库中选择随机seeds来生成一组测试的初始输入,一组多样化的初始seeds可以在测试中覆盖更多的功能,触发被测程序的深层次行为,发现更多的代码缺陷。

    然而,目前API Specification仅仅为极少字段提供默认值或有效示例,初始seeds生成比较依赖随机生成或者由研究人员提供一个默认的字段值字典。

    基于LLM的seeds生成的主要优势在于:针对特定项目背景的REST API,LLM可以结合其在大规模语料库训练中积累的领域知识,生成符合项目背景的多样化初始seeds,使得Fuzz可以探索更深层的程序行为。


3


Fuzzing harness自动化生成

    Fuzz harness是负责调用目标代码,将测试输入传递到特定的函数或接口的代码框架。它的主要目标是将Fuzz Engine和Fuzz targets连接起来,执行Fuzz 测试。

    Google发布的Fuzz工具OSS-Fuzz为了解决在开源软件项目中的fuzz blockers(尽管消耗了大量的CPU时间,Fuzz测试的行覆盖率依然较低,约为百分之三十)问题,提出并尝试向LLM提供项目的低覆盖率部分代码信息,自动生成Fuzz harness,引导改善项目的Fuzz测试覆盖率指标。截至目前,借助LLM生成Fuzz harness,OSS-Fuzz在开源软件项目TinyXML2中将Fuzz测试的行覆盖率指标(LOC)从38%提高了69%。

浅谈LLM时代下的REST API自动化测试

Experiment framework of fuzz targets generation with LLM(OSS-Fuzz)


4

搜索空间剪枝


    SBST(Search-Based Software Testing)是一种使用搜索算法(如BFS、遗传算法等)来自动化生成测试用例,旨在最大化代码覆盖率并且发现更多程序缺陷的自动化软件测试技术。SBST 的核心挑战之一在于搜索空间往往极其庞大,需要对搜索空间进行剪枝,提升搜索效率。

    LLM可以利用API Specification中的语义信息和大规模语料库中的知识来辅助搜索空间剪枝,为搜索空间生成若干启发式语义规则,动态调整搜索空间的边界,优化搜索的效率。

    例如对于Integer类型的字段age,它的基本类型取值范围是-2147483648 <= age <= 2147483647。虽然这一取值范围涵盖了整型变量的所有可能值,但不符合现实世界的常识性约束。LLM 可以根据常识性知识生成启发式规则:人的自然年龄不可能为负数,且几乎不可能超过 200 岁。因此,可以通过剪枝将搜索空间缩小为 0 < age < 200,显著提高测试效率。

    这种基于语义信息的空间剪枝策略,结合了 LLM 的常识推理能力,能够有效减少不合理输入的生成次数,帮助 SBST 在庞大的搜索空间中更高效地探索有意义的测试用例,从而提高缺陷发现的效率和覆盖率。


5

Test Oracle 自动化生成


    本文调研结果涉及的在学术界工具中采用的REST API测试的Test Oracle主要分为以下两种:

1.REST API的返回状态码结果 (Response Code = 2xx,4xx,5xx等),判断REST API调用引起的系统崩溃行为等。

2.REST API的返回的资源对象(HTTP JSON Body)是否和API Specification的描述在语法上一致,进行JSON资源对象的约束检查。(例如返回的资源对象的字段数目、类型等)。

    同时,在业界,API测试平台通过手工配置基于API调用返回的资源对象JSON属性的约束点,超时检查的规则完成自动化约束点检查。这些约束规则的编写需要对项目具有经验的专业人员根据需求结合专业背景耗费大量精力进行编写。

    LLM可以根据REST API的接口文档和业务功能描述自动化生成测试用例。通过对文本的解析和学习,LLM能够识别程序逻辑,预测程序行为,从而生成相应的Test Oracle。这种方法不仅可以提高测试效率,还可以帮助改善测试用例的全面性和准确性。


浅谈LLM时代下的REST API自动化测试

结语

    在现代化软件架构中,API测试变得越来越重要,它不仅确保了单个服务能够正常提供业务功能,还涉及对多个服务之间的通信和协作的质量保障。

    展望未来,我们期望相关从业者和研究者可以基于已有的API测试中具备价值的功能和设计,利用LLM强大的上下文理解和文本生成能力,提高API测试的智能化水平,改善API测试的效率和准确度,推动其在实际应用中的落地和发展。

    声明:本文对业界的调研结果基于中文互联网公开的开源代码社区、技术经验博文和工具项目文档资料,由于调研资料的完整性和时效性的不足,可能存在调研结果不全面和与当前现状产生偏差的情况,请读者以实际情况为准,也欢迎与我们联系和反馈进一步的情况。

浅谈LLM时代下的REST API自动化测试

参考资料

1.阿里开源 OTP:https://github.com/alibaba/online-test-platform

2.阿里云效:https://developer.aliyun.com/article/117607?spm=5176.26934562.main.5.5e8e53937Gcfu1

3.字节 BAM:https://juejin.cn/post/7251501762817065016

4.腾讯优测:https://www.yun88.com/product/6064.html

5.美团 Lego:https://tech.meituan.com/2018/01/09/lego-api-test.html

6.华为云 CodeArts APITest:https://www.huaweicloud.com/special/codearts-api.html

7.Restler: 

https://www.microsoft.com/en-us/research/uploads/prod/2021/03/RESTler.pdf

8.EvoMaster: https://dl.acm.org/doi/pdf/10.1145/3585009

9.EvoMaster-GraphQL:https://dl.acm.org/doi/pdf/10.1145/3520304.3528952

10.RESTGPT:https://doi.org/10.1145/3639476.36397

11.OSS-Fuzz:https://github.com/google/oss-fuzz

12.RESTTESTGEN:10.1109/ICST46399.2020.00024


浅谈LLM时代下的REST API自动化测试
浅谈LLM时代下的REST API自动化测试

Codewisdom平台由复旦大学软件工程实验室运营,提供智能化软件开发平台及线上沙龙相关资讯,关注可了解更多智能化软件开发的最新消息~

作者|武雅琛、李佳庚、董  震

排版|王骏飞

审核|董  震、彭  鑫

原文始发于微信公众号(CodeWisdom):浅谈LLM时代下的REST API自动化测试

版权声明:admin 发表于 2024年10月17日 上午8:01。
转载请注明:浅谈LLM时代下的REST API自动化测试 | CTF导航

相关文章