最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

接口測試的坑

第一個(gè)坑:

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

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

?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請求,調(diào)用urllib2庫,然后將一個(gè)字符串形式的URL傳給urllib2.urlopen函數(shù),最后使用read()方法將GET回來的數(shù)據(jù)存儲(chǔ)起來。

然后說說POST。其實(shí)在python的urllib2庫中,我們剛剛所使用的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庫有一個(gè)很智能的毛病。data不給值,訪問方式就是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ù)寫到data參數(shù)中去,POST方式就模擬成功了。

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

用python獲取cookie所需要的庫叫做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ǎ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就可以用來訪問任意需要登錄的網(wǎng)站了!

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

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

接口類型

常見接口種類:

  • Http/Https接口: 通過http/https協(xié)議傳送接口數(shù)據(jù)(通常按字符串/二進(jìn)制傳輸), 如常見的網(wǎng)頁表單, https安全性更好
  • RESTful Api: REST表述性狀態(tài)傳遞. 一種設(shè)計(jì)風(fēng)格,基于http/https協(xié)議, 把一切接口視為資源, 接口要分版本,在統(tǒng)一的域名下管理, 不同的方法(get/post..)做不同的事,通常請求及響應(yīng)使用json格式
  • Web Service: SOAP簡單面向?qū)ο髤f(xié)議, 基于http實(shí)現(xiàn)的一種RPC方案.接口返回一些對(duì)象,可以直接通過操作對(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接口.

常見接口數(shù)據(jù)類型:

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

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

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

常見接口請求方法:

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

常見狀態(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]:用戶請求錯(cuò)誤401 Unauthorized - [*]:沒有權(quán)限(鑒權(quán)失敗, 接口層)403 Forbidden - [*] 資源禁止訪問(服務(wù)器層,沒有訪問權(quán)限)404 NOT FOUND - [*]:資源不存在405 Method Not Allowd: 訪問的方法不允許, 如用POST訪問只支持GET請求的接口406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求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ù)類型:

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

快速上手接口測試

獲取接口文檔:

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

接口文檔分析

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

編寫接口用例

Excel/TestLink/禪道

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

執(zhí)行接口測試

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

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

相關(guān)文章

  • Python關(guān)于時(shí)間序列calendar模塊的深入講解

    Python關(guān)于時(shí)間序列calendar模塊的深入講解

    calendar,是與日歷相關(guān)的模塊。calendar模塊文件里定義了很多類型,主要有Calendar,TextCalendar以及HTMLCalendar類型。其中,Calendar是TextCalendar與HTMLCalendar的基類
    2021-11-11
  • python異?;怋aseException詳解

    python異常基類BaseException詳解

    這篇文章主要為大家介紹了python異?;怋aseException詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python訪問系統(tǒng)環(huán)境變量的方法

    python訪問系統(tǒng)環(huán)境變量的方法

    這篇文章主要介紹了python訪問系統(tǒng)環(huán)境變量的方法,涉及Python操作系統(tǒng)環(huán)境變量的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python 如何調(diào)試程序崩潰錯(cuò)誤

    Python 如何調(diào)試程序崩潰錯(cuò)誤

    這篇文章主要介紹了Python 如何調(diào)試程序崩潰錯(cuò)誤,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • keras 回調(diào)函數(shù)Callbacks 斷點(diǎn)ModelCheckpoint教程

    keras 回調(diào)函數(shù)Callbacks 斷點(diǎn)ModelCheckpoint教程

    這篇文章主要介紹了keras 回調(diào)函數(shù)Callbacks 斷點(diǎn)ModelCheckpoint教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 使用Python獲取字典鍵對(duì)應(yīng)值的兩種方法

    使用Python獲取字典鍵對(duì)應(yīng)值的兩種方法

    對(duì)于字典通過鍵獲得值非常簡單,但通過值獲得鍵則需繞些彎子,下面這篇文章主要給大家介紹了關(guān)于如何使用Python獲取字典鍵對(duì)應(yīng)值的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • python實(shí)現(xiàn)經(jīng)緯度采樣的示例代碼

    python實(shí)現(xiàn)經(jīng)緯度采樣的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)經(jīng)緯度采樣的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • pycharm遠(yuǎn)程開發(fā)項(xiàng)目的實(shí)現(xiàn)步驟

    pycharm遠(yuǎn)程開發(fā)項(xiàng)目的實(shí)現(xiàn)步驟

    這篇文章主要介紹了pycharm遠(yuǎn)程開發(fā)項(xiàng)目的實(shí)現(xiàn)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 淺談DataFrame和SparkSql取值誤區(qū)

    淺談DataFrame和SparkSql取值誤區(qū)

    今天小編就為大家分享一篇淺談DataFrame和SparkSql取值誤區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python利用itchat對(duì)微信中好友數(shù)據(jù)實(shí)現(xiàn)簡單分析的方法

    Python利用itchat對(duì)微信中好友數(shù)據(jù)實(shí)現(xiàn)簡單分析的方法

    Python 熱度一直很高,我感覺這就是得益于擁有大量的包資源,極大的方便了開發(fā)人員的需求。下面這篇文章主要給大家介紹了關(guān)于Python利用itchat實(shí)現(xiàn)對(duì)微信中好友數(shù)據(jù)進(jìn)行簡單分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-11-11

最新評(píng)論

霞浦县| 准格尔旗| 九龙城区| 开封县| 枝江市| 敖汉旗| 中江县| 嘉荫县| 建湖县| 新竹县| 峡江县| 同仁县| 化州市| 科技| 天长市| 阿鲁科尔沁旗| 类乌齐县| 余姚市| 林芝县| 双江| 荆州市| 嵩明县| 中西区| 怀来县| 宿迁市| 永安市| 屏南县| 新宁县| 喜德县| 瑞丽市| 绥江县| 德格县| 五指山市| 当雄县| 金川县| 大竹县| 襄汾县| 维西| 肃南| 元谋县| 宾川县|