Fixture用途:
1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现
2.测试用例的前置条件可以使用fixture实现
Fixture使用:
import unittest def setUpModule(): print(">>>>>>>>>>测试模块开始<<<<<<<<<<") def tearDownModule(): print(">>>>>>>>>>测试模块开始<<<<<<<<<<") class MyTest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print('✈✈✈✈测试类开始执行✈✈✈✈!') def setUp(self) -> None: print('♥❤♥❤测试方法开始执行♥❤♥❤!') def tearDown(self) -> None: print('♥❤♥❤测试方法执行完毕♥❤♥❤!') @classmethod def tearDownClass(cls) -> None: print('✈✈✈✈测试类执行完毕✈✈✈✈!') def test_case1(self): print("test_case1") def test_case2(self): print("test_case2") if __name__ == '__main__': unittest.main()
>>>>>>>>>>测试模块开始<<<<<<<<<< ✈✈✈✈测试类开始执行✈✈✈✈! ♥❤♥❤测试方法开始执行♥❤♥❤! test_case1 ♥❤♥❤测试方法执行完毕♥❤♥❤! ♥❤♥❤测试方法开始执行♥❤♥❤! test_case2 ♥❤♥❤测试方法执行完毕♥❤♥❤! ✈✈✈✈测试类执行完毕✈✈✈✈! >>>>>>>>>>测试模块开始<<<<<<<<<<在模块的开始于结束时被执行
- setUpModule/tearDownModule:在整个模块的开始于结束时被执行
- setUpClass/tearDownClass:在测试类的开始于结束时被执行
- setUp/tearDown:在测试用例的开始于结束时被执行
值得注意的是setUpClass/tearDownClass为类方法,需要通过@classmethod进行装饰。另外方法的参数为cls,cls与self并没有什么本质区别,都只表示方法的第一个参数
封装:
import unittest import warnings from common.base_page import BasePage from common.browser import Browser from common.config_utils import local_config from common.log_utils import logger class SeleniumBaseCase(unittest.TestCase): @classmethod def setUpClass(cls) -> None: logger.info('') logger.info('✈✈✈✈测试类开始执行✈✈✈✈!') warnings.simplefilter('ignore', ResourceWarning) cls.url = local_config.test_url def setUp(self) -> None: logger.info('♥❤♥❤测试方法开始执行♥❤♥❤!') self.base_page = BasePage(Browser().get_driver()) self.base_page.set_driver() # 封装了代码的隐式等待与浏览器最大化 def tearDown(self) -> None: logger.info('♥❤♥❤测试方法执行完毕♥❤♥❤!') self.base_page.quit_browser() @classmethod def tearDownClass(cls) -> None: logger.info('✈✈✈✈测试类执行完毕✈✈✈✈!')