Python接口测试——Requests库进阶应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python接口测试——Requests库进阶应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4438字,纯文字阅读大概需要7分钟。
内容图文
![Python接口测试——Requests库进阶应用](/upload/InfoBanner/zyjiaocheng/784/373a68f1b4f64f1db5e9beae66ec9714.jpg)
cookie设置
设置Cookie
import requests cookie = {'hero': 'alix'} r_cookie = requests.get(base_url + '/cookies', cookies= cookie) print(r_cookie.text)
运行结果
{ "cookies": { "hero": "alix" } }
获取cookie
请求百度首页,然后获取cookie,实现如下:
r = requests.get('http://www.baidu.com') print(type(r.cookies)) print(r.cookies) for key,value in r.cookies.items(): print(key + ":" + value)
调用cookies属性即可成功得到cookies,可以发现它是一个RequestCookieJar类型,然后使用items()犯方法将其转化为元祖组成的俩表,表里输出每一个Cookie的名和值,实现Cookies的遍历解析。
超时
你可以让requests在经过timeout参数设定的描述时间之后停止等待响应。防止某些请求没有响应而一致处于等待状态。
下面的案例故意设置一个很小的超时时间,为了来看一下超时后的一个响应处理。
cookie = {'hero': 'ariliya'} r_timeout = requests.get(base_url + '/cookies', cookies=cookie, timeout=0.001) print(r_timeout.text)
超时异常
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /cookies (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x0000017E45DFC860>, 'Connection to httpbin.org timed out. (connect timeout=0.001)'))
文件上传
Requests可以使用参数files模拟提交一些文件数据,计入有的接口需要我们上传文件,我们同样可以利用它来上传,实现非常简单,实例如下:
file = {'file': open('01.jpg', 'rb')} r_up = requests.post(base_url + '/post', files=file) print(r_up.text)
Tips:上传的文件要放在同一目录
会话对象
在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户i绘画所需的属性及配置信息。这样,当用户在应用程序在web页之间跳转时,存储在Session对象中的变量将不会丢失,二十在整个用户会话中一致存在下去。
比如你先进行了登陆操作,人后打开个人中心详情页面,个人中心详情页面如何知道展示的是刚刚登陆的这个用户的信息,这里就需要使用Session来存储相关信息。
在接口测试过程中接口之间经常有依赖关系,比如下面这两个请求义格式cookie另一个时获取cookie,在没有session保存几职的情况下,第二个接口无法获取第一个接口设置的cookie值
# 设置cookie r = requests.get(base_url + '/cookies/set/hero/leesin') print(r.text) # 获取cookie,这里cookie为空,需要session保存在获取cookie r01 = requests.get(base_url + '/cookies') print(r01.text)
返回值
{ "cookies": { "hero": "leesin" } } { "cookies": {} }
Requests的会话对象让你能够跨请求保持某些参数。他也会在同一个session实例发出的所有请求之间保持cookie。
# 生成会话对象 s = requests.session() # 设置cookie r = s.get(base_url + '/cookies/set/hero/leesin') print(r.text) # 获取cookie r01 = s.get(base_url + '/cookies') print(r01.text)
返回值
{ "cookies": { "hero": "leesin" } } { "cookies": { "hero": "leesin" } }
所以,利用session可以做到模拟同一个会话,而且不用单行cookies的问题,通常用于模拟登陆成功之后再进行下一步的操作
代理设置
代理(Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络中断(一般为客户端)通过这个服务与另一个网络中断(一般为服务器)进行非直接的连接
代理服务器位于客户端和访问互联网之间,服务器接收客户端的请求,然后代替客户端向目标网站发出请求,所有的流量路由均来自代理服务器的ip地址,从而获取一些不能直接获取的资源。
对于有些接口,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模频繁请求(如性能的是)服务器可能就会开启验证;甚至把ip禁掉。为了防止这种情况发生就需要代理来解决这个问题,在Requests中需要通道proxies这个参数,在爬虫中常会用到代理。
代理设置
proxie = {'http': 'http://114.230.69.81:9999'} r = requests.get(base_url + '/get', proxies=proxie) print(r.text)
身份认证
很多接口都需要身份认证,Request支持多种身份认证
用下面案例验证2种省份类型:BasicAuth 和 DigestAuth
from requests.auth import HTTPBasicAuth from requests.auth import HTTPDigestAuth #BasicAuth r_basic = requests.get(base_url + '/basic-auth/hero/leesin', auth= HTTPBasicAuth('hero', 'leesin')) print(r_basic.text) #DigestAuth r_digest = requests.get(base_url + '/digest-auth/auth/hero/leesin', auth= HTTPDigestAuth('hero', 'leesin')) print(r_digest.text)
返回值
{ "authenticated": true, "user": "hero" } { "authenticated": true, "user": "hero" }
流式请求
有一些接口返回值比较特殊,不是单词返回一个结果,二十多个结果,比如,某个查询接口,返回值为排名榜前10的商品信息。
实践案例
请求接口如下:
http://httpbing.org/stream/{num}
num表示返回结果集的数量,比如输入10则返回10个不同的id结果
针对这种类型的接口我们对结果集的处理需要使用迭代方法iter_lines()来处里:
import json r = requests.get(base_url + '/stream/10', stream = True) # print(r.encoding) # 如果响应内容没有设置编码,则默认设置为utf-8 if r.encoding is None: r.encoding = 'utf-8' # 对响应结果进行迭代处理 for line in r.iter_lines(decode_unicode=True): if line: data = json.loads(line) print(data['id'])
返回值
0 1 2 3 4 5 6 7 8 9
内容总结
以上是互联网集市为您收集整理的Python接口测试——Requests库进阶应用全部内容,希望文章能够帮你解决Python接口测试——Requests库进阶应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。