request請求


(1)安裝命令:pip install requests

(2)請求

  • params: 字典或bytes

  • **kwargs : headers,cookies,files,auth,timeout,allow_redirects,proxies(代理),verify(認證)

  • 偽裝請求頭:headers = {'User-Agent': 'Mozilla/5.0'}

  • verify(認證) : SSL證書報錯不可見 -- urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) ; 不驗證 --- verify = False

  • get發送請求: get(url,params=None,**kwargs)

import requests
res = requests.get(url = url_value, params = data) # 方法1
res1 = requests(get,url,params) # 方法2
  • post發送請求: post(url,data,json=None,**kwargs)

    import requests
    res = requests.post(url = url_value,json = json_data) # 傳入json格式參數,一般返回json,list
    res = requests.post(url = url_value,data = data) # 傳入表單類型的參數(Content-Type:application/x-www-form-urlencoded;charset = UTF-8):傳入字典需轉為from_encoded【json.loads(),json.dumps()】
  • put發送請求:put(url,data=None,**kwargs)

  • patch發送請求: patch(url,data=None,**kwargs)

  • delete發送請求: delete(url, **kwargs)

(3)獲取響應數據

  • res.text:自動識別文本中的編碼格式進行解碼,有時候不准確,出現亂碼( html,xml,json均可 ),獲取的是字符串類型

  • res.content.decode("utf8"):需要指定解碼方式,獲取的是字符串類型

  • res.json():獲取返回內容中的json數據(只能在返回數據是json的情況下使用),可以將json字符串轉成對應的python類型的數據

  • res.headers : 響應頭

  • res.status_code : 響應碼

(4)獲取cookies: 類字典形式

  • 例如: <Cookies JSESSIONID = 22222222222222> 取JSESSIONID :res.cookies['JSESSIONID']

(5)獲取請求頭: res.request.headers

(6)請求需要登錄才能訪問的接口

  • http請求時無狀態的,不會記錄上次的請求數據

  • 使用requests發送請求,不會記錄上次請求的cookie信息,需要使用session對象來發送請求

(7)session對象發送請求

  • session對象可以自動傳遞cookie信息(下一次請求會自動攜帶上次請求的cookie)

(8)請求數據提取:jsonpath,數據格式轉換json

  • json類型數據

    • json對象:{ key:value }

    • json數組:[ 1,2,3,4 ]

  • json模塊
    data = {"name":"musen","id":18,"msg":None}
    json_data = '{"name":"musen","id":18,"msg":null}'
    
    # 正確操作
    import json
    # 將json字符串轉為python類型,會自動將null轉為None
    res = json.loads(json_data) # {"name":"musen","id":18,"msg":None}-->json
    # 將python類型轉為json字符串,
    res = json.dumps(json) # {"name":"musen","id":18,"msg":null} -->str
    
    #錯誤操作1. 不能使用dict將json字符串轉成字典
    # res = dict(json_data)
    
    #錯誤操作2. 不能使用過eval將json字符串轉為字典,json中的null在python中無法識別,會當成變量
    # res = eval(json_data)
    • json.loads:把json格式字符串解碼轉換成Python對象  [用例里有null時要使用json.loads,null在Python中認為是變量,所以需要轉為Python對象(None)]

    • json.dumps:實現Python類型轉化為json字符串,返回一個str對象,把一個Python對象編碼轉換成json字符串

    • 注意:json.dumps()序列化時默認使用的ASCII編碼

  • jsonpath:用於是提取json數據中的指定數據(pip install jsonpath)
$ 根節點
.或者[] 取子節點
.. 子孫節點
* 匹配所有元素節點
[] 數組下標,根據內容選值

 

 

 

 

 

 

    • 使用方法:jsonpath.jsonpath(數據對象,jsonpath表達式),沒找到會返回False
import jsonpath
    
    # 獲取member_id
    member_id = jsonpath.jsonpath(Auth_json,"$..id")[0]
   
    # jsonpath 獲取
    token = jsonpath.jsonpath(Auth_json,"$..token")[0]
    token_type = jsonpath.jsonpath(Auth_json,"$..token_type")[0]

    Authorization_value = token_type + ' ' + token
    • 例如:獲取第三個結果的name
import jsonpath

name = jsonpath.jsonpath(result,"$.id[3].name")

(9)接口授權訪問

  • cookie+session

    import requests
    class HandleSessionRequest:
        """
        使用session鑒權
        """
        def __init__(self):
            #  通過session(),發送請求后,會自動將sessionID傳遞session中,保存上一次請求的cookie
            self.se = requests.session()
    
        def send(self, url, method, data=None, params=None, json=None, headers=None):
    
            if method.lower() == 'get':
                return self.se.get(url= url, params=params)
            elif method.lower() == 'post':
                return self.se.post(url= url, data=data, json=json, headers=headers)
            elif method.lower() == 'patch':
                return self.se.patch(url=url, data=data, json=json, headers=headers)
            elif method.lower() == 'patch':
                return self.se.put(url=url, data=data, json=json, headers=headers)
  • token
    • token授權類封裝
import requests
class HandleRequest:


    def send(self, url, method,data=None,params=None,json=None, headers = None):
        '''url:請求地址 http://xxxx:port
           param:傳遞的參數 非必填參數 字典的格式傳遞參數
           method:請求方式  支持get,post,put...
           cookie:請求的時候傳遞的cookie值
           files : None 上傳文件
           
           # 表單類型:application/x-www-form-urlencoded;charset = UTF-8-->data傳參
           # json:Content-Type = application/json; charset=UTF-8-->json傳參
        '''
       
        if method.lower() == 'get':
            return requests.get( url=url, params=params)
        elif method.lower() == 'post':
            return requests.post(url=url, data = data,json=json,headers=headers)
        elif method.lower() == 'patch':
            return requests.patch(url=url, data = data,json=json,headers=headers)
        elif method.lower() == 'patch':
            return requests.put(url=url, data = data,json=json,headers=headers)
    • setupclass中提取的用戶ID和token,如何在用例方法中使用 

      • 方法1:設置全局變量

      • 方法2:保存為類屬性

      • 方法3:寫入配置文件

      • 方法4:保存在臨時變量的類中

        # 臨時變量存放文件
        
        class TestData:
            """專門用來保存一些替換的數據"""
             token = None
        
        
        # 登錄模塊
        
        # 提取並存放token
                    token_type = jsonpath.jsonpath(result, '$..token_type')[0]
                    token_value = jsonpath.jsonpath(result, '$..token')[0]
                    token_data = token_type + ' ' + token_value
                    # 將屬性值token_data 存儲在TestData類中token 
                    setattr(TestData, 'token', token_data)
        
        # 獲取token
         # 將token加到請求頭中
                headers['Authorization'] = getattr(TestData, 'token')
    • 在Excel用例中加一條登錄 ---》在用例代碼中判斷是否有登錄的用例,如果有就提取數據,保存數據---》(設為全局變量---》保存為類屬性---》寫入配置文件---》保存在臨時變量的類中)

      result = self.http.send(url=url, method=method, json=data, headers=headers).json()
                       # -----如果是登錄結果,從響應結果中提取用戶id和token(不放在setupclass中)-----
              if result["msg"] == 'OK' and case["module"] == 'login':
                  #  提取token
                  token_type = jsonpath.jsonpath(result, '$..token_type')[0]
                  token_value = jsonpath.jsonpath(result, '$..token')[0]
                  token_data = token_type + ' ' + token_value
                  setattr(TestData, 'token_data', token_data)  # 將TestData類中屬性token_data存在臨時變量中

       

       

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM