python3測試工具開發(fā)快速入門教程10接口測試簡介

簡介

應(yīng)用程序編程接口(API Application Programming Interface)是在不同進(jìn)程,程序或系統(tǒng)之間的通信的代碼。 API通?;诳蛻魴C(jī)/服務(wù)器模型。有交互的地方都有接口。最常見的跨應(yīng)用交互協(xié)議是HTTP+JSON, 其次是web service(比較笨重)。最常見的后臺協(xié)議有thrift、dubbo及大量的私有協(xié)議。

  • 接口測試是保證軟件產(chǎn)品質(zhì)量的最重要的軟件測試之一。
  • 接口測試是進(jìn)行評估的系統(tǒng)或組件是否正確地傳遞數(shù)據(jù)及互相正確的控制。
  • 接口測試通常在測試和開發(fā)團(tuán)隊(duì)都進(jìn)行。
  • 接口測試通常在應(yīng)用或功能開發(fā)的初期檢驗(yàn)?zāi)K間調(diào)用的正確性和友好性。

分類

  • 范圍:內(nèi)部、外部、第三方等
  • 協(xié)議分類: HTTP、thrift、DUBBO、FTP、SSH、TELNET等。
  • 注意數(shù)據(jù)庫、文件等也是接口

接口在近幾年快速增長。Gartner 2014年的接口使用調(diào)查

  • 超過80%的聲稱他們已停止使用一個(gè)或多個(gè)API,因?yàn)樗鼈傿UG太多。
  • API問題的不良影響: ?開發(fā)延期 ?增加客戶支持服務(wù)成本 ?上市時(shí)間推遲 ?測試延遲 ?業(yè)務(wù)損失
  • 90%的受訪者表示一個(gè)或多個(gè)API未能滿足其期望。
  • 68%遇到了可靠性或功能問題。
  • 42%遇到過安全問題。
  • 74%遇到的性能問題。
  • 使用API遇到的最嚴(yán)重的完整性問題:
圖片.png
圖片.png

?61%的可靠性 ?22.2%的安全 ?16.7%的性能

某公司模塊之間通信有seq,以免通信亂序。seq約定64位整數(shù),會存入mysql數(shù)據(jù)。某工程師加班誤把unit64改成了unit32。系統(tǒng)上線運(yùn)行一定時(shí)間后,出現(xiàn)莫名其妙丟失一些老數(shù)據(jù)。

如果有做接口測試,針對0,2的64次方等值進(jìn)行,就不會出現(xiàn)這種問題。功能測試由于看不到該seq,自然無法驗(yàn)證,當(dāng)然長時(shí)間的大容量性能測試也會發(fā)現(xiàn)此問題。

某公司性能測試發(fā)現(xiàn)大量扣費(fèi)時(shí)有不正確。經(jīng)常是節(jié)假日優(yōu)惠時(shí)忘記扣費(fèi)。該問題在功能測試漏測。也沒有進(jìn)行接口測試。大量這樣類似的bug堆積,導(dǎo)致性能測試延期。

某公司和合作方對接話單始終無法成功,后面用tcpdump抓包及查看日志發(fā)現(xiàn)是對方少傳了一個(gè)計(jì)量單位字段。

常見問題

  • 錯(cuò)誤條件處理不好
  • 無用的flag
  • 缺失或者重復(fù)的功能
  • 可靠性問題,比如有時(shí)難以連接或獲取響應(yīng)。
  • 安全問題
  • 多線程問題
  • 性能問題,比如用戶多時(shí)響應(yīng)時(shí)間很高。
  • 不合適的錯(cuò)誤碼或告警。
  • 參數(shù)處理錯(cuò)誤
  • 響應(yīng)數(shù)據(jù)格式錯(cuò)誤

接口測試關(guān)注的內(nèi)容

準(zhǔn)備

  • API的對象是誰?
  • API的使用環(huán)境
  • 要測試哪些方面
  • 測試難點(diǎn)是什么
  • 測試優(yōu)先級
  • 正常及異常情況
  • 通過和失敗的定義及預(yù)期輸出和事件流
  • 交互的API有哪些

接口測試工具

  • 商業(yè)工具: Loadrunner(本質(zhì)是性能測試工具,不推薦使用)、soapui等
  • 開源或免費(fèi)工具: Jmeter(本質(zhì)是性能測試工具,不推薦使用)、curl、 soapui、 POSTMAN、 HTTPie等
  • 自行開發(fā)工具:Python、ruby、perl等腳本語言因?yàn)檎{(diào)試方便,編寫相對簡單成為首選。比如Python的requests、urllib、urllib2等庫。


    圖片.png

選擇原則:費(fèi)用、難度、協(xié)議類型、序列化、后臺執(zhí)行(很重要)、維護(hù)成本等。


圖片.png

cURL

cURL是一個(gè)利用URL語法在命令行下工作的文件傳輸工具,1997年首次發(fā)行。它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統(tǒng),習(xí)慣稱cURL為下載工具。cURL還包含了用于程序開發(fā)的libcurl。

協(xié)議支持: cURL支持的通信協(xié)議有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

環(huán)境準(zhǔn)備:Linux和MAC一般自帶curl;Windows安裝git bash可以使用curl

GET、POST

   $ curl https://curl.haxx.se
   $ curl --data "key1=value1&key2=value2" http://httpbin.org/post

下載文件

$ curl https://curl.haxx.se/download/curl-7.52.1.tar.gz

HTTPie

HTTPie是使CLI與Web服務(wù)的交互盡可能人性化的命令行HTTP客戶端。它提供了簡單的http命令,使用簡單自然的語法發(fā)送任意HTTP請求,并顯示彩色輸出。 HTTPie可用于測試,調(diào)試和與HTTP服務(wù)器交互。

特點(diǎn):直觀的語法;格式化和色彩化的終端輸出;內(nèi)置 JSON 支持;支持上傳表單和文件 HTTPS、代理和認(rèn)證;任意請求數(shù)據(jù);自定義頭部;持久性會話;類 Wget 下載;支持 Python 2.6, 2.7 和 3.x 支持 Linux, Mac OS X 和 Windows;插件;文檔。

環(huán)境準(zhǔn)備: # pip install --upgrade httpie

GET、POST

   $ http https://httpie.org/
   $ http -f POST http://httpbin.org/post key1=value1 key2=values

下載文件

$ http -d https://github.com/jakubroztocil/httpie/archive/master.tar.gz

參考資料
https://httpie.org
https://github.com/jakubroztocil/httpie

其他工具

RESTED為Firefox插件,可以通過瀏覽器發(fā)送HTTP請求,并展示結(jié)果。

安裝Firefox,進(jìn)入工具-附加組件-擴(kuò)展,安裝RESTED插件

image.png

Postman為Firefox插件,可以通過瀏覽器發(fā)送HTTP請求,并展示結(jié)果。
環(huán)境準(zhǔn)備:安裝Chrome,進(jìn)入工具-擴(kuò)展程序-獲取更多擴(kuò)展程序,安裝Postman插件

圖片.png

Requests做HTTP接口測試

環(huán)境準(zhǔn)備:pip install requests

GET

import requests

r = requests.get('http://httpbin.org/get')
result = r.json()
print(result['origin'])
assert('.' in result['origin'])

POST

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
result = requests.post("http://httpbin.org/post", data=payload)
assert('headers' in result.json())
assert(result.json()["url"] == http://httpbin.org/post)

后記

這里僅僅是對接口測試做了個(gè)簡單介紹.
了解接口的開發(fā),更容易做接口模擬和接口測試.參考:使用python3和flask構(gòu)建RESTful API(接口測試服務(wù))
接口測試測試不僅僅只有HTTP, struct,socket等模塊在接口測試的應(yīng)用中也相當(dāng)重要.
用loadruner, jmeter做接口是通常屬于大炮打蚊子,簡單的問題復(fù)雜化的不當(dāng)行為.很多培訓(xùn)機(jī)構(gòu)的老師根本沒入門,喜歡這么干.
python很方便訪問其他語言,在當(dāng)今多語言開發(fā)的情況下具有得天獨(dú)厚的優(yōu)勢,ctypes,jython都比較重要.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容