【python介面自動化】初識unittest框架

本文將介紹單元測試的基礎版及使用unittest框架的單元測試。

完成以下需求的程式碼編寫,並實現單元測試

帳號正確,密碼正確,返回{“msg”:”帳號密碼正確,登錄成功”}
帳號和密碼任一為空,返回{“msg”:”所有參數不能為空”}
帳號/密碼錯誤,返回{“msg”:”帳號/密碼錯誤”}

基礎程式碼實現:

  • 定義方法,實現基本需求
account_right = "python"
pwd_right = "python666"
def userLogin(account=None, pwd=None):
    if not account or not pwd:
        return {"msg":"所有參數不能為空"}
    if account != account_right or pwd != pwd_right:
        return {"msg":"帳號/密碼錯誤"}
    if account == account_right and pwd == pwd_right:
        return {"msg":"帳號密碼正確,登錄成功"}
    return {"msg":"未知錯誤,請聯繫管理員"}

對程式碼進行驗證,是否符合需求:

  • 驗證方法1:
    print(userLogin("",""))
    print(userLogin("python666","python"))
    print(userLogin("","python666"))
    print(userLogin("python",""))
    print(userLogin("python","python666"))

驗證結果:

分析:直接調用userLogin方法,獲取各種參數對應的返回結果

  • 驗證方法2:
if __name__ == '__main__':
    try:
        assert userLogin("","") == {"msg":"所有參不能為空"}
        assert userLogin("python666","python") == {'msg': '帳號/密碼錯誤'}
        assert userLogin("","python666") == {'msg': '所有參數不能為空'}
        assert userLogin("python","") =={'msg': '所有參數不能為空'}
        assert userLogin("python","python666") == {'msg': '帳號密碼正確,登錄成功'}
    except Exception as e:
        print("啊哦,測試失敗")
    else:
        print("恭喜!全部用例測試通過")

驗證結果:

分析:通過assert判斷,寫入參數調取userLogin方法時得到的響應和預期的響應是否一致,如果一致就列印「全部通過」,如果有不一致的則會列印「測試失敗」
此處使用到的try…except…else組合:不論如何一定會執行try下的程式碼,如果有報錯則執行except下的程式碼,如果沒有,則執行else下的程式碼。

  • 驗證方法3:使用unittest框架
    另寫一個python文件,則需導入userLogin方法
import unittest

class MyTestCase(unittest.TestCase):
    def test_empty(self):
        expected = {"msg":"所有參數不能為空"}
        actual = userLogin("","")
        self.assertEqual(expected,actual)
        
    def test_pwd_wrong(self):
        expected = {"msg":"帳號/密碼錯誤"}
        actual = userLogin("python","python6")
        self.assertEqual(expected,actual)
        
    def test_account_empty(self):
        expected = {"msg":"帳號/密碼錯誤"}
        actual = userLogin("python666","python")
        self.assertEqual(expected,actual)
        
    def test_login_ok(self):
        expected = {"msg":"帳號密碼正確,登錄成功"}
        actual = userLogin("python","python666")
        self.assertEqual(expected,actual)
        
if __name__ == '__main__':
    unittest.TestCase()

驗證結果:

分析:unittest框架中自帶assert,實現的效果和方法1、2並無不同,只不過這樣更好管理用例,可視化測試結果,以及產出測試報告。
self.assertEqual(expected,actual)即是,判斷expected和actual的返回值相等

下一節:如何使用unittest框架產出可視化測試報告