1.四大組件:
a.test fixture:setUp(前置條件),tearDown(后置條件),用於初始化測試用例及清理和釋放資源
b.test case:測試用例,通過集成unittest.TestCase,來實現用例的繼承。在UnitTest中,測試用例都是通過test來識別的。
例:class forTest(unites.TestCase);def test_xx
c.test suite:測試套件,也稱為測試用例集
d.test runner:運行器,一般通過runner來調用suite去執行測試
2.UnitTest運行機制:通過在main函數中,調用unittest.main()運行所有內容。
import unittest class forTest(unittest.TestCase): # 類的初始化 @classmethod def setUpClass(cls) -> None: print('sClass') # 類的釋放 @classmethod def tearDownClass(cls) -> None: print('tclass') # 用例初始化(用例執行前執行) def setUp(self) -> None: print('setUp') # 用例釋放(用例執行后執行) def tearDown(self) -> None: print('tearDown') #函數 def plus(self,a,b): print(a+b) return a+b def test_c(self): self.plus(1,2) print('c') # 測試用例 def test_a(self): print('a') def test_b(self): print('b') if __name__=='__main__': unittest.main(verbosity=2) # verbosity=2 讓結果更細致些 ''' 只有test_xx() 的函數才能執行 '''
打印結果:
3.ddt數據驅動
ddt(data-driver tests), 在實際測試中,單個測試需要用多種不同的條件(測試數據)對其測試。
a. 在class前定義@ddt,data用於設定參數
下面的例子實現自動打開百度,並輸入'網球王子' 、'王者榮耀',相當於兩條測試數據
import unittest from selenium import webdriver import time from ddt import ddt,data, @ddt class forTest01(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com/') # pass def tearDown(self) -> None: time.sleep(2) # pass @data('網球王子', '王者榮耀') def test_1(self, txt): self.driver.find_element_by_id('kw').send_keys(txt) self.driver.find_element_by_id('su').click() if __name__=='__main__': unittest.main()
b. unpack用於解析參數。當需要傳入多個參數時,unpack可以依次解析傳參。
@ddt class forTest01(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Chrome() # pass def tearDown(self) -> None: time.sleep(2) # pass @data(('http://www.baidu.com/', '王者榮耀'),('http://www.baidu.com/','網球王子')) @unpack def test_1(self, url, txt): self.driver.get(url) self.driver.find_element_by_id('kw').send_keys(txt) self.driver.find_element_by_id('su').click()
c. file_data是ddt中用於讀取yml文件的裝飾器
文件傳參實現自動化
import unittest from selenium import webdriver import time from ddt import ddt,data,unpack,file_data import yaml @ddt class forTest01(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Chrome() # pass def tearDown(self) -> None: time.sleep(3) # pass @file_data('ppp.yml') def test_1(self, **kwargs): self.driver.get(kwargs.get('url')) # 獲取參數中key為url的value self.driver.find_element_by_id('kw').send_keys(kwargs.get('txt')) self.driver.find_element_by_id('su').click()
安裝PyYAML
import yaml file = open('f.yml', encoding='utf-8') res = yaml.load(file, Loader = yaml.FullLoader) print(res)
打印結果:
{'name': '小龍女', 'age': 18, 'data': {'a': 1, 'b': '2', 'c': 3, 'd': 4}, 'list': [1, 2, 'c']}