【Pytest requests模块&】
一、requests模块
是一个第三方库,主要用于发送http请求,主要做接口自动化
1、安装pip install requests
2、requests模块的全局
请求:
- requests.get() 发送get请求
- get(url, params=None, **kwargs): url请求路径,params传递参数,**kwargs可变长度字典用于传递其他参数
- requests.post() 发送post请求
- post(url, data=None, json=None, **kwargs): url请求路径,data传递参数,json传递参数,**kwargs可变长度字典用于传递其他参数
- data和json两者都是传参,区别是什么?主要区别是传递的参数所依赖的头类型
- 请求的参数是:form-data 代表这是表单传参或者文件上传,type=file; Content-Type:multipart/form-data;
- 请求的参数是:x-www-form-urlencoded 代表表单传参(k1=v1,k2=v2) Content-Type:application/x-www-form-urlencoded(data传参)
- 请求的参数是:raw,代表原始格式传参 text:Content-Type:text/plain(data传参) javascript: Content-Type:application/javascript json: Content-Type:application/json(json传参) html: Content-Type:text/html xml: Content-Type:application/xml
- 请求的参数是:binary,代表原始格式传参 Content-Type:application/octent-stream
data传参为表单传参:默认的请求头是COntent-Type:application/x-www-form-urlencoded,请求参数是纯键值对的dict,如:{k1:v1,k2:v2}
data传参为文本传参:默认的请求头:text/plan,参数:string类型
json传参为json传参:默认的请求头:application/json,参数:dict类型
json是包括有键值对和列表的dict类型
- requests.delete() 发送delete请求
- requests.put() 发送put请求
- requests.request() 发送所有请求
- request(method, url, **kwargs) --->从源码看get,post这些方法调用的是request方法,而request最终会调用session.request() [重点看此方法]
-
method, 请求方式 url, 请求路径 params=None,get请求传参 data=None, post请求和put请求传参 json=None post请求传参 headers=None,请求头 cookies=None, cookie信息 files=None,文件上传 -----------下面只了解即可------------------- auth=None, 鉴权 timeout=None, 超时 allow_redirects=True, 是否允许重定向 proxies=None,设置代理 hooks=None, stream=None,文件下载 verify=None, ssh认证 cert=None,CA证书
- request(method, url, **kwargs) --->从源码看get,post这些方法调用的是request方法,而request最终会调用session.request() [重点看此方法]
- requests.session() 发送回话对象
响应
import requests rep = requests.request() rep.text # 返回字符串的数据 --适用:文本 rep.content # 返回字节格式的数据 --适用:图片或文件 rep.json()# 返回字典格式的数据 --适用:json rep.status_code # 状态码 rep.reason # 状态信息 rep.cookies # 返回cookie信息 rep.encoding # 返回编码格式 rep.headers # 返回响应头信息
二、接口实战
json.dumps() 字典转换成字符串
json.loads() 字符串转换成字典
1、接口常见请求方式:get post put delete
2、请求参数类型:键值对,JSON格式,文件格式
#案例:get接口请求、设计字段的用例及断言
import requests import time import json import pytest # 发送get请求 url = 'http://tkio-receive.solar-engine.com/receive/turl/Bf6JBva' global parms parms = { # 触点传参时间。is_s2s=1时必传,0时选传。不同渠道有可能传多种格式,详见需求。限制32位字符内。短链传参。 'ry_touchpoint_ts': int(round(time.time() * 1000)), 'ts': int(round(time.time() * 1000)), # 集成方式。is_s2s=1为服务器上报触点,0为客户端上报触点。0或1时有不同的参数非空校验,详见需求。固定为0或1。都必传 'is_s2s': '1', # 操作系统。限制16字符内。都选传。短链传参。暂不与app_platform互相做校验。 'os': 'ios' } # param参数转换成json格式 json.dumps(parms) # 封装get请求 def send_get(): global parms rep = requests.get(url=url,params=parms,timeout=10, verify=False) print(type(parms)) print(rep.url) # 把返回的reponse转换成字典格式 rep = json.loads(rep.text) print(type(rep)) return rep # 针对os字段做测试 def test_idfa1(): # case1:修改parms里面os的值为2 parms['os'] = '2' re = send_get() assert re["status"] == 119 def test_idfa2(): # case2:修改parms里面os的值为2 parms['os'] = '3' re = send_get() assert re["status"] == 119 if __name__ == '__main__': pytest.main()
# 案例:post请求的接口