Python 之requests封裝通用http協議介面請求

ckxllf發表於2019-12-05

  思想這東西任何時候也不會是固定的,縱使框架大致一樣,也不盡相同。關鍵還得是看業務和具體需求。python介面自動化測試框架,軟體:IDE開發工具必選+工具類如下:

  1、主要框架有:requests庫、unittest單元測試框架、HTMLrunner生成測試報告工具類、DDT資料驅動;另外pymysql、configparser、email、openpyxl等等其他工具類

  2、一般思想,即一步一個腳印:

  - 首先指令碼化處理http請求--requests

  - 將同型別測試指令碼封裝,每個介面封裝成一個介面類

  - 利用單元測試工具unittest,建立測試集suite,loader載入測試用例,測試方法命名必須test開頭

  - 最後html生成測試報告,是否需要傳送郵件等在另行擴充套件

  3、根據上面的步驟分析,基本確定介面測試結構框架

  4、直接上原始碼 ,應該可能還有最佳化的空間,希望讀者能夠給點提示,共同進步~

  '''

  Created on 2019年10月10日

  @author: qguan

  '''

  import requests

  from utils.HandleLogging import log as logging

  class HandleRequests(object):

  '''

  封裝一個公共http請求工具類

  '''

  def __init__(self):

  '''

  構造方法

  '''

  self.logger = logging

  self.session = requests.Session()

  def __call__(self, method, url, data=None, is_json=False, **kwargs):

  '''

  封裝一個可以被直接呼叫的方法

  :param method: 請求方法

  :param url: 請求地址

  :param data: 請求引數

  :param is_json: 是否json格式

  :param kwargs: 佔位,可自定義headers

  :return: 返回一個請求結果

  ''' 鄭州人流醫院哪家好

  # 請求方法的引數轉成小寫,也可以是大寫upper()

  method = method.lower()

  # 判斷請求引數是否是str型別的json格式

  if isinstance(data, str):

  try:

  data = json.loads(data)

  except Exception as e:

  self.logger.info("str字串json資料處理異常:{}".format(e))

  if len(data) > 0:

  data = eval(data)

  # 請求方法

  if method == 'get':

  res = self.session.request(method=method, url=url, params=data, **kwargs)

  elif method == 'post':

  if is_json: # 如果是json格式的請求引數,是用json

  res = self.session.request(method=method, url=url, json=data, **kwargs)

  else:

  res = self.session.request(method=method, url=url, data=data, **kwargs)

  else:

  self.logger.info("[{}]該請求方法暫不支援。".format(method))

  # session需要關閉資源

  self.session.close()

  return res.text

  if __name__ == '__main__':

  res=HandleRequests()

  url='

  print(res("get", url))

  5、以上講了介面自動化測試框架的結構分層及封裝了requests作為http請求工具類

  6、unittest單元測試框架還需要單獨的來講其使用方法,如:建立測試套件、載入測試用例、執行測試、結果回寫、生成報告、傳送郵件通知等等框架說具備的功能。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2667027/,如需轉載,請註明出處,否則將追究法律責任。

相關文章