首先安裝好yaml, 命令:pip install PyYAML
第一步:新建yaml文件,並寫入接口數據
新建yaml文件
寫入接口所屬數據
上圖代碼
# 【login】:登錄接口名稱(自定義) login1: # 【method】:請求方法,post或get method: "post" # 【url】:請求地址(字符串格式) url: "https://www.baidu.com" # 【head】:請求頭信息(字典格式) head: "Content-Type": "application/json;charset=UTF-8" # 【data】:請求體(字典格式) data: "uuid": "BD123456" "password": "BD111111" # 登錄接口2 login2: method: "post" url: "https://www.baidu.com" head: "Content-Type": "application/json;charset=UTF-8" data: "uuid": "BD123456" "password": "BD111111"
第二步:寫一個打開yaml文件的公用方法(另建一個文件py)
編寫打開yaml文件方法
上圖代碼
import yaml def load_yaml(path): """ :param path: yaml文件地址 :return: 返回yaml文件數據 """ file = open(path, 'r', encoding='utf-8') data = yaml.load(file, Loader=yaml.FullLoader) # 表示全加載文件 return data
第三步:寫一個接口請求方法(另建一個文件)
上圖代碼
import json import requests from UI.Common.OpenYamlFileMethod import load_yaml def test_url(txt='status_code'): """ 接口請求 :param url_title: 需要測試的yaml文件中的接口標題 :param txt: 需要返回相應的內容,默認返回相應狀態碼 :return: """ # 將yaml文件數據傳入 data_yaml = load_yaml(r'../UI/TestExampleFile/UrlYamlFile.yaml') # 從yaml文件中獲取接口標題,並傳入data。(指定哪條接口測試) data = data_yaml['login'] # data是一個字典,需將數據拆分出來保存到變量中, 然后才能引用到接口中,不用變量直接引用會報錯 url = data['url'] method = data['method'] datas = data['data'] heads = data['head'] # 用於保持會話(session) s = requests.session() # getattr:對象映射。json.dumps:將datas的數據轉換成json格式。(method: 請求方法;url: 請求地址;datas: 請求體;head: 請求頭) res = getattr(s, method)(url=url, data=json.dumps(datas), headers=heads) # 對象映射, 默認返回相應狀態碼 print(getattr(res, f'{txt}')) test_url()
requests模塊傳請求體參數時, 有兩種方式:
data傳參:
數據報文:當傳入類型為dict字典類型,默認情況下以form表單的方式傳參,格式:a=1&b=2&c=3
數據報文:當傳入類型為sit類型,默認情況下:text/plain
json傳參:
不管是dict還是str,默認格式都為:{"a"=1,"b"=2}
數據格式轉換:
json.dumps(data) 序列化:把字典格式數據轉換為str格式
json.loads(data) 反序列化:把str格式轉換成字典格式
請求方法
requests.get()
requests.post()
requests.put()
requests.session(): 用於保持會話(session)
除了requests.session()外,其他請求方法的參數都差不多,都包含url,params, data, headers, cookies, files, auth, timeout等等
請求參數
url: 字符串格式,參數也可以直接寫到url中params:url參數,字典格式
data: 請求數據,字典或字符串格式
headers: 請求頭,字典格式
cookies: 字典格式,可以通過攜帶cookies繞過登錄
files: 字典格式,用於混合表單(form-data)中上傳文件
auth: Basic Auth授權,數組格式 auth=(user,password)
timeout: 超時時間(防止請求一直沒有響應,最長等待時間),數字格式,單位為秒
響應解析
res.status_code: 響應的HTTP狀態碼
res.reason: 響應的狀態碼含義
req.text:響應的文本格式,按req.encoding解碼
req.content: 響應的二進制格式
req.encoding: 解碼格式,可以通過修改req.encoding='utf-8'來解決一部分中文亂碼問題
req.apparent_encoding:真實編碼,由chardet庫提供的明顯編碼
req.json(): (注意,有括號),響應的json對象(字典)格式,慎用!如果響應文本不是合法的json文本,或報錯
req.headers: 響應頭
req.cookies: 響應的cookieJar對象,可以通過req.cookies.get(key)來獲取響應cookies中某個key對應的值
參考文章:https://www.cnblogs.com/superhin/p/10338930.html