python接口测试中—Requests模块的使用
Requests模块的使用
中文文档API:http://2.python-requests.org/en/master/
1、发送get、post请求
import requests
reponse = requests.get("http://www.baidu.com")
reponse = requests.post("http://www.baidu.com")
2、响应的属性
查看响应内容
response.text 属性
respone.content.decode('utf8') 属性,字节形式的需要使用decode解码
查看响应码 response.status_code 属性
查看响应头 respone.headers 属性
查看cookie信息 respone.cookies 属性
查看请求方法 respone.request 属性
- 如何解决充值接口进行充值之前需要先调用登录接口进行登录?
方法一:可通过创建session对象,自动保存上次请求的cookie信息,可解决鉴权、授权的问题。
import requests
from requests.sessions import Session # 创建一个session对象(会话)
# 作用:自动保存上次请求的cookie信息
session = Session() # 注册接口
register_url = "http://ip:port/futureloan/mvc/api/member/register"
register_data = {'mobilephone':'','pwd':'','regname':'一纪'}
register_response = session.post(url=register_url,data=register_data)
# print(register_response.status_code)
print(register_response.text) # 登录接口
login_url = "http://ip:port/futureloan/mvc/api/member/login"
login_data = {'mobilephone':'','pwd':''}
login_response = requests.get(url=login_url,data=login_data)
print(login_response.text) # 充值接口
rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
rech_data = {'mobilephone':'','amount':''}
rech_response = requests.get(url=rech_url,data=rech_data)
print(rech_response.text)
输出结果为:

方法二:通过在requsets请求中传入cookies信息,也可解决鉴权、授权的问题。
import requests
# 登陆接口
login_url = "http://ip:port/futureloan/mvc/api/member/login"
login_data = {'mobilephone':'','pwd':''}
login_response = requests.post(url=login_url,data=login_data)
print(login_response.text)
print(login_response.cookies)
cookies = login_response.cookies # 充值接口
rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
rech_data = {'mobilephone':'','amount':''}
rech_response = requests.post(url=rech_url,data=rech_data,cookies=cookies)
print(rech_response.text)
输出结果为:

heraders参数应用
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.35 Safari/537.36",
# "Token":"",
"cookie":"JSESSIONID=5039A5FD7567C7C78B8180C50D340A5F", # 请求的cookie信息
"content-Type":"application/x-www-form-urlencoded" # post请求格式
}
rech_response = requests.post(url=rech_url,data=rech_data,headers=headers)
3、封装一个自己的requests类
目的:为了根据用例中的请求方法,来决定发起什么类型的请求。
为了输出loggib日志
HttpRequests类用来直接发送请求不记录cookies信息的;而HttpRequestsCookies类可以记录cookies信息。
import requests
class HttpRequests():
# 直接发送请求而不记录cookies信息的
def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
method = method.lower()
# 判断请求的方法是post还是get
if method == "post":
# 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
if json:
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,json)
return requests.post(url=url,json=json,headers=headers,cookies=cookies)
else:
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
return requests.post(url=url, data=data, headers=headers, cookies=cookies)
elif method == "get":
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
return requests.get(url=url, params=params, headers=headers, cookies=cookies) class HttpRequestsCookies():
# 发送请求且记录cookies信息,给下一次使用
def __init__(self):
# 创建一个session对象
self.session = requests.sessions.Session()
def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
method = method.lower()
# 判断请求的方法是post还是get
if method == "post":
# 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
if json:
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
return self.session.post(url=url,json=json,headers=headers,cookies=cookies)
else:
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
return self.session.post(url=url, data=data, headers=headers, cookies=cookies)
elif method == "get":
# logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
return self.session.get(url=url, params=params, headers=headers, cookies=cookies)
# 断开session连接
def close(self):
self.session.close()
if __name__ == "__main__":
r = HttpRequestsCookies()
# 登录接口
login_url = "http://ip:port/futureloan/mvc/api/member/login"
login_data = {'mobilephone': '', 'pwd': ''}
response = r.request('post',url=login_url, data=login_data)
print(response.text)
# 充值接口
rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
rech_data = {'mobilephone': '', 'amount': ''}
response = r.request('post', url=rech_url, data=rech_data)
print(response.text)
输出结果为:

python接口测试中—Requests模块的使用的更多相关文章
- Python接口测试-使用requests模块发送GET请求
本篇主要记录下使用python的requests模块发送GET请求的实现代码. 向服务器发送get请求:无参数时:r = requests.get(url)带params时:r = requests. ...
- Python接口测试-使用requests模块发送post请求
本篇主要记录下使用python的requests模块发送post请求的实现代码. #coding=utf-8 import unittest import requests class PostTes ...
- Python接口测试,Requests模块讲解:GET、POST、Cookies、Session等
文章最下方有对应课程的视频链接哦^_^ 一.安装.GET,公共方法 二.POST 三.Cookies 四.Session 五.认证 六.超时配置.代理.事件钩子 七.错误异常
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- Python爬虫练习(requests模块)
Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...
- 关于解决Python中requests模块在PyCharm工具中导入问题
问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...
- python 中requests 模块用py2exe生成exe后SSL certificate exception的问题
[('system library', 'fopen', 'No such process'), ('BIO routines', 'BIO_new_file', 'no such file'), ( ...
- Python高手之路【八】python基础之requests模块
1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 ...
- Python 爬虫二 requests模块
requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...
随机推荐
- 四、smarty模板的自定义函数
smarty模板的自定义函数(这里介绍的是常用) 分为三个种类: 1. 变量调节器 2. 函数 3. 块函数 三个种类插件的用法: 1. 变量调解器的用法, <{$var|myfun:a ...
- Jmeter测试工具的下载使用
Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.
- 使用多个fixture和fixture直接互相调用
使用多个fixture 如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组.list或字典,然后从里面取出对应数据. # test_fixture4.py impo ...
- Sar监控
sar 的命令格式为:sar [ -A ] [ -b ] [ -B ] [ -c ] [ -d ] [ -i interval ] [ -p ] [ -q ] [ -r ] [ -R ] [ -t ] ...
- loadrunner 场景设计-手工场景方案(Schedule)设计 Part 1
参考:http://blog.sina.com.cn/s/articlelist_5314188213_1_1.html loadrunner 场景设计-手工场景方案(Schedule)设计 Part ...
- MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其所在全路径节点序列. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合进行逻辑处理,获取全路径节点序列. 2.直接自定义My ...
- oracle导入导出常见问题及解决方案
一.导出 1.导出命令 exp 用户名/密码@实例名 file=路径 2.出现问题:空表不能导出, 解决方案: --查找空表 SELECT TABLE_NAME FROM USER_TAB ...
- cocos2dx[3.2](9) 新回调函数std::bind
自从3.0引用了C++11标准后,回调函数采用的新的函数适配器:std::function.std::bind. 而曾经的回调函数menu_selector.callfunc_selector.ccc ...
- DHCP迁移
情况1:windows 2003迁移到windows 2003或者windows 2008,按照需要以下几个步骤:1.在源DHCP服务器导出DHCP数据文件,执行以下命令netsh dhcp serv ...
- 关于DataFram的.values
DataFram类型的变量a,设a有n个样本,m个特征,当执行语句b = a.values后,b为(n, m)的ndarray矩阵类型,当执行c = b.ravel()后,c为(n*m,)维行向量