您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何利用python進行接口測試”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何利用python進行接口測試”吧!
第一個坑:
POST 和 GET----GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息|Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求。
做過接口測試或者做過前端的人都知道,接口的訪問方式是不一致的,所以才會使用postman來進行接口測試,因為它可以設置post和get方式。使用python模擬這倆種訪問方式是重中之重。先說GET方式。GET方式就比較簡單了,把接口放進瀏覽器地址欄,點下回車就完成了一次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請求,調用urllib2庫,然后將一個字符串形式的URL傳給urllib2.urlopen函數,最后使用read()方法將GET回來的數據存儲起來。
然后說說POST。其實在python的urllib2庫中,我們剛剛所使用的urlopen函數還有其他幾樣不是必選的入參,因為這些入參給定了初始化的值:
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, cafile=None, capath=None, cadefault=False, context=None):
如上代碼,urllib庫有一個很智能的毛病。data不給值,訪問方式就是GET,data給了值,方式就會變成POST;所以模擬POST 方式的代碼如下:
import urllib import urllib2 url = 'http://www.example.com' # values的形式:name:value values = {'**' : '***', '**' : '***', '**' : '***' } #使用urllib.urlencode函數對values字典進行處理,最終形式為:**=***&**=*** data = urllib.urlencode(values) #如果對data順序有要求,建議自己拼接data req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read()
就像如上代碼,把POST方式所需要的數據寫到data參數中去,POST方式就模擬成功了。
第二個坑:cookie的使用
用python獲取cookie所需要的庫叫做cookielib。獲取cookie的例子:
# 這里有四種CookieJar,CookieJar是最原始的 cookie_use = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookie_use) # 使用綁定好CookieJar的handler創建一個opener opener = urllib2.build_opener(handler) # 將opener安裝到urllib2中 urllib2.install_opener(opener) # 使用安裝好的urllib2訪問某一網站獲取cookie urllib2.urlopen('https://....../login') #這個時候cookie已經被CookieJar獲取到了 print cookie_use
在下一步,將獲取到的cookie綁定到opener頭中:
''' 將獲取到的cookie綁定到opener,上一步獲取的cookie并不滿足如下格式, 需要自己進行字符串的切片和拼接 ''' opener.addheaders.append(('Cookie', 'name=***&888=888'))
現在的opener就可以用來訪問任意需要登錄的網站了!
功能:功能實現,實現與設計一致, 接口通過性測試
健壯性: 邊界值,容錯性
性能: 并發及壓測
穩定性: 長期運行的穩定性
安全性: SQL注入, session依賴, 數字簽名, http接口的安全性
常見接口種類:
Http/Https接口: 通過http/https協議傳送接口數據(通常按字符串/二進制傳輸), 如常見的網頁表單, https安全性更好
RESTful Api: REST表述性狀態傳遞. 一種設計風格,基于http/https協議, 把一切接口視為資源, 接口要分版本,在統一的域名下管理, 不同的方法(get/post..)做不同的事,通常請求及響應使用json格式
Web Service: SOAP簡單面向對象協議, 基于http實現的一種RPC方案.接口返回一些對象,可以直接通過操作對象,實現我們需要的業務處理.使用xml格式傳輸數據
RPC接口: RPC為遠程方法調用, 有不同的實現方案,基于TCP/Http協議的都有. RPC可以想我們本地導入和調用對象一樣使用. Dubbo接口也是一種RPC接口.
常見接口數據類型:
請求數據類型(Content-Type):application/x-www-form-urlencoded: 常規只有文本的網頁表單application/json: RESTful Api常用格式, 結構清晰, 含有多層嵌套multipart/form-data: 既有文本,又有上傳文件或富文本框的混合數據表單text/xml: xml格式, RPC接口常用格式
響應數據類型string/html: 返回字符串或網頁源碼json: RESTful Api常用響應格式, 結構清晰xml: RPC接口常用格式
常見接口安全驗證方式:
Auth_1.0/Auth_2.0: 通用接口授權方式
Session依賴: 需要登錄之后才能進行接口操作
Token驗證: 先要使用自己的appid/appsecret通過獲取token接口驗證身份獲取一個token(令牌,有一定有效期), 然后帶著token訪問接口
數字簽名: 將原本的參數按一定規則進行組合,配合時間戳或appsecret, 通過加密算法生成一個簽名sign, 攜帶簽名進行接口請求
常見接口請求方法:
GET: 獲取資源
POST: 修改資源
PUT: 上傳資源
DELETE: 刪除資源
HEAD: 只請求頁面首部
PATCH: 補丁
OPTIONS: 運行客戶端查看服務器性能
......
常見狀態碼(RESTful規范):
200系: 成功200 OK - [GET]:獲取資源成功201 CREATED - [POST/PUT/PATCH]:創建/修改成功202 Accepted - [*]:任務接受204 NO CONTENT - [DELETE]:刪除成功
300系: 重定向301 Moved Permanently: 永久重定向302 Found: 臨時重定向
400: 資源錯誤400 INVALID REQUEST - [POST/PUT/PATCH]:用戶請求錯誤401 Unauthorized - [*]:沒有權限(鑒權失敗, 接口層)403 Forbidden - [*] 資源禁止訪問(服務器層,沒有訪問權限)404 NOT FOUND - [*]:資源不存在405 Method Not Allowd: 訪問的方法不允許, 如用POST訪問只支持GET請求的接口406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)410 Gone -[GET]:資源被永久刪除422 Unprocesable entity - [POST/PUT/PATCH] 當創建對象時,發生驗證錯誤
500系: 服務器內部錯誤(接口崩潰或有Bug)500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤
接口業務類型:
返回數據型接口: 只從數據庫讀取數據
業務操作型接口: 需要寫數據庫(接口測試需要要涉及參數化或環境清理)
獲取接口文檔:
Wiki
Word文檔
Postman導出
抽象接口定義
接口管理平臺
功能分析: 是否能滿足業務(是否缺少某個前端需要的參數), 是否能滿足所有業務場景(是否有漏開發接口, 比如只開發了單品接口,沒開發套餐接口)
設計分析: 是否有不規范字段(如,nickname, passwd);不規范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有單詞拼錯;是否有和數據庫字段對應但名稱不一樣的(易錯)
接口分析: 協議類型(http要考慮安全);請求方法(是否規范);請求編碼格式(表單/Json/xml, 很多接口文檔不聲明,導致測試調試不通);接口授權方式;接口業務類型(關系到是否需要做參數化或環境清理); 返回值類型及結構(關系到怎么斷言)
接口依賴: 需要什么環境準備和業務場景, 依賴那些接口, 有那些動態數據, 預備環境怎么保障
參數分析: 各個參數的參數類型,組成規則,是否允許不傳,是否可以為空, 是否允許多傳參
業務分析: 如price字段必須和數據庫中的商品的price字段一致,才能校驗通過
非功能性: 接口的技術實現方案是否合理, 能否滿足高并發的性能要求, 邊界值/極限值的處理是否合適, 是否前后端都有數據格式校驗等(如精確度為秒級的訂單號生成器,在高并發下會導致生成同一訂單號的問題)
其他: 如反爬,對headers的一些限制和校驗, ip等限制
Excel/TestLink/禪道
單接口用例: 正常數據/邊界數據/異常數據(健壯性)/并發(一致性)/性能/安全性(抓包截取偽造/SQL注入/跨域請求)
場景用例: 列出常見的用戶場景, 用接口進行覆蓋, 業務場景壓測(尋找某個環節的性能瓶頸)
Postman: 功能調試
Jmeter: 性能
感謝各位的閱讀,以上就是“如何利用python進行接口測試”的內容了,經過本文的學習后,相信大家對如何利用python進行接口測試這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。