天天看點

軟體測試 | Requests庫

作者:霍格沃茲測試

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