欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

python對于requests的封裝方法詳解-創(chuàng)新互聯(lián)

由于requests是http類接口的核心,因此封裝前考慮問題比較多:

創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元淳安做網(wǎng)站,已為上家服務(wù),為淳安各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

1. 對多種接口類型的支持;

2. 連接異常時能夠重連;

3. 并發(fā)處理的選擇;

4. 使用方便,容易維護;

當(dāng)前并未全部實現(xiàn),后期會不斷完善。重點提一下并發(fā)處理的選擇:python的并發(fā)處理機制由于存在GIL的原因,實現(xiàn)起來并不是很理想,綜合考慮多進程、多線程、協(xié)程,在不考慮大并發(fā)性能測試的前提下使用了多線程-線程池的形式實現(xiàn)。使用的是

concurrent.futures模塊。當(dāng)前僅方便支持webservice接口。


# -*- coding:utf-8 -*-
 
import requests
from concurrent.futures import ThreadPoolExecutor
from Tools.Config import Config # 配置文件讀取
from Tools.Log import Log # 日志管理
from Tools.tools import decoLOG # 日志裝飾
 
'''
  功能:   Requests類
  使用方法: 
  作者:   郭可昌
  作成時間: 20180224
  更新內(nèi)容:
  更新時間:
'''
class Requests(object):
  def __init__(self):
    self.session = requests.session()
    self.header = {}
    # URL默認(rèn)來源于配置文件,方便不同測試環(huán)境的切換,也可以動態(tài)設(shè)定
    self.URL = Config().getURL()
    # 默認(rèn)60s,可以動態(tài)設(shè)定
    self.timeout = 60
    #http連接異常的場合,重新連接的次數(shù),默認(rèn)為3,可以動態(tài)設(shè)定
    self.iRetryNum = 3
 
    self.errorMsg = ""
    # 內(nèi)容 = {用例編號:響應(yīng)數(shù)據(jù)}
    self.responses = {}
    # 內(nèi)容 = {用例編號:異常信息}
    self.resErr={}
 
 
  # 原始post使用保留
  # bodyData: request's data
  @decoLOG
  def post(self, bodyData):
    response = None
    self.errorMsg = ""
 
    try:
      response = self.session.post(self.URL, data=bodyData.encode('utf-8'), headers=self.header, timeout=self.timeout)
      response.raise_for_status()
    except Exception as e:
      self.errorMsg = str(e)
      Log().logger.error("HTTP請求異常,異常信息:%s" % self.errorMsg)
    return response
 
 
  # 復(fù)數(shù)請求并發(fā)處理,采用線程池的形式,用例數(shù)>線程池的容量:線程池的容量為并發(fā)數(shù),否則,用例數(shù)為并發(fā)數(shù)
  # dicDatas: {用例編號:用例數(shù)據(jù)}
  @decoLOG
  def req_all(self, dicDatas, iThreadNum=5):
 
    if len(dict(dicDatas)) < 1:
      Log().logger.error("沒有測試對象,請確認(rèn)后再嘗試。。。")
      return self.responses.clear()
 
    # 請求用例集合轉(zhuǎn)換(用例編號,用例數(shù)據(jù))
    seed = [i for i in dicDatas.items()]
    self.responses.clear()
 
    # 線程池并發(fā)執(zhí)行,iThreadNum為并發(fā)數(shù)
    with ThreadPoolExecutor(iThreadNum) as executor:
      executor.map(self.req_single,seed)
 
    # 返回所有請求的響應(yīng)信息({用例編號:響應(yīng)數(shù)據(jù)}),http連接異常:對應(yīng)None
    return self.responses
 
  # 用于單用例提交,http連接失敗可以重新連接,大重新連接數(shù)可以動態(tài)設(shè)定
  def req_single(self, listData, reqType="post", iLoop=1):
    response = None
    # 如果達到大重連次數(shù),連接后提交結(jié)束
    if iLoop == self.iRetryNum:
      if reqType == "post":
        try:
          response = requests.post(self.URL, data=listData[1].encode('utf-8'), headers=self.header,
                       timeout=self.timeout)
          response.raise_for_status()
        except Exception as e:
          # 異常信息保存只在大連接次數(shù)時進行,未達到大連接次數(shù),異常信息為空
          self.resErr[listData[0]] = str(e)
          Log().logger.error("HTTP請求異常,異常信息:%s【%d】" % (str(e), iLoop))
 
        self.responses[listData[0]] = response
      else:
        # for future: other request method expand
        pass
    # 未達到大連接數(shù),如果出現(xiàn)異常,則重新連接嘗試
    else:
      if reqType == "post":
        try:
          response = requests.post(self.URL, data=listData[1].encode('utf-8'), headers=self.header,
                       timeout=self.timeout)
          response.raise_for_status()
        except Exception as e:
          Log().logger.error("HTTP請求異常,異常信息:%s【%d】" % (str(e), iLoop))
          # 重連次數(shù)遞增
          iLoop += 1
          # 進行重新連接
          self.req_single(listData, reqType, iLoop)
          # 當(dāng)前連接終止
          return None
        self.responses[listData[0]] = response
      else:
        # for future: other request method expand
        pass
 
  # 設(shè)定SoapAction, 快捷完成webservice接口header設(shè)定
  def setSoapAction(self, soapAction):
    self.header["SOAPAction"] = soapAction
    self.header["Content-Type"] = "text/xml;charset=UTF-8"
    self.header["Connection"] = "Keep-Alive"
    self.header["User-Agent"] = "InterfaceAutoTest-run"
 

當(dāng)前題目:python對于requests的封裝方法詳解-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article48/hssep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃自適應(yīng)網(wǎng)站靜態(tài)網(wǎng)站、網(wǎng)站制作微信小程序、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
中文字幕一区二区精品人妻| 91口爆吞精国产对白| 午夜一区二区精品视频国产| 亚洲毛片高清一区二区三区| 午夜福利主播一区二区| 国产熟女乱免费一区二区| 精品亚洲韩国一区二区三区| 亚洲一区二区三区熟女av| 亚洲高清成人在线观看| 久久精品免费激情视频| 精品少妇熟女av免费久久| 黄色录像一级大片中国的| 人妻鲁丝一区二区三区| 日韩视频一区二区三区系列| 亚洲精品日韩国产3区| 亚洲另类熟女国产精品老| 视频在线免费观看97| 免费视频观看在线一区二区三区| 91久久国产综合精品| 婷婷色悠悠,色悠悠激情啪啪| 日韩一区二区高清视频在线观看| 亚洲综合成人av在线| 人妻乱人伦中文字幕在线| 欧美高清在线观看视频| 精品国产自在久久成人| 国产亚洲男人av一区三区| 亚欧熟女乱色一二三区日韩| 国产精品乱码精品久久久| 视频播放一区二区三区毛片| 精品色欧美色国产一区国产| 日韩综合欧美激情另类| 91亚洲精品国产一区| 亚洲免费视频区一区二| 日本熟女视频中文字幕| 欧美日韩一区二区黄色| 亚洲欧美国产精品日韩| 加勒比av免费在线播放| 一区二区在线观看激情| 亚洲ve中文字幕久久一区二区| 午夜福利在线视频观看| 加勒比在线观看欧美一区|