美文网首页
Python接口测试- 响应结果 Response

Python接口测试- 响应结果 Response

作者: 猫与测试 | 来源:发表于2019-11-18 00:30 被阅读0次

    我们通过 requests 构造请求发送的目的就是为了通过接口访问其返回数据,也就是响应结果。

    requests 库中提供了很多响应结果 Response 相关的方法,前面已经提到过一些,这里详细罗列一下。

    通过发送请求的相关函数(如requests.get())会获得 Response 对象。通过 Response 对象可以获取到以下的内容:

    • 请求相关内容(request):请求头、请求报文(消息体)
    • 响应相关内容(response):响应头、响应状态码、响应报文、cookies

    拿之前的 post 请求为例:

    import requests
    
    url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'
    data = {
        'username': 'showdoc',
        'password': '123456'
    }
    r = requests.post(url, data=data)  # => r 就是 Response 对象
    

    通过请求得到的 Response 对象可以获取请求、响应和历史:

    请求部分

    请求部分,是当前已发送的请求部分的内容。类似 Fiddler 抓包数据的上半部分。包括请求头、请求报文等信息。

    print(r.request.headers) # => 请求头部信息
    ## {'User-Agent': ..., 'Content-Type': 'application/x-www-form-urlencoded', ...}
    print(r.request.method) # => 请求方法
    ## POST
    print(r.request.url) # => 请求地址
    ## http://127.0.0.1/showdoc/server/index.php?s=/api/user/login
    print(r.request.body)  # => 请求报文
    ## username=showdoc&password=123456
    

    响应部分

    响应部分就是请求发送后,服务端返回的内容。这部分不管是接口测试、网路爬虫、应用开发,都是主要关注的部分。

    • 接口测试分析服务端的响应数据是否符合预期
    • 网络爬虫获取到待爬取的页面 HTML,然后可以提取需要的内容
    • 应用开发需要从结果从读取响应的数据处理、展示

    响应报文部分,可以通过以下三种方法获取:

    • r.json():如果报文结构为 json 格式,则解析为字典格式,也就是说此方法获取的结果是字典。注意,如果报文主体不是 json 格式,则会抛出异常。
    • r.text:text 属性,可以以此方式返回除二进制外的任意数据格式,比如 HTML,XML,Json 均可。网络爬虫中一般使用此方式获取 HTML 页面。
    • r.content:content 属性用于获取二进制的数据格式,比如视频、图片等,常用于网络爬虫中爬取图片、视频等资源。
    # 三种查看响应报文的方法
    print(r.json())
    print(r.text)
    print(r.content)
    

    另外,还可以获取响应头部相关信息,比如响应头、服务器返回的cookies等。

    print(r.cookies)  # => 服务端返回的 cookies
    ## <RequestsCookieJar[<Cookie cookie_token=... for 127.0.0.1/>]>
    print(r.headers)
    ## {'Content-Type': 'text/html', ...}
    print(r.encoding) # => 当前编码
    ## ISO-8859-1
    print(r.status_code) # => 响应状态码
    ## 200
    print(r.reason) # => 状态码描述
    ## OK
    

    如果响应报文显示为乱码,可通过设置encoding属性解决:

    r = requests.post(url, data=data)
    r.encoding = 'utf-8'  # => 一般设置为 utf-8 即可
    print(r.text)
    

    相关文章

      网友评论

          本文标题:Python接口测试- 响应结果 Response

          本文链接:https://www.haomeiwen.com/subject/toxcbctx.html