一、requests背景

Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

二、requests安装

利用pip安装:
$ pip install requests

三、requests使用

GET请求

1.基本的GET的请求

response = requests.get("http://www.baidu.com/")
#也可以这样写
response = requests.request("get","http://www.baidu.com/")

2.添加headers 和 params

如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用 params 参数。

key = {'key': 'CC'}
headers = {
"User-Agent": "Mozilla/5.0"}
response = requests.get("http://www.baidu.com/s?", params=key, headers=headers)
print(response.text)# 查看响应内容,response.text 返回的是Unicode格式的数据
print(response.content)# 查看响应内容,response.content返回的字节流数据
print(response.status_code)# 查看响应码

如果你想取文本,可以通过response.text;如果想取图片/文件,则可以使用response.content。

POST方法

1.基本的POST的请求

response = requests.post("http://www.baidu.com/",data = data)

2.body带参数

formdata = {
"type": "AUTO",
"doctype": "json",
"key": "www",
"ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers) print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

注意:
打印的结果出现中文乱码,使用json.dupms(response, ensure_ascii=False))解决

Session

一般利用Session在跨请求的时候保持某些参数,比如实现登录后才能访问其他页面

# 1. 创建session对象,可以保存Cookie值
session = requests.session() # 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"} # 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data) # 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

注意事项:

1.在使用requests去请求一个接口时,出现报错的情况,但是这个接口本身却没有问题。这是因为接口的请求参数有两种情况:简单类型(一般少于3个)和复杂对象类型。

解决方法:在headers中定义一下这两种参数的类型
简单类型:headers={"Content-Type": "application/x-www-form-urlencoded"}
复杂对象类型:headers={"Content-Type":application/json}
2.某些HTTPS请求存在 SSL证书验证
解决方法:response = requests.get("https://www.baidu.com/", verify=False)

四、requests扩展

1.requests请求失败后,增加重试机制(若失败,将会重试3次)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

2.使用grequests实现异步请求

urls = [
'http://www.url1.com',
'http://www.url2.com',
'http://www.url3.com',
'http://www.url4.com',
'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.自定义cookies

我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies

我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies
# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'} session.post('http://', cookies=cookie)

4.统计一个API请求花费的时间

session.get(url).elapsed.total_seconds()

5.设置请求超时

session.get(url, timeout=15)

6.文件上传

Requests利用files作为参数模拟提交文件数据

file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
r =requests.post('http://',files=file)
print(r.text)

五、总结

如果你觉得此文对你有帮助,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:

软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:来自公众号:软测之家
出处:https://www.cnblogs.com/csmashang/p/12713012.html
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

接口自动化测试之-requests模块详解的更多相关文章

  1. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  2. python接口自动化测试之requests库详解

    前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...

  3. 接口自动化测试之HTTP协议详解

    协议 简单理解,计算机与计算机之间的通讯语言就叫做协议,不同的计算机之间只有使用相同的协议才能通信.所以网络协议就是为计算机网络中进行数据交换而建立的规则,标准或约定的集合. OSI模型 1978年国 ...

  4. python接口自动化发送get请求 详解(一)

    前言:接口自动化实现自动化脚本比较稳定,主要用到requests模块,后面我会把这个模块单独拉出来写一下. 一.环境安装 1.用pip安装requests模块 >>pip install ...

  5. Python—requests模块详解

    1.模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用co ...

  6. Python3之Requests模块详解

    # 导入 Request模块 # 若本机无自带Request模块,可自行下载或者使用pip进行安装 # python版本Python3 import requests import json #### ...

  7. python--requests模块详解

    GET请求 首先构造一个最简单的get请求,请求的链接为http://httpbin.org/get import requests 2 r = requests.get("http://h ...

  8. Appium移动端自动化测试之应用操作详解(四)

    应用操作篇 1.1).安装应用 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.0.0.0', 'deviceNam ...

  9. Requests实践详解

    Requests是什么 Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 如果你看过上篇文章关于urllib库的使用,你会发现, ...

随机推荐

  1. Hacker101-CTF | Postbook

    Hacker101-CTF | Postbook mirror王宇阳 水平有限,不足之处还望指教 ^_^ 看看这个一大堆英文介绍 With this amazing tool you can writ ...

  2. C3p0连接池-Java(新手)

    1 数据库连接池 C3p0 和 Druid 1.1 定义 : 本质上就是个容器(集合) 存放数据库连接的容器 当系统初始化以后 容器被创建 容器中就会申请一些连接对象 当用户来访问的数据库的时候 从容 ...

  3. VsCode代码段添加方法

    VsCode代码段添加方法 我们在编写代码的过程中,常常会遇到一些固定的结构或常用的处理方法. 编写耗费时间尽力,这时我们想到了添加代码段功能,帮助我们快速的完成编写. 下面以VsCode为例子: 我 ...

  4. 「每天五分钟,玩转 JVM」:对象访问定位

    前言 在「对象内存布局」一节中,我们了解到对象头中包含了一个叫做类型指针的东西,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例.但是,并不是所有的虚拟机都是这么去做的.不 ...

  5. C# 基础知识系列- 1 数据类型

    常见数据类型 C#的类型一般分为值类型.引用类型两大类型. 值类型的实例存放在栈中,引用类型会在栈中放置一个指针指向堆中的某一块内容. C#为我们内置了几个数据类型供我们使用: 关键词简写 对应的类全 ...

  6. GitLab → 搭建私有的版本控制的托管服务平台

    开心一刻 睡着正香,媳妇用力把我晃醒说:“快起来,我爸来了.” 我一下醒了,手脚熟练的把衣服一抱,滚到床底,顺便把鞋也收了进去 媳妇蹲下无奈的说:“快出来!咱俩都结婚半年了.” 我:“对哦,搞习惯了” ...

  7. webpack打包es6代码

    1.简单描述一下es6的模块导入和导出的语法: //导出:export var aa = 10;export function demo(){} //不能写成:var aa = 10;export a ...

  8. Python第一章-编码规范

    Python的基础知识 一.编码规范 PEP8[^ 注] 编码规范 Guido的关键点之一是:代码更多是用来读而不是写.编码规范旨在改善Python代码的可读性. 风格指南强调一致性.项目.模块或函数 ...

  9. PyTorch 系列教程之空间变换器网络

    在本教程中,您将学习如何使用称为空间变换器网络的视觉注意机制来扩充您的网络.你可以在DeepMind paper 阅读更多有关空间变换器网络的内容. 空间变换器网络是对任何空间变换的差异化关注的概括. ...

  10. TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变

    去年TensorFlow官方推出了模型优化工具,最多能将模型尺寸减小4倍,运行速度提高3倍. 最近现又有一款新工具加入模型优化"豪华套餐",这就是基于Keras的剪枝优化工具. 训 ...