因爲某測試平臺很是坑,致使建立了十個HTTP接口測試用例後便沒法繼續建立測試用例。所以本文便利用Python的單元測試功能,完整實現了相似的接口黑盒測試功能。python
Python3.6 Pycharm2017
本文默認讀者擁有上述環境,再也不闡述環境搭建問題json
1.建立測試代碼文件,新建普通Python文件便可
2.複製以下代碼,本代碼大體原理會在下文講到,本代碼僅爲示例,如需運行,須要自行編寫相應後端代碼後端
import unittest import requests import json URL = 'http://xxx:9000' # 針對登陸模塊的測試類 class Login_Module(unittest.TestCase): # 獲取sessionID def get_session(self): r = requests.post(URL + '/login', data={'realPhone': '18890000000', 'password': '123456'}) return json.loads(r.text)['data'] # 登陸接口測試 def test_login(self): r = requests.post(URL + '/login', data={'realPhone': '18890000000', 'password': '123456'}) obj = json.loads(r.text) self.assertEqual(obj['code'], 0) # 判斷返回結果碼是否爲0 # 身邊用戶接口測試 def test_near_user(self): r = requests.get(URL + '/nearuser', params={'sessionID': self.get_session()}) obj = json.loads(r.text) self.assertEqual(len(obj['data']), 10) # 判斷返回列表中用戶是否只有十個 if __name__ == '__main__': unittest.main()
3.新建PythonTest運行環境(此步驟並不是必須,只是爲了更好的測試展現效果,須要配置)
此處須要注意target文件選擇包含測試代碼的文件
4.運行單元測試,若是最終結果爲綠色,表明全部測試樣例均已經過
session
pip install requests -i https://pypi.douban.com/simple
若是還欠缺其餘庫,可按照格式,將requests替換掉便可函數
上述代碼包含一個測試類,這個測試類繼承了unittest.TestCase。這是一種python unittest的規範格式。工具
class Login_Module(unittest.TestCase):
下面第一個方法是做爲工具方法存在的,因爲方法名不以test開頭,所以在測試時該方法並不會做爲測試方法參與測試,可是能夠被其餘測試方法調用。
這個方法的主要目的是獲取sessionID,在個人項目邏輯中存在sessionID這樣一個標識符,用來表示用戶的身份信息。(相似於WEB開發中的Session)post
# 獲取sessionID def get_session(self): r = requests.post(URL + '/login', data={'realPhone': '18890000000', 'password': '123456'}) return json.loads(r.text)['data']
此處的重點是以下兩個函數單元測試
#這段代碼post表明post方法,post函數的第一個參數表明接口URL地址,第二個參數表明數據信息 requests.post(URL + '/login', data={'realPhone': '18890000000', 'password': '123456'}) #這段代碼loads表明將返回的相應字符串轉化爲python字典數據類型,而後['data']就能夠取出屬性爲data的數據 return json.loads(r.text)['data']
在上述的過程當中,發現須要知道相應信息的結構才能更好地進行測試,可是因爲接口不完善,有時候可能沒法獲得完整的接口信息,這時候就須要使用print函數自行打印接口返回信息測試
print(json.loads(r.text))
而後看下面的第二個函數,這個函數主要和第一個函數相同,只是有一點不一樣,這個函數經過assertEqual進行了斷言,若是斷言成功,則繼續執行。若是斷言失敗,則會中止執行,輸出該測試用例的相應信息。spa
# 登陸接口測試 def test_login(self): r = requests.post(URL + '/login', data={'realPhone': '18890000000', 'password': '123456'}) obj = json.loads(r.text) self.assertEqual(obj['code'], 0) # 判斷返回結果碼是否爲0
接下來看第三個函數,這個函數的特點在於這個函數所對應的接口的請求方式不是POST而是GET,針對GET請求,大致上方式仍是一致的,只是數據參數名由data變成了params。
# 身邊用戶接口測試 def test_near_user(self): r = requests.get(URL + '/nearuser', params={'sessionID': self.get_session()}) obj = json.loads(r.text) self.assertEqual(len(obj['data']), 10) # 判斷返回列表中用戶是否只有十個
最後,在main函數中調用unittest.main()進行測試。