1 所有用例前后置
def setup(self):
print('每个用例开始前执行')
def setup_class(self):
print('每个类之前执行')
def teardown(self):
print('每个用例结束后执行')
def teardown_class(self):
print('每个类结束后执行')
2 部分用例前后置
@pytest.fixture(scope='function', autouse=False, params=None, ids=None, name=None)
def excute_sql(request):
print('执行SQL查询')
yield request.param
print('关闭数据库连接')
class TestLogin(CommonUtil):
def test_01_db(self):
print('数据库测试01')
def test_02_db(self):
print('数据库测试02')
2.1 scope:作用域
function:在函数之前和之后执行
1.手动调用时要在测试用例的参数里面加入fixture的名称
2.fixture有返回值时,可以通过固件名字将其传入测试用例
class:在类之前和之后执行
1.手动调用时要在类定义时添加装饰器 @pytest.mark.usefixtures("excute_class_sql")
package/session:在整个项目会话之前和之后执行,一般会结合conftest.py进行使用
2.2 autouse:自动执行
默认是False,代表需要手动执行。True代表不需要手动执行
如果希望在其他文件中调用需要结合conftest.py文件使用
2.3.params:用来实现参数化
通过在fixture函数的里面加入request来接受参数,然后通过request.param来取值
@pytest.fixture(scope='function', autouse=False, params=read_yaml())
def excute_sql(request):
print('执行SQL查询')
yield request.param
print('关闭数据库连接')
2.4.ids
必须和params一起使用,用于给参数起别名
@pytest.fixture(scope='function', autouse=False, params=read_yaml(), ids=["01", "02", "03"])
def excute_sql(request):
print('执行SQL查询')
yield request.param
print('关闭数据库连接')
2.5.name
作用是给fixture起别名,注意和ids的区别。
@pytest.fixture(scope='function', autouse=False, params=read_yaml(), ids=["01", "02", "03"], name="db")
def excute_sql(request):
print('执行SQL查询')
yield request.param
print('关闭数据库连接')
一旦起了别名,那么fixture的名称就不能再用了,只能用别名。
3 conftest.py文件
1.专门用于存放fixture的配置文件,名称是固定的,不能改变。
2.调用conftest.py中的方法时不需要进行导入
3.conftest.py可以有多个,且多个conftest.py文件中的多个fixture可以被一个用例所调用
多线程时fixture中的额打印信息无法看到
4 优先级的问题
fixture的session级别>fixture的class级别>setup_class>fixture的function级别>setup