[论文阅读] 人工智能 + 软件工程 | 增强RESTful API测试:针对MongoDB的搜索式模糊测试新方法

增强RESTful API测试:针对MongoDB的搜索式模糊测试新方法

论文: Search-Based Fuzzing For RESTful APIs That Use MongoDB

一段话总结

本文聚焦于使用MongoDB的RESTful API的基于搜索的模糊测试 ,提出了增强测试生成的新技术:通过自动代码 instrumentation 动态分析MongoDB状态,并允许从测试用例直接插入NoSQL数据,作为开源工具EvoMaster的扩展。实验在6个RESTful API上进行,结果显示代码覆盖率较现有白盒方法最多提升18%,且优于4种最先进的黑盒模糊测试工具,为NoSQL数据库交互的API测试提供了有效方案。

研究背景

想象一下,你经营着一家大型电商平台,后台依赖数十个微服务协同工作------用户登录、商品推荐、订单处理等功能分别由不同的RESTful API负责。这些API每天要处理数百万次请求,而它们的"记忆中心"正是数据库。其中,MongoDB这类NoSQL数据库因灵活的存储格式(无需固定表结构)被广泛采用,就像一个没有固定货架的仓库,货物可以随意摆放,极大提升了存储效率。

但问题来了:如何确保这个"灵活仓库"和API的配合不出错?传统的API测试工具就像只会检查固定货架的质检员,面对MongoDB的动态数据结构时频频"失灵":

  • 黑盒测试工具看不见API内部逻辑,只能盲目尝试请求,效率低下;
  • 现有白盒工具(如EvoMaster)虽能利用内部信息,但主要针对SQL数据库,对MongoDB的动态 schema 和复杂查询过滤支持不足;
  • 当API需要特定数据库状态才能触发隐藏错误时(比如某个查询必须返回非空结果),传统工具很难"猜中"正确的数据组合。

这就像要打开一把密码锁,传统方法只能随机试数字,而我们需要一种能"感知"密码组合接近程度的新工具。

主要作者及单位信息

  • Hernan Ghianni:布宜诺斯艾利斯大学计算机科学系、CONICET计算机科学研究所
  • Man Zhang:北京航空航天大学计算机学院
  • Juan P. Galeotti:布宜诺斯艾利斯大学、CONICET、挪威Kristiania应用科学大学
  • Andrea Arcuri:挪威Kristiania应用科学大学、奥斯陆城市大学计算机系

创新点

  1. 动态追踪MongoDB交互:通过代码 instrumentation 实时监控API对MongoDB的查询操作,记录所有未返回结果的过滤器(如"查找x=100的文档"),解决了"看不见数据库内部逻辑"的问题。

  2. NoSQL距离计算:为每个未命中的过滤器计算"距离"------评估现有数据库文档与满足过滤器条件的接近程度(例如,文档x=90与过滤器x=100的距离为10),给测试工具提供"优化方向"。

  3. 直接插入NoSQL数据:允许测试用例直接向MongoDB插入数据,无需通过API接口,尤其适合只读服务或复杂交互场景(比如API没有提供创建数据的接口,但测试需要特定初始数据)。

  4. 自适应数据格式推断:通过反射技术自动识别MongoDB集合中文档的预期格式(如字段类型),确保插入的数据能被API正确解析,避免因格式错误导致的测试失效。

研究方法和思路、实验方法

核心技术步骤

  1. 监控数据库交互

    在API运行时,通过 instrumentation 追踪MongoDB驱动的find()方法调用,记录查询过滤器和目标集合名称,相当于给数据库装了一个"监控摄像头"。

  2. 计算NoSQL距离

    对每个未返回结果的过滤器,遍历集合中的文档,根据过滤器条件(如$eq$gt)计算文档与条件的"距离"(参考分支距离算法),并取最小值作为该过滤器的优化目标。例如:

    • 过滤器为x=17,文档x=42,则距离为|42-17|=25
    • 多条件过滤器(如x=17且y="c")则通过归一化处理避免某一条件主导结果。
  3. 优化测试生成

    将NoSQL距离作为次要目标融入EvoMaster的搜索算法,在生成测试用例时,优先选择能减小距离的输入(如调整API请求参数),引导测试逐步接近满足过滤器的状态。

  4. 直接插入数据

    当通过API难以准备所需数据时,自动生成插入操作,直接向MongoDB写入符合格式的文档,并结合查询条件确保插入数据能触发目标代码路径。

实验设计

  • 测试对象:6个来自EMB corpus的真实RESTful API(总324个端点,84531行代码),均使用MongoDB且运行在JVM上。
  • 对比工具
    • 白盒:基础版EvoMaster(无MongoDB支持);
    • 黑盒:ARAT-RL、EvoMaster BB、Restler、Schemathesis(均为当前主流工具)。
  • 实验设置:每个API重复测试30次,每次测试时长1小时,评估指标为代码覆盖率和故障检测数。

主要贡献

  1. 显著提升测试效果:在6个API中,代码覆盖率平均提升7.3%,最高达18%(session-service API),5个API的提升具有统计显著性。

  2. 超越现有工具:与4种黑盒工具相比,新方法平均覆盖率达52.7%,排名第一,远超第二名(EvoMaster WB,43.8%)。

  3. 解决实际痛点

  4. 故障检测能力增强:在3个API中发现更多隐藏故障,平均故障检测数从51.8增至52.8。

思维导图


详细总结

1. 研究背景与动机
  • RESTful API与数据库交互:RESTful API广泛用于微服务,依赖数据库持久化数据,其中NoSQL数据库(如MongoDB)因灵活性和可扩展性被广泛使用,但无固定schema的特性增加了测试难度。
  • 现有测试工具局限:黑盒测试工具无法利用SUT内部信息;现有白盒工具(如EvoMaster)主要针对SQL数据库,对NoSQL数据库支持不足,难以处理动态schema和复杂过滤器。
  • 研究目标:提出增强的基于搜索的测试生成技术,解决MongoDB交互的RESTful API测试难题。
2. 核心技术
  • NoSQL启发式方法

    • 监控NoSQL命令:通过 instrumentation 监控MongoDB驱动层的find()调用,记录过滤器和集合信息。
    • 计算NoSQL距离 :对返回空结果的过滤器,评估集合中每个文档与过滤器的接近程度(基于分支距离和归一化函数),公式为Hc(F)=mind∈c{Hd(F)}H_{c}(F)=min {d \in c}\left\{H{d}(F)\right\}Hc(F)=mind∈c{Hd(F)}。
    • 适应度函数整合:将NoSQL距离作为次要目标,辅助优化测试生成,优先选择更接近满足过滤器的测试用例。
  • NoSQL数据生成

    • 允许直接向MongoDB集合插入文档,解决只读服务或复杂交互场景下的数据准备难题。
    • 通过反射推断集合数据格式(基于find()返回的类信息),确保插入文档的有效性。
3. 实验设计
  • 实验对象:6个来自EMB corpus的JVM REST API,具体信息如下表:
SUT 端点数量 源文件数量 代码行数(LOC)
bibliothek 8 33 2176
genome-nexus 23 405 30004
gestaohospital-rest 20 33 3506
ocvn-rest 258 526 45521
reservations-api 7 39 1853
session-service 8 15 1471
总计 324 1051 84531
  • 对比工具

    • 白盒:基础版EvoMaster(无MongoDB支持)
    • 黑盒:ARAT-RL、EvoMaster BB、Restler、Schemathesis。
  • 实验设置:每个API重复测试30次,每次测试时长1小时,评估指标为代码覆盖率和故障检测数。

4. 实验结果
  • RQ1:与现有白盒工具对比

    • 代码覆盖率:平均从40.0%提升至47.3%,最高提升18%(session-service,从57.3%到75.7%)。
    • 统计显著性:5个API结果统计显著,平均效应量A^12=0.91\hat{A}_{12}=0.91A^12=0.91,4个API效应量达1.00(每次运行均优于基础版)。
    • 故障检测:平均检测故障数从51.8增至52.8,3个API显著提升。
  • RQ2:与黑盒工具对比

    • 平均覆盖率:扩展后的EvoMaster(Mongo)以52.7%排名第一,优于第二名EvoMaster WB(43.8%)。
    • 工具排名:在6个API中,Mongo在4个API中排名第一,整体平均排名1.5。
5. 结论与贡献
  • 研究贡献:提出新的NoSQL启发式方法、NoSQL数据生成技术,开源扩展EvoMaster(https://github.com/anonymousmongodb/fuzzing-nosql)。
  • 结论:新技术显著提升RESTful API测试的代码覆盖率和故障检测能力,未来可探索与强化学习结合。

关键问题

  1. 问题 :该研究提出的NoSQL启发式方法如何计算文档与过滤器的接近程度?
    答案 :通过计算NoSQL距离实现。对于返回空结果的过滤器F,对集合c中的每个文档d,基于过滤器中的条件(如eq、eq、eq、gt等)递归计算启发式分数Hd(F)H_d(F)Hd(F)(参考分支距离和归一化函数),最终集合c的NoSQL距离为所有文档分数的最小值,即Hc(F)=mind∈c{Hd(F)}H_c(F)=min _{d \in c}\left\{H_d(F)\right\}Hc(F)=mind∈c{Hd(F)}。

  2. 问题 :实验中使用了哪些API,其规模如何?结果显示代码覆盖率提升的具体表现是什么?
    答案:实验使用6个来自EMB corpus的JVM REST API,共324个端点、1051个源文件、84531行代码(LOC)。代码覆盖率提升方面,平均从40.0%提升至47.3%,最高提升18%(session-service),5个API结果统计显著,4个API每次运行均优于基础版EvoMaster。

  3. 问题 :与现有黑盒模糊测试工具相比,该研究的技术优势体现在哪里?
    答案:扩展后的EvoMaster(Mongo)平均代码覆盖率达52.7%,排名第一,优于所有黑盒工具(ARAT-RL、EvoMaster BB、Restler、Schemathesis)。在6个API中,Mongo在4个API中排名第一,整体平均排名1.5,较第二名EvoMaster WB(43.8%)高出8.9个百分点,尤其在处理MongoDB交互场景时优势明显。

总结

本文针对使用MongoDB的RESTful API测试难题,提出了一套增强的搜索式模糊测试技术。通过动态追踪数据库交互、计算NoSQL距离、直接插入数据等创新方法,显著提升了代码覆盖率和故障检测能力。实验表明,该技术在6个真实API上的表现优于现有白盒和黑盒工具,尤其在处理NoSQL数据库的动态特性时优势明显。

解决的主要问题

  • 现有测试工具对MongoDB等NoSQL数据库支持不足的问题;
  • 难以生成能触发特定数据库状态的测试用例的问题;
  • 只读API或复杂交互场景下的数据准备难题。

主要成果

  • 一套适用于MongoDB的测试生成技术,代码覆盖率最高提升18%;
  • EvoMaster工具的开源扩展,可直接应用于实际项目;
  • 为NoSQL数据库的API测试提供了新的研究思路。
相关推荐
EVERSPIN15 分钟前
分享低功耗单火线开关语音识别方案
人工智能·语音识别
说私域29 分钟前
从渠道渗透到圈层渗透:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径研究
人工智能·小程序·开源
黎燃34 分钟前
人工智能在语言学习中的实践:从 Duolingo 到自研系统的深度剖析
人工智能
中科米堆1 小时前
中科米堆CASAIM金属件自动3d测量外观尺寸三维检测解决方案
人工智能·3d·视觉检测
88号技师1 小时前
2025年6月最新SCI-灰熊脂肪增长优化算法Grizzly Bear Fat Increase-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
爱分享的飘哥1 小时前
第三十篇:AI的“思考引擎”:神经网络、损失与优化器的核心机制【总结前面2】
人工智能·深度学习·神经网络·优化器·损失函数·mlp·训练循环
正经教主2 小时前
【n8n】如何跟着AI学习n8n【03】:HTTPRequest节点、Webhook节点、SMTP节点、mysql节点
人工智能·学习·教程·工作流·n8n
飞哥数智坊2 小时前
AI编程实战:使用Trae从零开始实现写作助手的后端开发及前后端联调
人工智能·trae
阿男官官2 小时前
[Token]ALGM: 基于自适应局部-全局token合并的简单视觉Transformer用于高效语义分割, CVPR2024
人工智能·深度学习·transformer·语义分割
喵王叭2 小时前
【查漏补缺】机器学习典型算法
人工智能·算法·机器学习