Python接口测试——Requests库进阶应用

Posted youngleesin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python接口测试——Requests库进阶应用相关的知识,希望对你有一定的参考价值。

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库

接口测试框架实战与自动化进阶指南!

python 结合 requests库实现接口自动化测试

python3接口测试(requests库)

使用Requests库实现api接口测试(Python)

Python接口测试——Requests库的基本使用