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('✈✈✈✈测试类执行完毕✈✈✈✈!')
05-23 01:07