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