Requests使用Apache2 Licensed许可证的HTTP库。它基于urllib3,因此继承了urllib3的所有特性。Requests支持HTTP连续保持和连接池,支持使用Cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。
安装
如果已经安装,那么此处可以省略。如果尚未安装,则可以通过PyPI仓库获取安装。
Pypi地址:pypi.python.org/pypi/reques…
下面就通过Requests官方文档提供的第一个例子来体会它的用法。
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015,02:27:37) [MSC v.1900 64 bit (AMD64) on win32]
Type "copyright","credits" or "licence()" for more information.
>>> import requests
>>> r = requests.get('https://api.github.com/user',auth=('user','pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf-8'
>>> r.encoding
'utf-8'
>>> r.text
'{"login":"defnngj","id":1000588,"avatar_url".......}
>>> r.json()
{'public_gists' : 0,'id':1000588,'type':......
想要执行这个例子,你需要有一个GitHub账号,auth参数的“user”和“pass”需要替换为具体的GitHub账号和密码才行。
接口测试
通过上面的例子,不难发现使用Requests调用接口非常简单。下面就针对查询发布会接口编写一个完整的接口测试用例。
import requests
#查询发布会接口
url = "http://127.0.0.1:8000/api/get_event_list/"
r = requests.get(url,params={'eid':'1'})
result = r.json()
#断言接口返回值
assert result['status'] == 200
assert result['message'] == "success"
assert result['data']['name'] == "XX产品发布会"
assert result['data']['start_time'] == "2016-12-08T14:29:21"
查询发布会接口请求类型为GET,所以,通过Requests库的get()方法调用。get()方法第一个参数为调用接口的URL地址,params指定接口的入参,将参数定义为字典。
json()方法可以将接口返回的JSON格式的数据转化为字典。
最后,通过assert语句断言字典中的值,即接口返回的数据,其中包括状态码status、消息message和发布会信息data等。
集成unittest
将接口测试脚本集成到unittest单元测试框架中,利用unittest的功能来运行接口测试用例。
import requests
import unittest
class GetEventListTest(unittest.TestCase):
'''查询发布会接口测试'''
def setUp(self):
self.url = "http://127.0.0.1:8000/api/get_event_list/"
def test_get_event_null(self):
'''发布会id为空'''
r = requests.get(self.url,params={'eid':''})
result = r.json()
self.assertEqual(result['status'],10021)
self.assertEqual(result['message'],"parameter error")
def test_get_event_error(self):
'''发布会id不存在'''
r = requests.get(self.url,params={'eid':'901'})
result = r.josn()
self.assertEqual(result['status'],10022)
self.assertEqual(result['message'],"query result is empty")
def test_get_event_success(self):
'''发布会id为1,查询成功
r = requests.get(self.url,params={'eid':'1'})
result = r.json()
self.assertEqual(result['status'],200)
self.assertEqual(result['message'],"success")
self.assertEqual(result['data']['name'],"小米5发布会")
self.assertEqual(result['data']['address'],"北京国家会议中心")
self.assertEqual(result['data']['start_time'],"2016-12-08T14:29:21")
#.....
if _name_ =='_main_':
unittest.main()
关于unittest单元测试框架的使用,这里同样使用接口测试用例的组织与执行。
搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核