• 接口自动化测试之 —— requests模块详解!


     一、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。
    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036【暗号:csdn999

    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)

    end

  • 相关阅读:
    Linux国产系统无法连接身份证读卡器USB权限解决办法
    VSCode & Intellij IDEA CE 数据库连接
    能否绝地反击
    Mat保存为txt文件
    C++常见知识点2
    【文献整理】基于深度强化学习的知识图谱推理研究
    离线数仓分层(基础)
    Spring Data Elasticsearch集成SpringBoot 2.3.12.RELEASE
    【学习笔记30】JavaScript中数组的5种去重方法
    HTTP协议详解
  • 原文地址:https://blog.csdn.net/MJH827/article/details/134441274