前置:准备工作
后置:清理工作
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()
2194
27
45
686
332
43
10
151
900
欢迎来到testingpai.com!
注册 关于