• 接口测试之Python Requests基本功能使用


    一、Requests简介

    进行接口测试需要发送HTTP请求,Python最基础的 HTTP 库有 Urllib、Httplib2、Requests、Treq 等,这里我们推荐使用Requests库来进行接口测试。

    Requests 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。目前很多Python爬虫也使用Requests

    Requests中文文档

    Requests github项目主页

    1.1、功能特性

    • Keep-Alive & 连接池
    • 国际化域名和 URL
    • 带持久 Cookie 的会话
    • 浏览器式的 SSL 认证
    • 自动内容解码
    • 基本/摘要式的身份认证
    • 优雅的 key/value Cookie
    • 自动解压
    • Unicode 响应体
    • HTTP(S) 代理支持
    • 文件分块上传
    • 流下载
    • 连接超时
    • 分块请求
    • 支持 .netrc(用户配置脚本文件)

    1.2、Requests安装

    使用pip安装命令如下,-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com 是使用镜像加速下载用的:

    pip install requests -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

    二、Requests 基础应用

    2.1、发送不同类型HTTP请求

    import requests
    
    base_url='http://httpbin.org'
    
    #发送GET类型的请求
    r=requests.get(base_url+'/get')
    print(r.status_code)
    
    #发送Post类型请求
    r=requests.post(base_url+'/post')
    print(r.status_code)
    
    #发送PUT类型请求
    r=requests.put(base_url+'/put')
    print(r.status_code)
    
    #发送Delete类型请求
    r=requests.delete(base_url+'/delete')
    print(r.status_code)

    执行结果,200为请求返回的状态码,表示请求成功:

    2.2、传递URL参数

    一般在GET请求中我们使用查询字符串(query string)来进行参数传递,在requests库中使用方法如下:

    import requests
    
    base_url='http://httpbin.org'
    
    param_data={'key1': 'value1', 'key2': 'value2'}
    r=requests.get(base_url+'/get',params=param_data)
    print(r.text)

    执行结果如下:

    2.3、请求头定制

     如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。

    import requests
    
    base_url='http://httpbin.org'
    
    param_data={'key1': 'value1', 'key2': 'value2'}
    header={'User-Agent':"Mozilla/5.0"}
    r=requests.get(base_url+'/get',params=param_data, headers=header)
    print(r.text)

    执行结果如下:

    注意:很多爬虫程序都会定制headers来避免被封。

    2.4、响应内容

    当请求发送成功之后,我们可以获取响应内容。如响应状态码,响应头信息、cookies信息、响应体内容。

    import requests
    
    base_url='http://httpbin.org'
    
    data={'key1': 'value1', 'key2': 'value2'}
    header={'User-Agent':"Mozilla/5.0"}
    r=requests.post(base_url+'/post',data=data, headers=header)
    #获取响应状态码
    print(r.status_code)
    #获取响应头信息
    print(r.headers)
    #将响应的cookies
    print(r.cookies)
    #获取响应内容
    print(r.text)
    #将响应的内容以Json格式返回
    print(r.json())

    2.5、Post请求中发送数据

    1、在Post请求中发送一些编码为表单形式的数据,要实现这个,只需简单地传递一个字典给data参数。你的数据字典在发出请求时会自动编码为表单形式,在Requests中用法如下:

    import requests
    
    base_url='http://httpbin.org'
    
    data={'key1': 'value1', 'key2': 'value2'}
    r=requests.post(base_url+'/post',data=data)
    print(r.text)

    返回结果如下:

    2、还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,

    import requests
    
    base_url='http://httpbin.org'
    
    payload = (('key1', 'value1'), ('key1', 'value2'))
    r=requests.post(base_url+'/post',data=payload)
    print(r.text)

    执行结果:

     3、传递json数据:

    import requests
    import json
    
    base_url='http://httpbin.org'
    
    payload = {'some': 'data'}
    r=requests.post(base_url+'/post',data=json.dumps(payload))
    print(r.text)

    运算结果:

    三、Request的进阶

    3.1、上传文件

    Requests 使得上传多部分编码文件变得很简单

    import requests
    
    base_url='http://httpbin.org'
    files = {'file': open('report.xls', 'rb')}
    r=requests.post(base_url+'/post',files=files)
    print(r.text)

    执行结果

    可以显式地设置文件名,文件类型和请求头:

    import requests
    
    base_url='http://httpbin.org'
    files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
    r=requests.post(base_url+'/post',files=files)
    print(r.text)

    执行结果:

    3.2、超时

    你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

    import requests
    
    base_url='http://httpbin.org'
    
    r=requests.get(base_url+'/get',timeout=0.01)
    print(r.text)

    3.3、Cookie设置

     cookie设置

    import requests
    
    base_url='http://httpbin.org'
    
    cookie={'test':'test1234'}
    r=requests.get(base_url+'/cookies',cookies=cookie)
    print(r.text)

    cookie获取

    import requests
    
    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 的遍历解析。

    3.4、保持会话对象

    在接口测试过程中接口之间经常有依赖关系,比如下面这两个请求一个是设置Cookie,另外一个是获取cookie,在没有Session保存机制的情况下,第二个接口无法获取第一个接口设置的Cookie值。

    Request的会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。具体使用如下:

    import requests
    
    base_url='http://httpbin.org'
    
    #生成会话对象
    s=requests.Session()
    #设置Cookie
    r=s.get(base_url+'/cookies/set/user/test')
    print(r.text)
    #获取Cookie
    r=s.get(base_url+'/cookies')
    print(r.text)

    执行发现,两个请求的cookies是一样的。

    3.5、SSL证书验证

    Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的,如果证书验证失败,Requests 会抛出 SSLError:
    如果不想验证SSL则可以使用verify参数关闭验证SSL。

    import requests
    
    # r=requests.get('https://www.12306.cn')
    #关闭验证SSL
    r=requests.get('https://www.12306.cn',verify=False)
    print(r.text)

    3.6、同域名,不同环境请求配置

    当我们在实际过程中,可能会碰到域名相同,但是是部署在不同的服务器上,这个时候可以通过如下配置请求:

    import requests
    
    #设置请求地址
    test_url = "https://127.0.0.1:8000"
    pro_url =  "https://192.168.48.63"
    #设置请求头域名
    headers = {"Host":"test.ops.com"}
    
    r=requests.get(test_url+'/getPage.json',verify=False,headers=headers)
    
    print(r.text)
  • 相关阅读:
    springboot设置banner
    pytorch(分布式)数据并行个人实践总结——DataParallel/DistributedDataParallel
    jupyter之配置自己喜欢的python环境
    ImportError: DLL load failed: 找不到指定的模块;ImportError: numpy.core.multiarray failed to import 报错解决
    multitask learning 相关论文资源
    python如何删除二维或者三维数组/列表中某维的空元素
    finished with exit code -1073740791 (0xC0000409)解决方案
    Keras学习系列——神经网络层组件
    腾讯云搭建个人博客wordpress
    多任务学习相关资料整理
  • 原文地址:https://www.cnblogs.com/watery/p/14071055.html
Copyright © 2020-2023  润新知