Python接口测试- 响应结果 Response
2019-11-18 本文已影响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)