學(xué)習(xí)極客時(shí)間《接口測試入門課》,有一些積累和不同的收獲营罢。在時(shí)間很緊張的情況下赏陵,我們對接口測試的方式:對接口進(jìn)行正確的邏輯測試饼齿、錯(cuò)誤的邏輯測試,去判斷是否滿足最初的需求蝙搔,因此缕溉,我們需要快速地掌握驗(yàn)證手段。
1吃型、陌生協(xié)議接口測試方法
但是當(dāng)我們面對的是一個(gè)陌生的新協(xié)議時(shí)证鸥,測試工程師的首要任務(wù):
1、借助開發(fā)工程師勤晚。不要從技術(shù)基礎(chǔ) 和理論開始學(xué)起枉层,在逐步應(yīng)用的學(xué)習(xí)脈絡(luò),更好的方式是直接拿他的客戶端代碼赐写,盡可能挪為自己用鸟蜡,將其變成自己的接口測試代碼。
2挺邀、站在自己的技術(shù)棧上揉忘,完成技術(shù)積累。比如已經(jīng)熟悉的測試工具端铛、測試平臺癌淮、測試框架和編碼基礎(chǔ)。
3沦补、歸入框架乳蓄。
有些開發(fā)人員很好,會給你一些學(xué)習(xí)脈絡(luò)夕膀,比如給你協(xié)議的說明文檔虚倒、代碼開發(fā)文檔、實(shí)現(xiàn)代碼等內(nèi)容产舞。但是往往通過這種方式魂奥,暫用的時(shí)間會很長,有些時(shí)候我們不需要去了解協(xié)議底層的原理易猫,只需要了解新協(xié)議是如何傳輸數(shù)據(jù)耻煤,又如何返回?cái)?shù)據(jù)庫就可以了。積累是完成任務(wù)以后去提升的事情准颓。
2哈蝇、線性接口測試代碼
在我們對接口測試代碼編寫,都是習(xí)慣性的按自己的思路一步步進(jìn)行編寫攘已,這就是所謂的線性思維炮赦。但是有時(shí)候我們就會重復(fù)的去編寫這些同樣的內(nèi)容,這個(gè)時(shí)候封裝就很重要了样勃。
websocket完整的協(xié)議代碼如下:
#引入websocket的create_connection類
from websocket import create_connection
# 建立和WebSocket接口的鏈接
ws = create_connection("ws://echo.websocket.org")
# 打印日子
print("發(fā)送 'Hello, World'...")
# 發(fā)送Hello吠勘,World
ws.send("Hello, World")
# 將WebSocket的返回值存儲result變量
result = ws.recv()
# 打印返回的result
print("返回"+result)
# 關(guān)閉WebSocket鏈接
ws.close()
3.封裝的common代碼
按極客時(shí)間老師的說法性芬,這里就是哆啦A夢,增刪改查全部進(jìn)行代碼封裝剧防,只需要通過參數(shù)調(diào)用的方式就可以簡單完成代碼的測試植锉。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# python代碼中引入requests庫,引入后才可以在你的代碼中使用對應(yīng)的類以及成員函數(shù)
import requests
from websocket import create_connection
# 定義一個(gè)common的類峭拘,它的父類是object
class Common(object):
# common的構(gòu)造函數(shù)
def __init__(self,url_root,api_type):
'''
:param api_type:接口類似當(dāng)前支持http俊庇、ws,http就是HTTP協(xié)議棚唆,ws是WebSocket協(xié)議
:param url_root: 被測系統(tǒng)的根路由
'''
if api_type=='ws':
self.ws = create_connection(url_root)
elif api_type=='http':
self.ws='null'
self.url_root = url_root
# ws協(xié)議的消息發(fā)送
def send(self,params):
'''
:param params: websocket接口的參數(shù)
:return: 訪問接口的返回值
'''
self.ws.send(params)
res = self.ws.recv()
return res
# common類的析構(gòu)函數(shù)暇赤,清理沒有用的資源
def __del__(self):
'''
:return:
'''
if self.ws!='null":
self.ws.close()
def get(self, uri, params=None):
'''
封裝你自己的get請求心例,uri是訪問路由宵凌,params是get請求的參數(shù),如果沒有默認(rèn)為空
:param uri: 訪問路由
:param params: 傳遞參數(shù)止后,string類型瞎惫,默認(rèn)為None
:return: 此次訪問的response
'''
# 拼湊訪問地址
if params is not None:
url = self.url_root + uri + params
else:
url = self.url_root + uri
# 通過get請求訪問對應(yīng)地址
res = requests.get(url)
# 返回request的Response結(jié)果,類型為requests的Response類型
return res
def post(self, uri, params=None):
'''
封裝你自己的post方法译株,uri是訪問路由瓜喇,params是post請求需要傳遞的參數(shù),如果沒有參數(shù)這里為空
:param uri: 訪問路由
:param params: 傳遞參數(shù)歉糜,string類型乘寒,默認(rèn)為None
:return: 此次訪問的response
'''
# 拼湊訪問地址
url = self.url_root + uri
if params is not None:
# 如果有參數(shù),那么通過post方式訪問對應(yīng)的url匪补,并將參數(shù)賦值給requests.post默認(rèn)參數(shù)data
# 返回request的Response結(jié)果伞辛,類型為requests的Response類型
res = requests.post(url, data=params)
else:
# 如果無參數(shù),訪問方式如下
# 返回request的Response結(jié)果夯缺,類型為requests的Response類型
res = requests.post(url)
return res
def put(self,uri,params=None):
'''
封裝你自己的put方法蚤氏,uri是訪問路由,params是put請求需要傳遞的參數(shù)踊兜,如果沒有參數(shù)這里為空
:param uri: 訪問路由
:param params: 傳遞參數(shù)竿滨,string類型,默認(rèn)為None
:return: 此次訪問的response
'''
url = self.url_root+uri
if params is not None:
# 如果有參數(shù)捏境,那么通過put方式訪問對應(yīng)的url于游,并將參數(shù)賦值給requests.put默認(rèn)參數(shù)data
# 返回request的Response結(jié)果,類型為requests的Response類型
res = requests.put(url, data=params)
else:
# 如果無參數(shù)垫言,訪問方式如下
# 返回request的Response結(jié)果曙砂,類型為requests的Response類型
res = requests.put(url)
return res
def delete(self,uri,params=None):
'''
封裝你自己的delete方法,uri是訪問路由骏掀,params是delete請求需要傳遞的參數(shù)鸠澈,如果沒有參數(shù)這里為空
:param uri: 訪問路由
:param params: 傳遞參數(shù)柱告,string類型,默認(rèn)為None
:return: 此次訪問的response
'''
url = self.url_root + uri
if params is not None:
# 如果有參數(shù)笑陈,那么通過put方式訪問對應(yīng)的url际度,并將參數(shù)賦值給requests.put默認(rèn)參數(shù)data
# 返回request的Response結(jié)果,類型為requests的Response類型
res = requests.delete(url, data=params)
else:
# 如果無參數(shù)涵妥,訪問方式如下
# 返回request的Response結(jié)果乖菱,類型為requests的Response類型
res = requests.put(url)
return res
4.調(diào)用common中的封裝后的函數(shù)
from common import Common
# 建立和WebSocket接口的鏈接
con = Common('ws://echo.websocket.org','ws')
# 獲取返回結(jié)果
result = con.send('Hello, World...')
#打印日志
print(result)
#釋放WebSocket的長連接
del con
Dubbo接口測試:
https://blog.csdn.net/cyjs1988/article/details/82495136
Protobuf接口測試:
http://www.reibang.com/p/58513863b491