一、調用Common中的方法需要先實例化類:
方法1:
common=Common('http://127.0.0.1:8888') #實例化自己的Common
result = common.run_main('post', '/login', 'name=xiaoming&pwd=111')
方法2:
UR = 'http://127.0.0.1:8888'
result = Common(UR).run_main('post', '/login',"name=xiaoming&pwd=111") # 直接在調用時實例化Common,init方法需要傳入變量,所以在實例化時需要傳入變量值
二、無法導入websocket 的 create_connection包
報錯:ImportError: cannot import name 'create_connection' from 'websocket' (unknown location)
原因:安裝了websocket ,實際應該安裝websocket-client(且需要先卸載前面安裝的websocket包)
解決:
先卸載websocket:pip3 uninstall websocket
在重新安裝websocket-client:pip3 uninstall websocket-client
三、使用自己封裝的post方法,發送請求後預期結果與實際結果不一致
原因:請求參數模式錯誤
解決:原請求result = RunMain().run_main('post', 'http://127.0.0.1:8888/login','name=xiaoming&pwd=111')
改爲 result = RunMain().run_main('post', 'http://127.0.0.1:8888/login',{'name': 'xiaoming', 'pwd': '111'})
四、整體封裝的configRequest.py代碼如下:(方便後續進行http、websocket的接口測試)
# -- coding: utf-8 --
# configRequest.py主要存放自己封裝的http、websocket請求方法
import requests
from websocket import create_connection
from common.Log import logger
import json
logger = logger
# 定義一個common的類,它的父類是object
class Common(object):
# common的構造函數
def __init__(self, url_root, api_type= 'http'):
'''
:param api_type:接口類似當前支持http,ws,http就是http協議,ws是Websocket協議
:param url_root: 被測系統的跟路由
'''
self.ws='null' #定義一個websocket變量,初始爲null
if api_type == 'ws':
self.ws = create_connection(url_root)
elif api_type == 'http':
self.url_root = url_root
# ws協議的消息發送
def send(self, params):
'''
:param params: websocket接口的參數
:return: 訪問接口的返回值
'''
self.ws.send(params)
res = self.ws.recv()
print(res)
return res
# common類的析構函數,清理沒有用的資源
def __del__(self):
'''
:return:
'''
if self.ws != 'null':
self.ws.close()
# 封裝你自己的get請求,uri是訪問路由,params是get請求的參數,如果沒有默認爲空
def get(self, uri, params=''):
# 拼湊訪問地址
url = self.url_root + uri + params
# 通過get請求訪問對應地址
result = requests.get(url) # 返回request的Response結果,類型爲requests的Response類型
res = json.dumps(result, ensure_ascii=False, sort_keys=True, indent=2)
return res
# 封裝你自己的post方法,uri是訪問路由(路徑),params是post請求需要傳遞的參數,如果沒有參數這裏爲空
def post(self, uri, params=''):
# 拼湊訪問地址
url = self.url_root + uri
if len(params) > 0:
# 如果有參數,那麼通過post方式訪問對應的url,並將參數賦值給requests.post默認參數data
result = requests.post(url, data=params).json() # 返回request的Response結果,類型爲requests的Response類型
res = json.dumps(result, ensure_ascii=False, sort_keys=True, indent=2)
else:
# 如果無參數,訪問方式如下
# 返回request的Response結果,類型爲requests的Response類型
res = requests.post(url)
return res
def put(self, uri, params=None):
'''
封裝你自己的put方法,uri是訪問路由,params是put請求需要傳遞的參數,如果沒有參數這裏爲空
:param uri: 訪問路由
:param params: 傳遞參數,string類型,默認爲None
:return: 此次訪問的response
'''
url = self.url_root + uri
if params is not None:
# 如果有參數,那麼通過put方式訪問對應的url,並將參數賦值給requests.put默認參數data
# 返回request的Response結果,類型爲requests的Response類型
res = requests.put(url, data=params)
else:
# 如果無參數,訪問方式如下;返回request的Response結果,類型爲requests的Response類型
res = requests.put(url)
return res
def delete(self, uri, params=None):
'''
封裝你自己的delete方法,uri是訪問路由,params是delete請求需要傳遞的參數,如果沒有參數這裏爲空
:param uri: 訪問路由
:param params: 傳遞參數,string類型,默認爲None
:return: 此次訪問的response
'''
url = self.url_root + uri
if params is not None:
# 如果有參數,那麼通過put方式訪問對應的url,並將參數賦值給requests.put默認參數data
# 返回request的Response結果,類型爲requests的Response類型
res = requests.delete(url, data=params)
else:
# 如果無參數,訪問方式如下; 返回request的Response結果,類型爲requests的Response類型
res = requests.delete(url)
return res
def run_main(self, method, uri=None, data=None): # 定義一個run_main函數,通過傳過來的method來進行不同的方法請求
result = None
if method == 'post':
result = self.post(uri, data)
# logger.info(str(result))
elif method == 'get':
result = self.get(uri, data)
# logger.info(str(result))
elif method == 'put':
result = self.put(uri, data)
# logger.info(str(result))
elif method == 'delete':
result = self.delete(uri, data)
# logger.info(str(result))
elif method == 'send':
result = self.send(data)
# logger.info(str(result))
else:
print("method值錯誤!!!")
logger.info("method值錯誤!!!")
return result
if __name__ == '__main__':
# http接口
# common=Common('http://127.0.0.1:8888','http') #實例化自己的Common
# result = common.run_main('post', {'name': 'xiaoming', 'pwd': '111'})
# WebSocket接口
common = Common('ws://echo.websocket.org', 'ws')
result = common.run_main('send',None,'Hello, World...') #通過調用run_main方法間接調用send方法
#result = common.send('Hello, World...') #直接調用封裝的send方法
print(result)# 打印日誌
# 釋放WebSocket的長連接
del common