(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存在临时变量中
-