色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于應用程序編程接口(API)的自動化測試(下)

上海控安 ? 來源:上海控安 ? 作者:上海控安 ? 2023-09-20 17:16 ? 次閱讀

作者 |黃杉華東師范大學軟件工程學院博士

蘇亭 華東師范大學軟件工程學院教授

版塊 |鑒源論壇 · 觀模

社群 |添加微信號TICPShanghai”加入“上海控安51fusa安全社區”

上文“基于應用程序編程接口(API)的自動化測試(上)”中,系統介紹了應用程序編程接口(API)的概念及其在軟件開發中的作用與重要性,重點分享自動化API測試的發展歷程與測試對象。

本文將深入剖析單元測試、模糊測試等當前主流的自動化API測試形式與技術。

04

自動化API測試形式與技術

對API進行自動化測試一般使用單元測試(Unit testing)的測試形式,這也是當下敏捷開發的重要組成部分。隨著模糊測試的興起,針對API的模糊測試(API fuzzing)成為當下流行的API測試技術。下面將從單元測試和模糊測試兩部分對自動化API測試形式和技術進行介紹。

4.1單元測試(Unit Testing)

單元測試(Unit Testing)又稱為模塊測試,是一種測試形式(或稱測試框架),它針對程序模塊(軟件設計的最小單位)來進行正確性檢驗的測試工作。程序單元是應用的最小的測試部件。在過程化編程中,單元測試由單個API或者多個API組合完成;對于面向對象編程,單元測試由單個或者多個類的方法以及對象之間的交互操作完成。單元測試主要由開發人員手動編寫(如Junit、pytest),也可以通過一些自動測試用例生成技術(如Randoop[6]、GraphFuzz[4])完成。

單元測試的一般流程為:(1)編寫或生成單元測試用例,其中包含測試環境初始化、調用被測API完成相應功能、檢查調用結果;(2)執行單元測試用例,收集執行結果,統計成功的測試用例和失敗的測試用例,失敗的測試用例表明API實現中存在錯誤或缺陷。無論是函數級API還是RESTful API,使用單元測試這種測試形式都十分有效。

wKgaomUKuGSAD-nOAABYbYduBbU190.png

圖 1 Junit單元測試示例

如圖 1所示,這是一個使用Junit單元測試框架編寫的Java單元測試用例。“@Test”表示該函數執行一個單元測試用例,其中首先初始化一個AdderImpl對象,并調用該對象的add方法,傳入1和2這兩個參數,最終判斷add方法的返回結果是否為3。如果結果不為3,則該單元測試失敗,表示add方法實現出錯,反則成功。

4.2API模糊測試 (Fuzz Test)

模糊測試(Fuzz test)是一種自動化測試技術,其核心組件模糊器(Fuzzer)可以基于語法規則直接生成測試用例,也可以基于已有測試用例進行編譯生成測試用例。由于模糊器可以生成多樣的測試用例,這些測試用例相比于開發人員編寫的測試更有可能觸發程序中的邊界條件和更多樣的測試場景,因此模糊測試在測試軟件魯棒性和軟件漏洞挖掘中非常有效。

針對API的模糊測試流程和一般針對二進制程序的模糊測試流程相同:模糊器從種子庫中選取種子進行變異或者直接根據語法規則生成測試用例,執行測試用例,監測執行過程并檢查執行結果,當執行過程中出現崩潰或者執行結果與預期不符,則認為找到了潛在的API錯誤。

4.2.1 針對函數級API的模糊測試

LLVM項目中的Libfuzzer[11]是一款進程內的由覆蓋率引導的進化型模糊引擎。它通過讀取用戶提供的種子(特定的程序輸入或者API調用參數),對種子進行變異生成新的測試用例輸入并傳遞給由用戶編寫的測試驅動,從而實現API模糊測試。

wKgZomUKuGWAE9h-AAAa6KeuqSc408.png

圖 2 Libfuzzer測試驅動示例

圖 2是一個Libfuzzer測試驅動示例,Libfuzzer生成的測試輸入將通過Data參數傳入測試驅動,用戶則會將該測試輸入在經過適當處理后傳遞給被測API,從而對API進行測試。值得注意的是,在Libfuzzer的測試驅動中,開發人員同樣可以編寫條件檢查來達到單元測試的效果。

Libfuzzer初步解決了測試輸入生成,而對API的模糊測試難點在于如何觸發更深層次的API行為。為了更高效地對函數級API進行測試,研究人員們對如何高效地自動化生成測試驅動進行了研究,即如何自動化地構造有效的API調用序列和API執行環境和程序片段。

FUDGE[2]是一個通過對代碼切片進行合成來生成模糊測試候選驅動的工具。FUDGE的核心見解是,以有效且有用的方式執行庫函數的模糊測試驅動可以通過代碼庫中的現有代碼片段合成。FUDGE的整體流程如圖 3所示,在完成模糊測試驅動生成后,FUDGE會將生成的驅動交給開發人員進行評估。

wKgaomUKuGWAAQdeAAA96QlDYvA184.png

圖 3 FUDGE整體流程

FuzzGen[5] 利用整個系統分析來推斷庫的接口并專門為該庫合成模糊測試驅動。FuzzGen不需要開發人員的參與,并且可以廣泛應用于多種編程庫。FuzzGen的核心思想是系統中的現有代碼在多個方面利用編程庫。如圖 4所示,它從系統中已有使用庫的代碼出發,通過對整個系統進行分析,先確定哪些是API,再從控制流和數據流兩方面整理出抽象API依賴圖(A2DG)。這個過程需要確定每個參數的可能值和類型,并分析參數之間的依賴關系。最后,基于依賴圖生成libFuzzer的樁代碼,從而進行不需人工干預、能較好地平衡寬度和深度的模糊測試。

wKgZomUKuGaASw6EAAEun4EbbRM769.png

圖 4 FuzzGen的核心思想示意圖

GraphFuzz[4]則是通過將整個API調用序列表示為一個數據流圖,然后在數據流圖中進行給定的變異操作進行API調用序列構造。圖 5列舉了三種GraphFuzz支持的數據流圖變異操作:刪除、插入和串聯。

wKgaomUKuGeAE78rAABNm2HbAVk764.png

圖 5 GraphFuzz支持的部分變異操作

除了泛用性的針對函數級API的模糊測試方法的研究工作外,還有特別針對系統調用的模糊測試方法的研究工作,這些研究工作都著力于解決如何構造API調用能夠探索更深層次的API使用場景這一挑戰。

4.2.2 針對RESTful API的模糊測試

早期Chakrabarti[3]等人提出了黑盒的、基于規范的RESTful API測試方法,其中測試用例需要使用一種基于XML的可擴展測試規范語言進行手工構造。但手工構造測試用例需要較多的人工開銷,后來的工作通過從OpenAPI或者Swagger規范中提取RESTful API的接口信息,從而實現了測試用例的自動化生成。

EvoMaster[8]是一個使用進化算法來生成RESTful API測試用例的基于搜索的模糊測試工具,這也是一款完全自動化的黑盒測試工具。它在測試RESTful服務內部更深層次的邏輯方面更有效,因為它可以搜集和使用有關服務目標的更多信息來指導測試用例生成。

RESTler[1]是第一個有狀態基于廣度優先探索的RESTful API模糊測試器。RESTler 通過分析云服務的 API 規范,生成請求序列并自動調用云服務的API對其測試。RESTler首先會通過讀取Swagger接口文檔(圖 6給出了Swagger接口文檔的示例)對API返回結果之間的依賴關系進行推斷,然后生成合法的API調用序列。然后,RESTler會根據執行API調用序列過程中服務器返回的狀態碼來修改原有的API調用序列,使其避免生成無效的API調用序列。

wKgZomUKuGeAEbLvAAEk4DKy3T0078.png

圖 6 Swagger接口文檔示例

05

總結

自動化API測試有較長的歷史,其自身也在不斷演化進步。針對函數級API的自動化測試在泛用方法研究的基礎上,目前也出現了一些針對特殊編程語言和特殊API場景的研究,如針對Rust library和深度學習庫(PyTorch、TensorFlow)的自動化測試方法研究。針對RESTful API的自動化測試也是繼SOAP測試之后出現的web 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. D

[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

    文章

    208

    瀏覽量

    26905
  • 接口
    +關注

    關注

    33

    文章

    8575

    瀏覽量

    151021
  • API
    API
    +關注

    關注

    2

    文章

    1499

    瀏覽量

    61964
  • 編程
    +關注

    關注

    88

    文章

    3614

    瀏覽量

    93686
收藏 人收藏

    評論

    相關推薦

    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>方法

    什么是自動化測試框架?

    同一個應用程序的不同模塊上工作時,以及當我們希望避免每個開發人員實現自己的自動化方法的情況,需要一個統一的標準測試自動化框架。
    的頭像 發表于 11-03 10:33 ?4344次閱讀

    使用Postman成功實現API測試自動化的最佳實踐

      API 測試自動化支持兩個獨立軟件系統之間的通信和數據交換。實現 API 的軟件系統包含可由另一個軟件系統執行的功能/子例程。它通過增加測試
    的頭像 發表于 06-20 10:19 ?927次閱讀

    使用Postman成功實現API測試自動化的最佳實踐

      API 測試自動化支持兩個獨立軟件系統之間的通信和數據交換。實現 API 的軟件系統包含可由另一個軟件系統執行的功能/子例程。它通過增加測試
    的頭像 發表于 07-05 10:46 ?952次閱讀

    使用Postman成功實現API測試自動化的最佳實踐

    API代表應用程序編程接口,用于通過使用任何通信模式來平滑兩個不同應用程序之間的交互。每次您在智能手機上查看天氣或火車時間時,您都在使用
    的頭像 發表于 12-08 15:01 ?668次閱讀
    使用Postman成功實現<b class='flag-5'>API</b><b class='flag-5'>測試</b><b class='flag-5'>自動化</b>的最佳實踐

    跨平臺移動應用程序測試自動化框架確保質量與速度

      隨著市場上推出的移動應用程序數量不斷增加,測試工程師努力在移動應用程序在在線市場上發布之前滿足所有測試用例。在現實世界中,它們總是悄悄潛入,并且經常重新出現,即使使用最佳的手動
    的頭像 發表于 12-09 14:21 ?725次閱讀

    測試自動化中的Python

      用于測試編程需要與開發應用程序編程不同的方法。如果你想要一種專門用于測試編碼的簡單而精簡的語言,Python 是一個不錯的選擇。Py
    的頭像 發表于 12-09 14:53 ?823次閱讀

    如何自動化測試你的接口

    不知道大家的項目是否都有對接口API進行自動化測試,反正像我們這種小公司是沒有的。由于最近一直被吐槽項目質量糟糕,只能研發自己看看有什么接口
    的頭像 發表于 04-07 15:29 ?1244次閱讀
    如何<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>你的<b class='flag-5'>接口</b>?

    什么是自動化測試框架

    自動化測試框架,即是應用于自動化測試所用的框架。按照框架的定義,自動化測試框架要么是提供可重用的
    發表于 04-18 14:44 ?894次閱讀

    基于Raspberry PI的應用程序的典型場景家庭自動化

    電子發燒友網站提供《基于Raspberry PI的應用程序的典型場景家庭自動化.zip》資料免費下載
    發表于 06-13 11:05 ?0次下載
    基于Raspberry PI的<b class='flag-5'>應用程序</b>的典型場景家庭<b class='flag-5'>自動化</b>

    接口自動化測試流程講解 企業接口自動化測試步驟

    接口自動化測試是指通過編寫腳本或使用自動化工具,對軟件系統的接口進行測試的過程。
    發表于 07-28 14:54 ?2226次閱讀
    <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)的概念及其在軟件開發中的作用與重要性,重點分享自動化API
    的頭像 發表于 09-01 11:17 ?627次閱讀
    主站蜘蛛池模板: 久久精品亚洲精品国产欧美| 香蕉精品国产高清自在自线| 国产免费人成在线看视频| 在线 无码 中文 强 乱| 手机在线播放成人亚洲影院电影| 久久99精品AV99果冻| 国产不卡无码高清视频| 2019天天射干网站| 亚洲欧美日韩一级特黄在线| 色翁荡熄月月| 人妻免费视频公开上传| 蜜桃成人在线| 黑人性xxx| 国产野外无码理论片在线观看| 苍井空小公主qvod| WWW亚洲精品久久久无码| 最近的2019中文字幕国语完整版| 亚洲 自拍 欧洲 视频二区| 日本大尺码喷液过程视频| 亲嘴扒胸摸屁股视频免费网站| 久久天天婷婷五月俺也去| 久久国产高清视频| 久久精品99国产精品日本| 九九免费的视频| 久草在线精彩免费视频| 久久久性色精品国产免费观看| 久久99re2在线视频精品| 久久久久久久电影| 浪小辉军警服务员VIDEOS| 免费观看男生桶美女私人部位| 免费被靠视频动漫| 强奷表妺好紧2| 无人区国产片| 一个人在线观看免费视频| 自拍 偷拍 亚洲 经典| 99视频精品国产在线视频| 俄罗斯12x13x处| 国产在线精品亚洲观看不卡欧美| 紧致肉肉高h| 欧美视频 亚洲视频| 乌克兰女人与动ZOZO|