2. 工業界REST API測試平臺案例分析

    接下來,本文將列舉和介紹目前業界主要的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測試中提供更多的信息,引導測試探索更多的程序行為。

學術界的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測試。

 Restler主要通過以下兩種方式生成API調用序列:

?通過接口描述文檔靜態分析請求參數依賴

    Restler Compiler提供對REST API Specification文檔的靜態分析結果,通過參數類型推斷請求之間的生產者-消費者關系(如下圖中POST請求返回的id信息和DELETE、GET和PUT請求的id參數存在生產者-消費者依賴),用于創建API調用序列。

?基于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進行通信。

本文將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測試技術

    隨著GPT-4.0GeminiClaude等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的參數約束和依賴提取,其在以下兩個方面具有相對于靜態分析的優勢:

1.對基于自然語言的接口描述信息的理解和提取(文檔信息提?。?/strong>

    靜態分析傾向于對結構化的文本進行分析建模,而接口文檔中包含了部分開發人員的自然語言的描述信息,它們描述了參數的含義和功能,LLM可以提取這些信息增強或者生成REST API的參數約束和依賴關系。

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%。

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。這種方法不僅可以提高測試效率,還可以幫助改善測試用例的全面性和準確性。

結語

    在現代化軟件架構中,API測試變得越來越重要,它不僅確保了單個服務能夠正常提供業務功能,還涉及對多個服務之間的通信和協作的質量保障。

    展望未來,我們期望相關從業者和研究者可以基于已有的API測試中具備價值的功能和設計,利用LLM強大的上下文理解和文本生成能力,提高API測試的智能化水平,改善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

文章轉自微信公眾號@CodeWisdom

#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費