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

槐夏發表於2021-05-31

本文將介紹單元測試的基礎版及使用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框架產出視覺化測試報告

相關文章