pytest 前置 / 后置

本贴最后更新于 1356 天前,其中的信息可能已经时移世改
前置:准备工作 后置:清理工作 unittest框架用的: setUp/tearDown 测试方法级别 setUpClass/tearDownClass 测试类级别 前置/后置方法名固定,只能是这几个 pytest框架: 有两种机制 1. xunit-style: setup_method/teardown_method 测试方法级别 setup_class/teardown_class 测试类级别 setup_function/teardown_class 测试模块级别 备注: pytest也支持unittest的框架, 支持以下特性: @unittest.skip setUp/tearDown; setUpClass/tearDownClass; setUpModule/tearDownModule; 2. fixture: (1)若一个函数用@pytest.fixture修饰了, 那这个函数就是一个fixture, 只关心它的修饰符是这个,而函数名称可随便取 (2)如何分前置和后置? fixture中使用yield关键字作为分割符, yield之前的是前置,yield只会的是后置 前置 yield 后置 (3)作用域: 在定义fixture时,通过设置scope参数的值来设置fixture的作用域 @pytest.fixture(scope='作用域') 作用域取值有四种 测试会话(session)、测试模块(module)、测试类(class)、测试用例(function), scope不传的话,默认是测试用例方法function级别 (4)返回值: 在定义的fixture函数内部, 如果是yield 某值, 就表示这个执行这个fixture前置代码后会返回这个跟着的值 可以有多个返回值, 即yield value1, value2, value3 使用场景: 若前置准备工作后,需要将某值传递给用例去使用 (5)调用: (1)用例主动去调用, 需要用到哪个fixture就去调用哪个, 且可以调用多个fixture, 就近原则,挨着哪个fixture近就先调用哪个, 且谁的前置最先执行,谁的后置就最后执行, 对称的 且由先到后 测试用例文件中的fixture > 当前目录中的fixture > 上级目录中的fixture > 根目录中的fixture @pytest.mark.usefixtures("定义的fixture函数名称" (2)用例主动调用,且用例接收fixture的返回值的情况: 直接将之前定义的fixture函数的名称作为参数,传进来, 就可以 fixture函数的名称就代表了fixture函数yield的值 (3)自动调用,(不推荐) 定义fixture时,有个参数, autouse 思考: 什么情况下,pytest的测试用例函数会有传参呢? (1) 用例方法接收了fixture的返回值 @pytest.fixture def my_init(): print('准备工作进行中...') my_sql_obj = '哈哈哈' yield my_sql_obj, '卧虎藏龙','激流勇进' print('测试完了呢') def test_demo01(my_init): print('这是一个怎样的时代~~~{}'.format(my_init)) (2) 参数化要传参数 @pytest.mark.parameterize("case", case_data_list) def test_login_api(case)
import pytest @pytest.fixture(scope='class') def my_init1(): print('类的准备工作进行中...') my_sql_obj = '哈哈哈' yield my_sql_obj, '卧虎藏龙', '激流勇进' print('类测试完了呢') @pytest.fixture # 不传scope参数的话,默认定义的是函数级别的fixture def my_init2(): print('函数的准备工作进行中...') my_sql_obj = '哈哈哈' yield my_sql_obj, '卧虎藏龙', '激流勇进' print('函数测试完了呢') @pytest.mark.usefixtures("my_init1") @pytest.mark.usefixtures('my_init2') class TestOhYeah: def test_demo01(self,my_init2): print('测试demo1进行中...') print('这是一个怎样的时代~~~{}'.format(my_init2)) def test_demo0(self): print('测试demo2进行中...') print('幸福生活是奋斗出来哒') if "__name__" == "__main__": pytest.main()
回帖
请输入回帖内容 ...