猜你喜歡
更多>本章介紹應(yīng)用程序編程接口(API application programming interface)和 API測試。API測試是軟件測試活動(dòng)的一個(gè)重要方面(在典型的基于服務(wù)的軟件開發(fā)過程中)。它包括測試應(yīng)用程序的業(yè)務(wù)組件,通常表示為API,然后再開發(fā)UI。一個(gè)微服務(wù)處理單一需求的API。
API對(duì)應(yīng)用層進(jìn)行抽象,并提供資源供客戶端使用。API是任何典型的Web應(yīng)用、多層Web應(yīng)用或移動(dòng)應(yīng)用的骨干,它隱藏了系統(tǒng)的內(nèi)部細(xì)節(jié),例如如何為消費(fèi)者處理在線支付。
(資料圖)
API是應(yīng)用程序的中間層,它與后端打交道,通常通過ORM(對(duì)象關(guān)系映射Object-Relational Mapping)或其他工具,或直接與數(shù)據(jù)庫和前端打交道。API在后端和前端之間充當(dāng)代理。API根據(jù)用戶的要求/請(qǐng)求從后端讀取數(shù)據(jù),并將響應(yīng)發(fā)送到前端。
沒有前端的API提供服務(wù),例如支付網(wǎng)關(guān)、天氣預(yù)報(bào)等。
上圖顯示了典型的基于服務(wù)的軟件應(yīng)用結(jié)構(gòu)。它在有數(shù)據(jù)庫,中間層的API,以及從瀏覽器或移動(dòng)應(yīng)用程序發(fā)出的請(qǐng)求。
微服務(wù)是處理單一需求的API,該服務(wù)可以獨(dú)立運(yùn)作/部署。微服務(wù)是定義典型軟件應(yīng)用程序的業(yè)務(wù)邏輯的API,實(shí)現(xiàn)快速開發(fā)和可擴(kuò)展的軟件開發(fā)理念。
API測試涉及到業(yè)務(wù)工作流程。這可能被歸類為黑盒測試,但從技術(shù)上講,它更像是一種灰盒測試,測試人員簡單地了解一些內(nèi)部實(shí)施的細(xì)節(jié),但不深入。他們通過對(duì)API內(nèi)部使用的代碼路徑或邏輯的技術(shù)方面的了解,單獨(dú)測試API。
API有約定的格式,比如JSON/XM)。它接受給定格式和所需參數(shù)的請(qǐng)求,并提供規(guī)定格式的正確響應(yīng)。這種測試直接與應(yīng)用服務(wù)器打交道。它可能涉及測試應(yīng)用程序的單個(gè)組件或組合幾個(gè)組件。標(biāo)準(zhǔn)測試技術(shù)適用于測試API時(shí),如等價(jià)類、邊界值分析、大請(qǐng)求、無效請(qǐng)求、未授權(quán)請(qǐng)求等。
API測試需要特定的工具,如httpie、curl、火狐和Chrome插件restclient、Postman和RestAssured等,它們支持請(qǐng)求方法和用于檢索API的協(xié)議。常用的協(xié)議是HTTP(S)。測試人員用所需的請(qǐng)求方法鍵入U(xiǎn)RL,在API測試工具中以與API消費(fèi)者相同的方式請(qǐng)求參數(shù),然后在應(yīng)用程序的上下文中驗(yàn)證響應(yīng)/輸出。
測試計(jì)劃或用例是必要的,就像用戶工作流測試一樣。測試計(jì)劃有輸入,預(yù)期輸出,和前提條件等。
上述段落中的概念將在以后的章節(jié)中更詳細(xì)地介紹。
API測試使用之前發(fā)現(xiàn)功能/性能/安全/(更多類型)錯(cuò)誤的最快方法。
在軟件開發(fā)過程中,早期測試的投資回報(bào)率較高。由于API測試具有更大的代碼/功能覆蓋面,與前端測試相比,測試的效率往往要高很多。在單個(gè)API層面上識(shí)別錯(cuò)誤的速度更快,因?yàn)榕c在前端層面上發(fā)現(xiàn)錯(cuò)誤相比,復(fù)雜性更低,發(fā)現(xiàn)錯(cuò)誤的可能性更高。
不測試API和在前端層面測試只會(huì)使測試更加復(fù)雜和乏味,而且通常需要更多的測試時(shí)間和資源。只測試前端是容易出錯(cuò)。由于前端的變化頻率往往比后端/中間層高得多,失敗率也往往更高。因此識(shí)別錯(cuò)誤是后端/API的錯(cuò)誤還是前端的錯(cuò)誤是很耗時(shí)的。
有效地實(shí)施API測試可以幫助減少測試工作,節(jié)省時(shí)間和成本。
API對(duì)消費(fèi)者/前端的請(qǐng)求做出響應(yīng)。響應(yīng)應(yīng)該是快速的。API不應(yīng)允許未經(jīng)授權(quán)的用戶訪問。當(dāng)并發(fā)用戶訪問API時(shí),它應(yīng)該在規(guī)定的時(shí)間內(nèi)響應(yīng)。對(duì)API的無效請(qǐng)求應(yīng)適當(dāng)處理,并應(yīng)返回錯(cuò)誤信息。API應(yīng)該遵守當(dāng)?shù)氐姆?。如果API是作為一種服務(wù)提供的,那么它應(yīng)該保持與消費(fèi)者的合同,參數(shù)不應(yīng)改變,等等。
61%的可靠性
22.2%的安全性
16.7%的性能
以下是API測試的類型:
解決API的功能問題,例如按照業(yè)務(wù)要求返回響應(yīng)。涉及控制流和數(shù)據(jù)流等。
發(fā)送和返回都符合接口設(shè)計(jì);正確地實(shí)現(xiàn)了功能,比如能創(chuàng)建或刪除用戶,數(shù)據(jù)庫和緩存數(shù)據(jù)處理正確等。
參數(shù):參數(shù)的邊界值和等價(jià)類劃分;組合可選參數(shù);參數(shù)為空字符串、null等特殊值;參數(shù)長度;參數(shù)類型;sql注入;包含特殊符號(hào)和編碼的參數(shù)。
多次重復(fù)測試返回結(jié)果正常且一樣。由于API是非常松散的耦合,亂序、丟失、重復(fù)調(diào)用如何應(yīng)對(duì)?競爭和加鎖的情況如何處理?時(shí)序與生命周期特別重要。
重復(fù)添加或刪除用戶,不會(huì)對(duì)數(shù)據(jù)庫和緩存等造成不良影響,提示的錯(cuò)誤碼與文檔一致。
解決負(fù)載下的響應(yīng)時(shí)間。當(dāng)在同一時(shí)間點(diǎn)上對(duì)給定的API提出多個(gè)請(qǐng)求時(shí),API應(yīng)該按照服務(wù)提供商和消費(fèi)者之間商定的SLA定義,在允許的時(shí)間范圍內(nèi)返回響應(yīng)。 需要考慮多個(gè)API的組合,以及多個(gè)微服務(wù)共享服務(wù)器、DB等情況。
局域網(wǎng)內(nèi)單次調(diào)用在50ms內(nèi)完成、在1000并發(fā)的情況下最大相應(yīng)時(shí)間不超過60ms、資源占用正常等。是否有峰值,過量是否會(huì)產(chǎn)生不良效果。資源消耗與容量等。重點(diǎn)關(guān)注響應(yīng)時(shí)間、吞吐量、并發(fā)數(shù)、可靠性、 cpu、io、內(nèi)存、gpu、網(wǎng)絡(luò)等資源占用。
解決了通過獲取會(huì)話、參數(shù)篡改等方式對(duì)API進(jìn)行未授權(quán)訪問的問題。API不應(yīng)允許任何匿名/未經(jīng)授權(quán)的用戶通過自身獲得數(shù)據(jù)的訪問。
蠕蟲病毒和其他負(fù)載攻擊。
無效的認(rèn)證。
SQL注入。
加密級(jí)別不夠。傳遞和存儲(chǔ)的敏感數(shù)據(jù)和日志需要加密,并且難以破解。
未經(jīng)授權(quán)的訪問控制。 黑白名單:非授權(quán)的主機(jī)不能訪問接口
云問題。如果API位于云端,安全問題可能更嚴(yán)重,因?yàn)橥ǔ?duì)物理網(wǎng)絡(luò)安全的有效控制很少。
意外的誤用。調(diào)用方非預(yù)期濫用、文檔不佳或編程錯(cuò)誤等造成,也可能是惡意攻擊。
解決請(qǐng)求中的無效或故障數(shù)據(jù)。API應(yīng)該相應(yīng)地、及時(shí)地做出響應(yīng)。如果數(shù)據(jù)是無效的,API應(yīng)該用適當(dāng)?shù)腻e(cuò)誤代碼/消息來回應(yīng)。
雙向通信能否正常完成。尤其要考慮丟包,延遲、2G等差網(wǎng)絡(luò)場景??梢允褂胠inux的防火墻及tc命令或facebook的ATC框架模擬。
解決不正確的輸入數(shù)據(jù),并以適當(dāng)?shù)腻e(cuò)誤代碼和消息進(jìn)行響應(yīng)。通常錯(cuò)誤的產(chǎn)生是由于參數(shù)傳遞不正確(例如,不按順序)或超出范圍。
與基礎(chǔ)設(shè)施有關(guān),這是DevOps的常規(guī)工作,但API在這種情況下也會(huì)被測試。這主要是在微服務(wù)架構(gòu)中,特定的API被更頻繁地使用。API應(yīng)該是可擴(kuò)展的,因?yàn)椴l(fā)訪問將更加頻繁,而且API應(yīng)該一直可用。經(jīng)常在性能測試中驗(yàn)證。
屬于API被消費(fèi)的地方管轄。例如,如果API要求提供個(gè)人信息(手機(jī)號(hào)碼、出生城市等),那么這些信息應(yīng)該由供應(yīng)商保護(hù),不允許任何試圖獲取這些信息的行為,并且應(yīng)該保持審計(jì)日志。
許多行業(yè)要求軟件必須符合各種法規(guī)和標(biāo)準(zhǔn)。法規(guī)可能來自政府和準(zhǔn)政府實(shí)體,如FDA或EPA。標(biāo)準(zhǔn)可能來自于國際組織或行業(yè)團(tuán)體。例如,如果軟件處理信用卡或借記卡,它必須符合PCI標(biāo)準(zhǔn)。以任何方式處理健康信息的系統(tǒng)必須符合HIPAA標(biāo)準(zhǔn)。API可能受制于服務(wù)水平協(xié)議(SLA)或其他技術(shù)協(xié)議。如果不能滿足這些協(xié)議,可能會(huì)給組織帶來大量的懲罰或罰款。
意味著服務(wù)提供者總是保持相同的請(qǐng)求有效載荷。這對(duì)服務(wù)提供者的業(yè)務(wù)至關(guān)重要。如果有效載荷被改變,那么消費(fèi)者請(qǐng)求將開始失敗,這將是業(yè)務(wù)的損失。即穩(wěn)定性。
你的API是否依賴于其他API?當(dāng)這些改變時(shí),你將如何知道?API的數(shù)據(jù)模式是至關(guān)重要的。即使是對(duì)模式的一個(gè)小的改變--例如,將一個(gè)整數(shù)改為實(shí)數(shù)--也可能導(dǎo)致缺陷和失敗。
API通常是由不同的小組開發(fā)的。試圖確保所有參與者的時(shí)間表是一致的,一個(gè)小組做了一些改變,然后這些改變就像海嘯一樣波及所有的開發(fā)小組。
API在生產(chǎn)中出現(xiàn)故障,你將如何知道?當(dāng)(以及如果)外部組織停止使用你的API時(shí),你是否能夠找出原因和發(fā)生的時(shí)間?
API的創(chuàng)建、查詢、更新和刪除等正確。數(shù)據(jù)庫事務(wù)、大量數(shù)據(jù)、數(shù)據(jù)遷移等。
邊界值和API組合場景等。
業(yè)務(wù)組合:比如扣費(fèi)需要綜合考慮閑時(shí)、忙時(shí)、節(jié)假日、集團(tuán)用戶優(yōu)惠等各種因素。注意接口的水平和垂直組合。
比如SNMP協(xié)議與其他廠商的互通,私有部分的實(shí)現(xiàn)。又如私有協(xié)議。
你的API有可能需要在不同的層面上工作。它們可能被直接調(diào)用,也可能被其他API調(diào)用,而這些API又被其他API調(diào)用,再由ESB控制。
文檔必須進(jìn)行正確性測試。由于大量的開發(fā)者需要與你的API進(jìn)行交互,文檔必須為所有的開發(fā)者提供足夠的信息。而文檔的質(zhì)量是至關(guān)重要的。文檔中的數(shù)據(jù)順序、數(shù)據(jù)類型、格式、甚至大寫字母都是至關(guān)重要的,必須正確。
軟件開發(fā)者是否能真正學(xué)習(xí)和理解如何成功地使用API?是否容易調(diào)用、簡潔、語法一致等?
使API的人很可能想用他們自己的API層來測試它。這可能需要特殊的環(huán)境(沙箱)供他們發(fā)揮,。這些測試是否正確,而不干擾生產(chǎn)環(huán)境?
甚至可以考慮使用mock偽造返回。
在軟件開發(fā)的早期階段發(fā)現(xiàn)bug是有好處的。在實(shí)施API之前,在后端找到一個(gè)bug,可以節(jié)省開發(fā)API的時(shí)間。在中間層/API中發(fā)現(xiàn)錯(cuò)誤,可以節(jié)省前端開發(fā)的時(shí)間。在產(chǎn)品交付的軟件開發(fā)模式中,越晚測試,測試工程師在緊迫的期限內(nèi)找到bug就越復(fù)雜,越有挑戰(zhàn)性。
在業(yè)務(wù)層找到bug有利于交付高質(zhì)量的產(chǎn)品。如果API測試得足夠好,對(duì)產(chǎn)品開發(fā)團(tuán)隊(duì)有明顯的好處。
以下是做API測試的幾個(gè)優(yōu)勢。
應(yīng)用程序編程接口(API Application Programming Interface)是不同的進(jìn)程、程序和/或系統(tǒng)之間進(jìn)行通信的代碼。API經(jīng)常被用于C/S架構(gòu),一個(gè)進(jìn)程向其他進(jìn)程提供某種功能。它支持兩個(gè)獨(dú)立軟件系統(tǒng)之間的通信和數(shù)據(jù)交換。API起源于遠(yuǎn)程過程調(diào)用(RPC remote procedure call)。
API實(shí)際上有兩種不同的類型。本地API通常用于與操作系統(tǒng)、數(shù)據(jù)庫和I/O或其他在本地處理器上執(zhí)行工作的進(jìn)程進(jìn)行交互。例如打開文件,分配堆內(nèi)存,在數(shù)據(jù)庫上啟動(dòng)事務(wù),在屏幕上顯示數(shù)據(jù),或者捕獲鼠標(biāo)動(dòng)作,他們?cè)诰幊陶Z言中進(jìn)行API調(diào)用來執(zhí)行任務(wù)。通常程序員甚至不知道他們正在調(diào)用各種API,因?yàn)榫幊陶Z言往往隱藏了直接調(diào)用。
但一般所說的API是對(duì)遠(yuǎn)程處理的請(qǐng)求的實(shí)現(xiàn)。API實(shí)現(xiàn)了指定了本地進(jìn)程請(qǐng)求從遠(yuǎn)程位置完成任務(wù)的方式,并定義了該任務(wù)的結(jié)果返回給本地進(jìn)程的方式,是一種協(xié)議。協(xié)議中包括指定要完成的任務(wù)的技術(shù),數(shù)據(jù)傳遞給遠(yuǎn)程進(jìn)程的方式,信息實(shí)際傳達(dá)給遠(yuǎn)程位置的方式,結(jié)果傳遞回來的方式,以及解釋這些結(jié)果的方式。
API和SDK的區(qū)別
python高效web API開發(fā)庫FastAPI快速入門教程1簡介
python高效web API開發(fā)庫FastAPI快速入門教程2路徑參數(shù)和類型及接收json數(shù)據(jù)
python筆試面試項(xiàng)目實(shí)戰(zhàn)2020百練12-使用requests做HTTP接口測試
python3測試工具開發(fā)快速入門教程10接口測試簡介
使用jython進(jìn)行dubbo接口及ngrinder性能測試
接口測試面試題
python工具庫介紹-dubbo:通過telnet接口訪問dubbo服務(wù)
接口協(xié)議工具thrift1快速入門
使用python3和flask構(gòu)建RESTful API(接口測試服務(wù)與mockserver工具)
標(biāo)簽:
要聞
更多>終極斗羅15:家丑不可外揚(yáng),傳靈塔卻反其道而行之
新化:洋溪鎮(zhèn)撬動(dòng)行業(yè)協(xié)會(huì)力量,助推農(nóng)村建筑安全、耕地保護(hù)和控違拆違工作良性開展
嘉峪關(guān)酒泉機(jī)場工程順利通過行業(yè)驗(yàn)收 計(jì)劃9月7日復(fù)航
3連板大連熱電(600719.SH):擬籌劃的資產(chǎn)重組事項(xiàng)存在不確定性
昊華科技(600378)周評(píng):本周跌3.29%,主力資金合計(jì)凈流出1578.27萬元
借力AI賦能全球創(chuàng)作者 萬興科技攜Wondershare Filmora亮相創(chuàng)作