1. 程式人生 > 實用技巧 >[介面自動化]使用python+unittest+request來完成一個小專案的介面自動化測試

[介面自動化]使用python+unittest+request來完成一個小專案的介面自動化測試

一.介面專案

專案來源於我自學老師自建的一系列介面,名為LJtest。這一系列介面組建成了一個小型的系統,主要功能類似於朋友圈/QQ空間發動態之類的。

如圖,檢視版本號介面,獲取靈感,獲取靈感詳情這三個介面不需要登入。而使用者發表靈感,修改靈感和刪除靈感介面則需要登入後進行操作。剩餘兩個介面則是註冊和登入介面。

二.介面用例設計和測試

介面文件提供了8個介面,這裡我以其中兩個介面作為示例來講解如何進行這些介面的測試。

介面一:檢視版本號介面

介面文件如圖:

直接展示程式碼:

import unittest
import requests
import HTMLTestRunner

headers={"Content-Type":"application/json"}

class Test_showversion(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass
    
    def test_1(self):
        url = 'http://192.144.148.91:2333/showversion'
        response = requests.get(url,headers = headers).json()
        self.assertEqual(response['status'], 200)
        
if __name__ == '__main__':
    
    testunit = unittest.TestSuite() #初始化測試用例集合物件,構建測試套件
    testunit.addTest(Test_showversion("test_1")) #把測試用例加入到測試用力集合中去,將用例加入到檢測套件中
    filename = './' +'檢視版本號'+'result.html'#重構檔名
    fp = open(filename,'wb')#定義測試報告存放路徑
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp)#定義測試報告
    runner.run(testunit)
    fp.close()

程式碼邏輯:1.導包 2.定製請求頭 3.定義一個類整合unittest.TestCase 4.定義測試用例,url,請求方式,請求頭非常簡單明瞭。 5.斷言,介面文件中返回值裡'status'=200

,斷言我們判斷這個值是不是等於200就行了。最後生成一個非常簡易的測試報告。

OK,這個介面非常簡單。查詢要麼成功要麼失敗,這裡不需要傳入引數且介面已經被LJ老師更新好了無法設計更多測試用例。

介面二:登入介面

登入介面的介面文件如下:

為登入介面設計測試用例:8條用例只有第1條能夠登入成功,其他7條應該都會報錯。

原始碼:

import requests
import unittest
from ddt import ddt,data,unpack

headers={"Content-Type":"application/json"}

@ddt
class Test_login(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    @data({"username":"8482592",  "password":"a1234567"},{"username":"8482",  "password":"a1234567"},{"username":"8482592123455",  "password":"a1234567"}
    ,{"username":"84825921",  "password":"a1234567"},{"username":"8482592",  "password":"a123456"},{"username":"8482592",  "password":"a1234567890123456"}
    ,{"username":"848259211",  "password":"a1234567"},{"username":"8482592",  "password":"a12345678"})
    def test_1(self,usefinfo):

        url = 'http://192.144.148.91:2333/login'
        response = requests.post(url,headers = headers,json=usefinfo).json()
        self.assertEqual(response['msg'], '登入成功!')

if __name__ == "__main__":
    unittest.main(verbosity=2)

跑一遍顯示的結果如下:

和我們的預期結果相符合,只有第1條用例師OK的,其他用例全部失敗(error4條,fail3條)

目前還沒有把ddt資料驅動和測試報告結合起來,下去研究下ddt測試用例的名稱怎麼修改,這樣就能產出測試報告了。