Requests 使用 Apache2 Licensed 许可证的 HTTP 库。它基于 urllib3,因此继承了 urllib3 的所有特性。Requests 支持 HTTP 连续保持和连接池,支持使用 Cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
安装
如果已经安装,那么此处可以省略。如果尚未安装,则可以通过 PyPI 仓库获取安装。
Pypi 地址:https://pypi.python.org/pypi/requests
下面就通过 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 霍格沃兹的干货都很硬核
评论