接口自动化测试之-requests模块详解

发布于:2024-05-07 ⋅ 阅读:(38) ⋅ 点赞:(0)

一、requests背景

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

二、requests安装

利用pip安装
$ pip install requests

三、requests使用

GET请求

1.基本的GET的请求

  1. response = requests.get("http://www.baidu.com/")

  2. #也可以这样写

  3. response = requests.request("get","http://www.baidu.com/")

2.添加headers 和 params

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

  1. key = {'key': 'CC'}

  2. headers = {

  3. "User-Agent": "Mozilla/5.0"}

  4. response = requests.get("http://www.baidu.com/s?", params=key, headers=headers)

  5. print(response.text)# 查看响应内容,response.text 返回的是Unicode格式的数据

  6. print(response.content)# 查看响应内容,response.content返回的字节流数据

  7. print(response.status_code)# 查看响应码

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

POST方法

1.基本的POST的请求

response = requests.post("http://www.baidu.com/",data = data)
2.body带参数
  1. formdata = {

  2. "type": "AUTO",

  3. "doctype": "json",

  4. "key": "www",

  5. "ue": "UTF-8",

  6. }

  7. url = "http://auto-installment/v1/loan-credit-check"

  8. response = requests.post(url,data = data,headers=headers)

  9. print(response.text)#显示返回结果

  10. print(response.json())# 如果是json文件可以直接显示

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

Session

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

  1. # 1. 创建session对象,可以保存Cookie值

  2. session = requests.session()

  3. # 2. 需要登录的用户名和密码

  4. data = {"username": "mxxxx", "password": "1233444"}

  5. # 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里

  6. session.post("https://www.jianshu.com/sign_in", data=data)

  7. # 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面

  8. 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次)

  1. request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)

  2. session.mount('https://',request_retry)

 2.使用grequests实现异步请求

  1. urls = [

  2. 'http://www.url1.com',

  3. 'http://www.url2.com',

  4. 'http://www.url3.com',

  5. 'http://www.url4.com',

  6. 'http://www.url5.com',

  7. ]

  8. resp = (grequests.get(u) for u in urls)

  9. grequests.map(resp)

3.自定义cookies

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


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

  2. # 自定义cookies

  3. cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}

  4. session.post('http://', cookies=cookie)

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

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

5.设置请求超时

session.get(url, timeout=15)

6.文件上传

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

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

  2. r =requests.post('http://',files=file)

  3. print(r.text

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。