基於Python的HTTP接口測試

前言

因爲某測試平臺很是坑,致使建立了十個HTTP接口測試用例後便沒法繼續建立測試用例。所以本文便利用Python的單元測試功能,完整實現了相似的接口黑盒測試功能。python

測試環境

Python3.6 Pycharm2017
本文默認讀者擁有上述環境,再也不闡述環境搭建問題json

測試流程

1.建立測試代碼文件,新建普通Python文件便可
2018-05-08-20-33-03
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運行環境(此步驟並不是必須,只是爲了更好的測試展現效果,須要配置)
2018-05-08-20-37-48
此處須要注意target文件選擇包含測試代碼的文件
2018-05-08-20-36-55
4.運行單元測試,若是最終結果爲綠色,表明全部測試樣例均已經過
2018-05-08-20-39-23session

注意事項

  1. 若是是Python初始環境,那麼頗有可能不存在requests這個PythonHTTP請求庫,須要打開CMD窗口,運行
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()進行測試。

相關文章
相關標籤/搜索