1. 程式人生 > 其它 >samo老師: unittest初始化例項和和執行用例例項

samo老師: unittest初始化例項和和執行用例例項

unittest 初始化方法

 每個方法執行一次

setUp(self)
tearDown(self)

每個類執行一次的方法 要加裝修器
@classmethod
def setUpClass(cls)
@classmethod
def tearDownClass(cls) -> None:


# !/usr/bin python3                                 
# encoding: utf-8 -*-                            

# 對於unittest框架來說,他的測試必須以類的形式定義
import unittest

from lesson1117.operate import FileOperate from lesson1117.stu_manager import Manager from lesson1117.stu_operate import StusOperate from lesson1117.student import Student class TestStuOperateAdd(unittest.TestCase): # 通常情況下,有可能在每個測試用例執行前需要統一的做前置處理或者後置處理 # setUp和tearDown裡的程式碼的執行次數是和當前類下的測試用例方法個數一致的
def setUp(self) -> None: #這裡是做前置處理的,比如我們要先登入 print('先完成登入') Manager.login('admin','123456') def tearDown(self) -> None: print('後置處理') print('退出系統') print('資料清理') # 在這裡去實現測試用例 # 測試方法必須以test開頭,一個測試方法就可以認為是一條測試用例 def test_add_stu(self):
# 在這裡實現目標的測試步驟 # 正常新增學員 # 如果資料是寫死的,那麼每次執行測試都要手動修改 # 資料準備,可以將原有的資料清除 StusOperate.del_stu('5') stu = Student('5','','17726633','9823874') result = StusOperate.add_stu(stu) assert result == '新增成功' # assert的斷言一旦失敗,那麼當前用例剩下的程式碼不會被執行 # 函式呼叫已經完成,如何判斷結果呢 # 判斷結果的這個過程,我們叫做斷言 # 手工做的時候開啟檔案看看這個學員資訊是否已經出現 # 那麼程式碼呢,程式碼可以讀取檔案得到結果,判斷結果是否正確 stus_dict = FileOperate.read() assert '5' in stus_dict #這就是一個斷言,先判斷id是否在整體學員的字典中 # 得到該學員資訊,判斷各項資訊與期望值是否一致 stu_info = stus_dict['5'] assert stu_info.name == '' assert stu_info.phone == '17726633' assert stu_info.qq == '9823874' def test_add_stu_id_exist(self): # 這是id已存在 stu = Student('4', '', '17726633', '9823874') result = StusOperate.add_stu(stu) # id已存在的結果如何判斷,修改add_stu函式的返回結果,然後針對返回結果做判斷 assert result == '4已經存在無法新增' class TestStuOperateChange(unittest.TestCase): # 當前類是專門用來測試修改學員的方法的 # 對於修改了必須先有資料,才能修改 # 所以我要先準備資料,讓這些測試用例公用一條資料 # 當你的測試類需要進行前置或者後置操作時,可以採用如下的函式 # 類級別的前置和後置,在當前類下只會一次 @classmethod def setUpClass(cls) -> None:# -> None指的是函式的返回值型別 # 在這裡進行資料準備 stu = Student('6','沙1','177266331','98238741') StusOperate.add_stu(stu) print('類初始化') def test_change1(self): # 修改姓名 StusOperate.change_stu('6',name='沙2') # 斷言 stus_dict = FileOperate.read() stu = stus_dict['6'] assert stu.name == '沙2' pass def test_change2(self): pass @classmethod def tearDownClass(cls) -> None: # 當前類下所有的測試用例執行完成之後,做資料清理 StusOperate.del_stu('6') print('類後置處理') # if __name__ == '__main__': # suite = unittest.TestSuite() # # 這表示將TestStuOperateChange這個類裡的test_change1加入到執行集合中 # suite.addTest(TestStuOperateChange('test_change1')) # # 這表示將TestStuOperateAdd這個類裡的test_add_stu加入到執行集合中 # suite.addTest(TestStuOperateAdd('test_add_stu')) # # # 執行器 # runner = unittest.TextTestRunner() # runner.run(suite)

執行時如果檔案被unitest 執行過,需要除錯時就新建一個檔案,來呼叫

以單條用例執行的方法

以檔案匹配 *_test.py 結尾的檔案匹配執行測試用例的方法

# !/usr/bin python3                                 
# encoding: utf-8 -*-                            
import unittest

from lesson1120.stu_operate_test import TestStuOperateChange, TestStuOperateAdd

if __name__ == '__main__':
    # suite = unittest.TestSuite()
    # # 這表示將TestStuOperateChange這個類裡的test_change1加入到執行集合中
    # suite.addTest(TestStuOperateChange('test_change1'))
    # # 這表示將TestStuOperateAdd這個類裡的test_add_stu加入到執行集合中
    # suite.addTest(TestStuOperateAdd('test_add_stu'))


    # 指定目錄,匹配檔案,載入測試用例
    suite = unittest.defaultTestLoader.discover('../lesson1120','*_test.py')

    # 執行器
    runner = unittest.TextTestRunner()
    runner.run(suite)

    # 需要一個測試報告