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霍格沃茲的幹貨都很硬核