在做接口测试中,我们可以通过Python中的requests库来完成向第三方发送http请求的场景,也可以作为接口测试用例执行的一种方式。基于此我们需要来研究下requests库的功能
中文参考文档:http://2.python-requests.org/zh_CN/latest/
2.应用
2.1requests模块安装
requests属于第三方库可以通过pip命令进行安装
pip install requests
2.2requests的使用
1.发送请求
import requests
#get请求
response=requests.get('http://www.baidu.com')
print(response) #输出服务器返回码
#post请求
response_1=requests.get('http://www.baidu.com')
print(response_1)
requests.put(“http://httpbin.org/put”) # PUT请求
requests.delete(“http://httpbin.org/delete”) # DELETE请求
2.参数传递
#验证天气预报的接口 地址:http://apis.juhe.cn/simpleWeather/query
param={'key':'5975e4181b085de266aa0f9b8269e37a','city':'北京'}
#get请求与post请求带参用法一样
response=requests.get('http://apis.juhe.cn/simpleWeather/query',param)
#查看接口文档 已知返回的是json文件
print(response.json())
3.响应内容
r.encoding #获取当前的编码 r.encoding = 'utf-8' #设置编码 r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。 r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。 r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None r.status_code #响应状态码 r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() r.ok # 查看r.ok的布尔值便可以知道是否登陆成功 #*特殊方法*# r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常 r.raise_for_status() #失败请求(非200响应)抛出异常
4.定制头和cookie信息
header = {'user-agent': 'my-app/0.0.1''} cookie = {'key':'value'} r = requests.get/post('your url',headers=header,cookies=cookie) data = {'some': 'data'} headers = {'content-type': 'application/json', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'} r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers) print(r.text)
5.上传文件
requests.post(url=url, headers=headers, data=params, files=files)
参数说明:
url:请求url地址
headers:请求头
data:发送编码为表单形式的数据
files:上传的文件,如:
files = {'upload_img': ('report.png', open('report.png', 'rb'), 'image/png')}
参数说明:
1.report.png:文件名
2.open('report.png', 'rb'):文件内容
3.image/png:文件类型
# coding:utf-8
import requests
# 请求url
url = "http://httpbin.org/post"
# 请求头
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"User-Agent": "python/2.9.1",
}
# 查询字符串
params = {'name': 'Jack', 'age': '24'}
# 文件
files = {'upload_img': ('report.xlsx', open('report.xlsx', 'rb'), 'image/png')}
r = requests.post(url=url, data=params, headers=headers, files=files)
print r.status_code # 获取响应状态码
print r.content # 获取响应消息
if __name__ == "__main__":
pass