Python接口测试之如何使用requests发起请求
作者:向阳而生_cc
这篇文章主要介绍了Python接口测试之如何使用requests发起请求问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
认识requests模块
1、requests介绍
requests是一个第三方库,因此首先需要安装这个库,安装三步走:
- 安装:pip install requests
- 在文件中引用这个模块:import requests
- 使用这个库发起一个请求(get请求、post请求等)
2、使用requests发起get或者post请求
- 使用requests的post方法发起post请求
import requests resp = requests.post(api_url,json=req_data)
- 使用requests的request方法发起post请求
import requests resp = requests.request("post",api_url,json=req_data)
说明:这样做,每调用一次requests.request就会去实例化一次Session类
- 所有的请求都在一个会话当中
如果是session鉴权或者coockies鉴权,可以直接利用Session类实例化。
这样做了就不用额外处理了,直接利用会话对象s发起请求,如下所示:
import requests s = requests.Session() resp = s.request(method,api_url,json=req_data)
3、关于post/put/delete请求中,data参数和json参数格式
- json参数
json参数:requests库,针对请求体格式为application/json的,独自写了一个json参数的处理机制,数据类型是字典。因此,如果使用接送传参,只需要将参数写为字典的格式即可发起请求。
- data参数
data参数:data为字典类型,默认的请求体格式为的application/x-www-form-urlencoded。
4、Respobse对象
响应数据返回主要有几下几类:
- resp.status_code -- 获取响应状态码
- resp.headers -- 获取响应头
- resp.text -- 获取响应数据
- resp.json() -- 把json格式的响应数据,转换成python字典
实战
1、发起post请求
- 如何抓包获取要模拟的接口详情:
- 以下编写代码:
import requests # 请求url url = "https://openapiv5.ketangpai.com//UserApi/login" '''请求方法''' method = "post" # 如果是post请求,需要查看请求头当中的content-type的数据格式类型 '''请求体数据''' req_data = { "email":"18812345678", # 随意写的 "password":"f876543", # 随意写的非真实 "remember":"0","code":"", "mobile":"", "type":"login", "reqtimestamp":1697007648530} '''第一种方法:使用requests的post方法发起post请求''' # rt = requests.post(url=url,json=req_data) # '''获取响应的原始数据''' # print(rt.text) # '''查看获取响应的原始数据的数据类型''' # print(type(rt)) # <class 'requests.models.Response'> # '''把响应的json数据,转换成python字典。''' # print(rt.json()) # print(type(rt.json())) # 字典类型 # print(rt.status_code,"\n",rt.headers,"\n\n",rt.cookies) '''第二种方法:使用request方法发送post请求''' respose = requests.request(method,url,json=req_data) print(respose.text) # 结果与上述一致 ''' 使用session方法进行请求数据 ''' s = requests.Session() resp = s.request(method,url,json=req_data) print("http响应数据(原始):",resp.text)
2、发起get请求
盘点一下get请求的参数:
- params参数:get请求,请求参数一般是拼接在url后面的,因此请求参数使用params参数(字典类型)
- headers参数:字典类型。用户项目需要添加到请求头的,传参给它。
- verify参数:遇到发起https请求的时候,要证书。 将verify=False就可以关掉证书要求,可以发送https请求
代码实战
1、抓包找到我们要做get请求实战的接口
2、使用代码编写get请求发送
注意:接口连贯时,需要添加链接点“token”,才可以获取响应的完整信息
from time import sleep import requests # 请求url url = "https://openapiv5.ketangpai.com//UserApi/login" '''请求方法''' method = "post" # 如果是post请求,需要查看请求头当中的content-type的数据格式类型 '''请求体数据''' req_data = { "email":"18829489142", "password":"fangbang666", "remember":"0","code":"", "mobile":"", "type":"login", "reqtimestamp":1697007648530} ''' 连续上个文件的post请求,从登录接口中获取token ''' ''' 使用session方法进行请求数据 ''' s = requests.Session() resp = s.request(method,url,json=req_data) # print("http响应数据(原始):",resp.text) # print(resp.json()) # 获取token,提供给下文 token = resp.json()["data"]["token"] # 暂停6秒针 sleep(6) url = "https://openapiv5.ketangpai.com//TourApi/isTourV2" method = "get" params = { "version" : 32, "courseid" : "MDAwMDAwMDAwMLOGy5WHqbdshNtyoQ" } # 往请求头里面,添加鉴权的token处理 headers = {"token":token} # 发请求的时候,带上请求头 res = requests.request(method,url,params=params,headers=headers) print(res.text)
结果如下:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。