欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python進(jìn)行接口測(cè)試及類(lèi)型介紹

 更新時(shí)間:2022年05月19日 16:30:44   作者:錦都不二  
這篇文章主要介紹了利用python進(jìn)行接口測(cè)試詳情,文章基于python展開(kāi)對(duì)接口測(cè)試的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

其實(shí)我覺(jué)得接口測(cè)試很簡(jiǎn)單,比一般的功能測(cè)試還簡(jiǎn)單(這話我先這樣說(shuō),以后可能會(huì)刪O(∩_∩)O哈!),現(xiàn)在找工作好多公司都要求有接口測(cè)試經(jīng)驗(yàn),也有好多人問(wèn)我(也就兩三個(gè)人)什么是接口測(cè)試,本著不懂也要裝懂的態(tài)度,我會(huì)說(shuō):所謂接口測(cè)試就是通過(guò)測(cè)試不同情況下的入?yún)⑴c之相應(yīng)的出參信息來(lái)判斷接口是否符合或滿足相應(yīng)的功能性、安全性要求。

我為啥說(shuō)接口測(cè)試比功能測(cè)試簡(jiǎn)單呢,因?yàn)楣δ軠y(cè)試是從頁(yè)面輸入值,然后通過(guò)點(diǎn)擊按鈕或鏈接等傳值給后端,而且功能測(cè)試還要測(cè)UI、前端交互等功能,但接口測(cè)試沒(méi)有頁(yè)面,它是通過(guò)接口規(guī)范文檔上的調(diào)用地址、請(qǐng)求參數(shù),拼接報(bào)文,然后發(fā)送請(qǐng)求,檢查返回結(jié)果,所以它只需測(cè)入?yún)⒑统鰠⒕托辛?,相?duì)來(lái)說(shuō)簡(jiǎn)單了不少。

正好最近在做接口測(cè)試,之前公司的方案是使用postman進(jìn)行接口測(cè)試。但是偉大的墻導(dǎo)致我們只能用離線版postman。。然后一個(gè)很長(zhǎng)很長(zhǎng)的接口列表,一個(gè)接一個(gè)的訪問(wèn)。我的天哪。。所以萌生了一個(gè)想法,使用python編寫(xiě)一套接口測(cè)試腳本,設(shè)置接口列表,然后逐條訪問(wèn),輸出日志。

接口測(cè)試的坑

第一個(gè)坑:

POST 和 GET----GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息|Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求。

做過(guò)接口測(cè)試或者做過(guò)前端的人都知道,接口的訪問(wèn)方式是不一致的,所以才會(huì)使用postman來(lái)進(jìn)行接口測(cè)試,因?yàn)樗梢栽O(shè)置post和get方式。使用python模擬這倆種訪問(wèn)方式是重中之重。先說(shuō)GET方式。GET方式就比較簡(jiǎn)單了,把接口放進(jìn)瀏覽器地址欄,點(diǎn)下回車(chē)就完成了一次GET。所以就需要使用python訪問(wèn)URL就可以模擬一次GET 測(cè)試。

?import urllib2
?url_save = 'http://www.baidu.com/'
?try:
?s_save = urllib2.urlopen(url_save).read()
print s_save ?
except urllib2.HTTPError, e:
?print e.code
?except urllib2.URLError, e:
?print str(e)

如上所示就完成了一次GET請(qǐng)求,調(diào)用urllib2庫(kù),然后將一個(gè)字符串形式的URL傳給urllib2.urlopen函數(shù),最后使用read()方法將GET回來(lái)的數(shù)據(jù)存儲(chǔ)起來(lái)。

然后說(shuō)說(shuō)POST。其實(shí)在python的urllib2庫(kù)中,我們剛剛所使用的urlopen函數(shù)還有其他幾樣不是必選的入?yún)ⅲ?strong>因?yàn)檫@些入?yún)⒔o定了初始化的值:

def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
?cafile=None, capath=None, cadefault=False, context=None):

如上代碼,urllib庫(kù)有一個(gè)很智能的毛病。data不給值,訪問(wèn)方式就是GET,data給了值,方式就會(huì)變成POST;所以模擬POST 方式的代碼如下:

import urllib?
import urllib2?
url = 'http://www.example.com'?
# values的形式:name:value
values = {'**' : '***',?
? ? ? ? ? '**' : '***',?
? ? ? ? ? '**' : '***' }?
#使用urllib.urlencode函數(shù)對(duì)values字典進(jìn)行處理,最終形式為:**=***&**=***
data = urllib.urlencode(values)?
#如果對(duì)data順序有要求,建議自己拼接data
req = urllib2.Request(url, data)?
response = urllib2.urlopen(req)?
the_page = response.read()

就像如上代碼,把POST方式所需要的數(shù)據(jù)寫(xiě)到data參數(shù)中去,POST方式就模擬成功了。

第二個(gè)坑:cookie的使用

用python獲取cookie所需要的庫(kù)叫做cookielib。獲取cookie的例子:

# 這里有四種CookieJar,CookieJar是最原始的
cookie_use = cookielib.CookieJar()
?handler = urllib2.HTTPCookieProcessor(cookie_use)
?# 使用綁定好CookieJar的handler創(chuàng)建一個(gè)opener
?opener = urllib2.build_opener(handler)
?# 將opener安裝到urllib2中
?urllib2.install_opener(opener)
# 使用安裝好的urllib2訪問(wèn)某一網(wǎng)站獲取cookie
?urllib2.urlopen('https://....../login')
?#這個(gè)時(shí)候cookie已經(jīng)被CookieJar獲取到了
?print cookie_use

在下一步,將獲取到的cookie綁定到opener頭中:

'''
? 將獲取到的cookie綁定到opener,上一步獲取的cookie并不滿足如下格式,
需要自己進(jìn)行字符串的切片和拼接?
?'''
opener.addheaders.append(('Cookie', 'name=***&888=888'))

現(xiàn)在的opener就可以用來(lái)訪問(wèn)任意需要登錄的網(wǎng)站了!

功能:功能實(shí)現(xiàn),實(shí)現(xiàn)與設(shè)計(jì)一致, 接口通過(guò)性測(cè)試

  • 健壯性: 邊界值,容錯(cuò)性
  • 性能: 并發(fā)及壓測(cè)
  • 穩(wěn)定性: 長(zhǎng)期運(yùn)行的穩(wěn)定性
  • 安全性: SQL注入, session依賴, 數(shù)字簽名, http接口的安全性

接口類(lèi)型

常見(jiàn)接口種類(lèi):

  • Http/Https接口: 通過(guò)http/https協(xié)議傳送接口數(shù)據(jù)(通常按字符串/二進(jìn)制傳輸), 如常見(jiàn)的網(wǎng)頁(yè)表單, https安全性更好
  • RESTful Api: REST表述性狀態(tài)傳遞. 一種設(shè)計(jì)風(fēng)格,基于http/https協(xié)議, 把一切接口視為資源, 接口要分版本,在統(tǒng)一的域名下管理, 不同的方法(get/post..)做不同的事,通常請(qǐng)求及響應(yīng)使用json格式
  • Web Service: SOAP簡(jiǎn)單面向?qū)ο髤f(xié)議, 基于http實(shí)現(xiàn)的一種RPC方案.接口返回一些對(duì)象,可以直接通過(guò)操作對(duì)象,實(shí)現(xiàn)我們需要的業(yè)務(wù)處理.使用xml格式傳輸數(shù)據(jù)
  • RPC接口: RPC為遠(yuǎn)程方法調(diào)用, 有不同的實(shí)現(xiàn)方案,基于TCP/Http協(xié)議的都有. RPC可以想我們本地導(dǎo)入和調(diào)用對(duì)象一樣使用. Dubbo接口也是一種RPC接口.

常見(jiàn)接口數(shù)據(jù)類(lèi)型:

  • 請(qǐng)求數(shù)據(jù)類(lèi)型(Content-Type):application/x-www-form-urlencoded: 常規(guī)只有文本的網(wǎng)頁(yè)表單application/json: RESTful Api常用格式, 結(jié)構(gòu)清晰, 含有多層嵌套multipart/form-data: 既有文本,又有上傳文件或富文本框的混合數(shù)據(jù)表單text/xml: xml格式, RPC接口常用格式
  • 響應(yīng)數(shù)據(jù)類(lèi)型string/html: 返回字符串或網(wǎng)頁(yè)源碼json: RESTful Api常用響應(yīng)格式, 結(jié)構(gòu)清晰xml: RPC接口常用格式

常見(jiàn)接口安全驗(yàn)證方式:

  • Auth_1.0/Auth_2.0: 通用接口授權(quán)方式
  • Session依賴: 需要登錄之后才能進(jìn)行接口操作
  • Token驗(yàn)證: 先要使用自己的appid/appsecret通過(guò)獲取token接口驗(yàn)證身份獲取一個(gè)token(令牌,有一定有效期), 然后帶著token訪問(wèn)接口
  • 數(shù)字簽名: 將原本的參數(shù)按一定規(guī)則進(jìn)行組合,配合時(shí)間戳或appsecret, 通過(guò)加密算法生成一個(gè)簽名sign, 攜帶簽名進(jìn)行接口請(qǐng)求

常見(jiàn)接口請(qǐng)求方法:

  • GET: 獲取資源
  • POST: 修改資源
  • PUT: 上傳資源
  • DELETE: 刪除資源
  • HEAD: 只請(qǐng)求頁(yè)面首部
  • PATCH: 補(bǔ)丁
  • OPTIONS: 運(yùn)行客戶端查看服務(wù)器性能
  • ......

常見(jiàn)狀態(tài)碼(RESTful規(guī)范):

  • 200系: 成功200 OK - [GET]:獲取資源成功201 CREATED - [POST/PUT/PATCH]:創(chuàng)建/修改成功202 Accepted - [*]:任務(wù)接受204 NO CONTENT - [DELETE]:刪除成功
  • 300系: 重定向301 Moved Permanently: 永久重定向302 Found: 臨時(shí)重定向
  • 400: 資源錯(cuò)誤400 INVALID REQUEST - [POST/PUT/PATCH]:用戶請(qǐng)求錯(cuò)誤401 Unauthorized - [*]:沒(méi)有權(quán)限(鑒權(quán)失敗, 接口層)403 Forbidden - [*] 資源禁止訪問(wèn)(服務(wù)器層,沒(méi)有訪問(wèn)權(quán)限)404 NOT FOUND - [*]:資源不存在405 Method Not Allowd: 訪問(wèn)的方法不允許, 如用POST訪問(wèn)只支持GET請(qǐng)求的接口406 Not Acceptable - [GET]:用戶請(qǐng)求的格式不可得(比如用戶請(qǐng)求JSON格式,但是只有XML格式)410 Gone -[GET]:資源被永久刪除422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建對(duì)象時(shí),發(fā)生驗(yàn)證錯(cuò)誤
  • 500系: 服務(wù)器內(nèi)部錯(cuò)誤(接口崩潰或有Bug)500 INTERNAL SERVER ERROR - [*]:服務(wù)器發(fā)生錯(cuò)誤

接口業(yè)務(wù)類(lèi)型:

  • 返回?cái)?shù)據(jù)型接口: 只從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)
  • 業(yè)務(wù)操作型接口: 需要寫(xiě)數(shù)據(jù)庫(kù)(接口測(cè)試需要要涉及參數(shù)化或環(huán)境清理)

快速上手接口測(cè)試

獲取接口文檔:

  • Wiki
  • Word文檔
  • Postman導(dǎo)出
  • 抽象接口定義
  • 接口管理平臺(tái)

接口文檔分析

  • 功能分析: 是否能滿足業(yè)務(wù)(是否缺少某個(gè)前端需要的參數(shù)), 是否能滿足所有業(yè)務(wù)場(chǎng)景(是否有漏開(kāi)發(fā)接口, 比如只開(kāi)發(fā)了單品接口,沒(méi)開(kāi)發(fā)套餐接口)
  • 設(shè)計(jì)分析: 是否有不規(guī)范字段(如,nickname, passwd);不規(guī)范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有單詞拼錯(cuò);是否有和數(shù)據(jù)庫(kù)字段對(duì)應(yīng)但名稱不一樣的(易錯(cuò))
  • 接口分析: 協(xié)議類(lèi)型(http要考慮安全);請(qǐng)求方法(是否規(guī)范);請(qǐng)求編碼格式(表單/Json/xml, 很多接口文檔不聲明,導(dǎo)致測(cè)試調(diào)試不通);接口授權(quán)方式;接口業(yè)務(wù)類(lèi)型(關(guān)系到是否需要做參數(shù)化或環(huán)境清理); 返回值類(lèi)型及結(jié)構(gòu)(關(guān)系到怎么斷言)
  • 接口依賴: 需要什么環(huán)境準(zhǔn)備和業(yè)務(wù)場(chǎng)景, 依賴那些接口, 有那些動(dòng)態(tài)數(shù)據(jù), 預(yù)備環(huán)境怎么保障
  • 參數(shù)分析: 各個(gè)參數(shù)的參數(shù)類(lèi)型,組成規(guī)則,是否允許不傳,是否可以為空, 是否允許多傳參
  • 業(yè)務(wù)分析: 如price字段必須和數(shù)據(jù)庫(kù)中的商品的price字段一致,才能校驗(yàn)通過(guò)
  • 非功能性: 接口的技術(shù)實(shí)現(xiàn)方案是否合理, 能否滿足高并發(fā)的性能要求, 邊界值/極限值的處理是否合適, 是否前后端都有數(shù)據(jù)格式校驗(yàn)等(如精確度為秒級(jí)的訂單號(hào)生成器,在高并發(fā)下會(huì)導(dǎo)致生成同一訂單號(hào)的問(wèn)題)
  • 其他: 如反爬,對(duì)headers的一些限制和校驗(yàn), ip等限制

編寫(xiě)接口用例

Excel/TestLink/禪道

  • 單接口用例: 正常數(shù)據(jù)/邊界數(shù)據(jù)/異常數(shù)據(jù)(健壯性)/并發(fā)(一致性)/性能/安全性(抓包截取偽造/SQL注入/跨域請(qǐng)求)
  • 場(chǎng)景用例: 列出常見(jiàn)的用戶場(chǎng)景, 用接口進(jìn)行覆蓋, 業(yè)務(wù)場(chǎng)景壓測(cè)(尋找某個(gè)環(huán)節(jié)的性能瓶頸)

執(zhí)行接口測(cè)試

  • Postman: 功能調(diào)試
  • Jmeter: 性能

到此這篇關(guān)于利用python進(jìn)行接口測(cè)試詳情的文章就介紹到這了,更多相關(guān)python接口測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 解碼Base64 得到碼流格式文本實(shí)例

    Python 解碼Base64 得到碼流格式文本實(shí)例

    今天小編就為大家分享一篇Python 解碼Base64 得到碼流格式文本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過(guò)示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。
    2017-11-11
  • pygame游戲之旅 添加碰撞效果的方法

    pygame游戲之旅 添加碰撞效果的方法

    這篇文章主要為大家詳細(xì)介紹了pygame游戲之旅的第7篇,教大家如何添加碰撞的效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python如何急速下載第三方庫(kù)詳解

    Python如何急速下載第三方庫(kù)詳解

    這篇文章主要給大家介紹了關(guān)于Python如何急速下載第三方庫(kù)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python動(dòng)態(tài)創(chuàng)建類(lèi)實(shí)例詳解

    Python動(dòng)態(tài)創(chuàng)建類(lèi)實(shí)例詳解

    這篇文章主要為大家介紹了Python動(dòng)態(tài)創(chuàng)建類(lèi)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 圖文詳解Python中最神秘的一個(gè)魔法函數(shù)

    圖文詳解Python中最神秘的一個(gè)魔法函數(shù)

    Python進(jìn)階之路我覺(jué)得有兩個(gè)東西一定要了解,一個(gè)是魔法函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中最神秘的一個(gè)魔法函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • 在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程

    在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程

    這篇文章主要介紹了在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程,Debian系統(tǒng)和Nginx服務(wù)器皆是高性能的選擇,需要的朋友可以參考下
    2015-04-04
  • 詳解python調(diào)度框架APScheduler使用

    詳解python調(diào)度框架APScheduler使用

    本篇文章主要介紹了詳解python調(diào)度框架APScheduler使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • python之dlib包安裝失敗問(wèn)題及解決

    python之dlib包安裝失敗問(wèn)題及解決

    這篇文章主要介紹了python之dlib包安裝失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解Python調(diào)試神器之PySnooper

    詳解Python調(diào)試神器之PySnooper

    在程序開(kāi)發(fā)過(guò)程中,代碼的運(yùn)行往往會(huì)和我們預(yù)期的結(jié)果有所差別。于是,我們需要清楚代碼運(yùn)行過(guò)程中到底發(fā)生了什么?代碼哪些模塊運(yùn)行了,哪些模塊沒(méi)有運(yùn)行?輸出的局部變量是什么樣的?PySnooper,能夠大大減少調(diào)試過(guò)程中的工作量
    2021-11-11

最新評(píng)論