Requests库以及底层方法调用逻辑
def get(url, params=None,**kwargs):
url:接口地址
params:参数
**kwargs:可变长度的字典
def post(url, data=None,json=None,"*kwargs):
url:接口地址
data:参数(表单---X-www-form-urlencoded)
json:参数(JSON---application/json)
postman四种传参方式:
1.form-data(既有表单也有文件上传) files
2.x-www-form-urlencoded(纯表单) data
3.raw(json:application/json)(传json格式的参数)json
4.binary(application/octrent-stream):(二进制文件)datal
**kwargs:可变长度的字典
def put(url,data=None,**kwargs):
url:接口地址
data:参数
def delete(url,**kwargs):
url:接口地址
------------------------------------------------------------------------
上面的四个方法其实底层都是调用的request方法
requests.request("get",url,params=params,**kwargs)
-------------------------------------------------------------------------
requests.request()调用的是session.request方法
session.request(method=method, url=url,**kwargs)
def request{
self,
method, 请求方式
url, 请求路径
params = None, params参数
data = None, data参数
headers = None,请求头
cookies = None, cookies信息
files = None, 文件上传
auth = None, 鉴权
timeout = None,超时
allow_redirects = True,重定向
proxies = None, 设置代理
hooks = None, 钩子
stream - None, 文件下载
verify = None, 证书验证
certIone, CA证书
json = None, json参数
}:
requests.request()和session.request()的区别:前者的每个请求都是独立的,后者自动的关联所有请求的cookie信息。
Requests响应部分:
res.text 返回字符串形式的结果
res.json() 返回字典形式的结果
res.content() 返回字节类型的结果
res.status_code 返回状态码
res.reason 返回状态信息
res.cookie 返回cookie信息
res.encoding 返回编码格式
res.headers 返回响应头
res.request.xxx 得到请求数据
Requests接口自动化测试实战
接口关联三个层次:
1.通过类变量保存中间变量实现接口关联。
2.通过单独的文件保存中间变量实现接口关联。
3.极限封装成零代码的方式实现接口关联。
工
接口关联两种方式:
(1)正则提取实现接口关联
re.seach() 通过正则匹配一个值,通过下标(1]取值,没有匹配到返回None.
re.findall() 通过正则匹配多个值,返回List,通过下标取值,没有匹配到返回None
(2)JsonPath提取实现接口关联
jsonpath.jsonpath()返回一个列表,通过下标取值,没有找到返回None.
import requests
import jsonpath as jsonpath
class TestApi:
# 类变量
access_token = ""
username = "33828"
password = "C4CA4238A0B923820DCC509A6F75849B"
Token = "3A06C898-C41E-4635-A595-7EBCDFD420C0"
def test_get_token(self):
url = "http://192.168.5.218:8057/api/auth/Authorization/GetAccessToken"
json_data = {
"grant_type": "password",
"username": TestApi.username,
"password": TestApi.password
}
res = requests.post(url=url, json=json_data)
lis = jsonpath.jsonpath(res.json(), '$.access_token')
TestApi.access_token = res.json()["access_token"]
print(res.status_code)
print(res.json())
print(lis[0])
print(TestApi.access_token)
def test_get_label(self):
label_url = "http://192.168.5.218:8057/api/label/LabelProvider/GetLabelBatchExt"
headers_data = {
"Token": TestApi.access_token,
"Content-Type": "application/json"
}
order_json = {
"OrderIdlst": ["F33828240222000D"],
"Format": 3,
"Token": TestApi.Token,
"UAccount": TestApi.username,
"Password": TestApi.password
}
res = requests.post(url=label_url, headers=headers_data, json=order_json)
print(res.json()["Data"])
if __name__ == '__main__':
TestApi().test_get_token()
TestApi().test_get_label()