一、unittest框架及原理介紹
1、unittest最核心的四個概念
2、Unittest中TestCase類的用法
測試用例類:自己定義的類只要繼承於unittest中的TestCase那么這個類就是一個測試用例類
測試用例:測試用例類中,以test開頭的方法就是一條測試用例
用例執行通沒通過的評判標准:斷言異常
import unittest
from Login import login_check
class LoginTestCases(unittest.TestCase):
def test_login_pass(self):
#第一步:准備測試用例數據
#1、用例的參數:可用元組,列表和字典
data=("python24","lemonban")
#2、預期結果
expected={"code":0,"msg":"登錄成功"}
#第二步:執行功能函數,獲取實際結果
result=login_check(*data)
#第三步:比對實際結果和預期結果
# assert expected==result
self.assertEqual(result,expected)
# 如果直接運行這個文件,就使用unittest中的main函數來執行測試用例
if __name__ == '__main__':
unittest.main()
3、Unittest中TestSuit類的用法
import unittest
#第一步:創建一個測試套件
suit=unittest.TestSuite()
#第二步:將測試用例加載到測試套件中
#第1種,通過模塊加載用例,把模塊名作為參數,將該模塊中所有測試用例全部加載到套件中
#創建一個加載對象
import Testcases
load=unittest.TestLoader()
suit.addTest(load.loadTestsFromModule(Testcases))
#第2種:通過測試用例類去加載,把模塊中的測試類作為參數,將該測試用例類中所有測試用例加載到套件中
import Testcases
load=unittest.TestLoader()
suit.addTest(load.loadTestsFromTestCase(Testcases.LoginTestCases))
#第3種,添加單條測試用例,先導入測試用例類,再創建一個測試類對象,把測試用例方法名作為參數(unittest.TestCase有參數為字符串類型)
from Testcases import LoginTestCases
# 創建一個用例對象
# 注意點:通過用例類去創建測試用例對象的時候,需要傳入用例的方法名(字符串類型)
case=LoginTestCases("test_login_pass")
suit.addTest(case)
# 第4種,指定測試用例的所在的目錄路徑,把路徑作為參數,將該路徑下的所有用例加載到套件中
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"用例文件所在的目錄的絕對路徑"))
#第三步:創建一個測試運行程序啟動器
#第1種:使用unittest自帶的啟動器
runner=unittest.TextTestRunner()
#第四步:使用啟動器去執行套件,把套件作為參數
runner.run(suite)
4、使用TestRunerNew模塊生成html測試報告
from HTMLTestRunnerNew import HTMLTestRunner
#第三步:創建一個測試運行程序啟動器
#第2種:使用HTMLTestRunner傳入參數生產啟動器
#參數1:打開測試報告文件,必須是html后綴的文件,模式"wb",以二進制模式覆蓋寫入,將句柄傳給stream
#參數2:verbosity=2為默認參數,可以不用填寫
#參數3:tester,報告中顯示的測試人員
#參數4:description,報告的描述信息
#參數5:title,報告的標題
runner=HTMLTestRunner(stream=open("report.html","wb"),tester="xiaosongshu",description="描述信息",title="登錄功能測試報告")
5、Unittest中fixture的使用
是寫在測試用例類里面的,用於測試環境搭建或銷毀
# 每條用例執行之前都會執行,用例的前置條件,以print輸出的在測試報告中會顯示出來
def setUp(self):
print("用例{}開始執行--".format(self))
# 每條用例執行之后都會執行,用例的后置處理,以print輸出的在測試報告中會顯示出來
def tearDown(self):
print("用例{}執行結束--".format(self))
# 當成測試用例類中的用例執行之前,會執行該方法,print輸出的不在報告中顯示,在控制台顯示
@classmethod
def setUpClass(cls):
print("-----setup---classs-----")
# 當成測試用例類中的用例執行完畢,會執行該方法,print輸出的不在報告中顯示,在控制台顯示
@classmethod
def tearDownClass(cls):
print("-----teardown---classs-----")