requests库写接口测试框架初学习
https://www.runoob.com/http/http-methods.html
https://blog.csdn.net/lihao21/article/details/51857385
https://blog.csdn.net/u011655220/article/details/80285608
https://2.python-requests.org//zh_CN/lat
正文:
Python中requests的开发哲学:
Requests 是以 PEP 20 的箴言为中心开发的
- Beautiful is better than ugly.(美丽优于丑陋)
- Explicit is better than implicit.(直白优于含蓄)
- Simple is better than complex.(简单优于复杂)
- Complex is better than complicated.(复杂优于繁琐)
- Readability counts.(可读性很重要)
- 对于 Requests 所有的贡献都应牢记这些重要的准则。
Python接口测试框架搭建基本思路流程图:
利用python中的requests库或urllib.request库进行框架中需要用到的功能的调用以及实现。
在python中requests库的便利性以及包容性和可操作性都优于urllib.request库。
1. 发送http(https)请求
发送http(https)请求并构造一个url来获得一个response对象,由此来在以后的步骤中获取http(https)请求的响应结果,发送请求的方式有以下八种:
requests.get(‘url’, params=None, **kwargs)
#请求指定的页面信息,并返回实体主体
requests.post(‘url’, data=None, json=None, **kwargs)
#向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
requests.put(‘url’, data=None, **kwargs)
#从客户端向服务器传送的数据取代指定的文档的内容
requests.delete(‘url’, **kwargs)
#请求服务器删除指定的页面
requests.head(‘url’, **kwargs)
#类似get,返回的响应中没有具体的内容,用于获取报头
requests.patch(url, data=None, **kwargs)
#回显服务器收到的请求,主要用于测试或诊断
Requests.options(‘url’,**kwargs)
#允许客户端查看服务器的性能
其中url为新request对象的url,params为要在request对象的查询字符串中发送的字典或者字节。Data参数为字典或元组列表、字节或类似文件的对象,此参数在request的响应正文中发送。Json参数为json数据,此数据在request的响应正文中发送。
集成输出用法为变量名.url。
2. 请求HTTP响应正文
一个http响应的格式大多为响应行/响应报头/(空行)响应正文。利用requests 库对此响应进行封装将其封装成一个response对象,在调用时可以从此对象中获取响应正文的内容。
利用response.text方法可以对响应的正文文本内容进行获取,使用方法为:
变量名.text
Requests库会自动对响应正文进行解码,若response.encoding为空,编码是通过chardet.detect方法(根据给定字节来进行猜测来返回它的编码,一般都是很准的)来进行获取的。当可以完全确定响应的编码方式,也可以先对response.encoding中的charset进行设置,然后再通过response.text获取响应正文,这时解码所得的响应正文就是charset的值了。
利用response.content可以获取响应正文中的二进制字节内容,如果响应正文的内容形式确定是一json串,则可以使用response.json()方法对响应正文进行json decode操作并返回一个字典项来对此json串进行解码翻译。
变量名.content
变量名.json
3. 返回并识别响应状态
在requests库中利用status_code()方法来对http请求响应的状态码进行标识,其使用方法为:
变量名.status_code
在对状态码进行标识后,利用raise_for_status方法对状态码进行状态识别,如果响应返回的是404一类,使用此方法会抛出异常,若返回的状态码为200,则使用此方法并不会抛出异常。此方法的使用格式为:
变量名.raise_for_status
4. 获得http响应结果的头部的相关信息或定制http请求的头部。
Requests库中的headers属性是一个字典,可以由此获得http响应结果的头部的相关信息,其使用方法为:
变量名.headers
Requests支持定制http请求的头部。为此,我们只需要构造一个字典,然后传给requests.get()的headers参数即可。
url = 'http://httpbin.org/headers'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print r.text
http://httpbin.org/headers 这个链接可以输出请求的头部,由于我们修改了请求头的user-agent字段,所以会访问这个链接会返回:
{
“headers”: {
“Accept”: “/“,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “my-app/0.0.1”
}
}
5. 发送post请求
http请求由请求行,请求报头,消息主体构成,若提交的数据类型为post型,服务端会根据请求头中的Content-Type字段来获取请求中的消息主体是用何种方式进行编码的,之后再对消息主体进行解体。消息主体具体的编码方式有三种:
application/x-www-form-urlencoded
# 最常见post提交数据的方式,以form表单形式提交数据。
application/json
# 以json串提交数据。
multipart/form-data
# 一般使用来上传文件。
同时Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。还可以以json形式(传给data参数)和multipart形式(files参数)发送post请求。
6. 使用requests库可以轻松获取响应的cookies和设置请求的cookies
利用requests.cookies可访问响应带上的cookies,此方法为响应cookies的字典。使用格式为:
变量名.cookies
也可以发送带cookies的请求,直接将发送过去的url参数后加上此参数并赋值即可。
7. 请求超时
Requests允许对一个http请求设置超时的时间,只需要在requests.get()或者requests.post()方法的timeout参数设置一个值(单位为秒)即可,超出此请求响应时限系统就会抛出异常。
url = 'http://httpbin.org/get'
r = requests.get(url, timeout=0.001)
8. 异常处理
在发送http请求时,由于各种原因,requests可能会请求失败而抛出异常。常见的异常包括:
ConnectionError
# 由于网络原因,无法建立连接。
HTTPError
# 如果响应的状态码不为200,Response.raise_for_status()会抛出HTTPError 异常。
Timeout
# 超时异常。
TooManyRedirects
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有requests抛出的异常都继承自 requests.exceptions.RequestException类。