(1)安裝命令:pip install requests
(2)請求
-
-
**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
-
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()】
-
-
patch發送請求: patch(url,data=None,**kwargs)
-
delete發送請求: delete(url, **kwargs)
(3)獲取響應數據
-
res.text:
-
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.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授權類封裝
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,如何在用例方法中使用
-
-
-
-
# 臨時變量存放文件 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存在臨時變量中
-