一、测试用例前后置
前置:setup 每个用例开始前执行一次
setup_class 每个类开始前执行一次
后置:teardown 每个用例结束后执行一次
teardown_class 每个类结束后执行一次
import pytest
class TestPC:
def setup_class(self):
print("测试类开始,每个类开始前执行一次")
def setup(self):
print("这是用例开始,每个用例开始都会执行一次")
def test_login(self):
print('今天星期一')
def test_add(self):
print(1+2,'天气很不错')
def teardown(self):
print("这是用例结束,每个用例结束都会执行一次")
def teardown_class(self):
print("测试类结束,每个类结束后执行一次")
执行结果:
当用例繁多,每个测试用例添加前后置会出现很多冗余代码,所以可以进行封装,创建一个公共工具文件夹common存放
然后在用例所在的类中集成这个类
二.使用fixture固件实现部分用例前后置
@pytest.fixture(scope=“function”,autouse=False,params=read_yaml())
scope:作用域
functio表示该固件作用域在函数,即在函数之前和函数之后执行
1.手动调用是在测试用例的参数后面加入fixture名称
2.如果fixture有通过return或者yield返回值的话,可以把这个值作为参数传递到用例中,通过固件名称返回
scope=class:在类之前和之后执行
scope=package/session:在整个项目/回话之后执行
autouse:自动执行,默认为Flase
params:实现参数化
import pytest
def read_yaml():
return ["huge","tangyan","yangmi"]
@pytest.fixture(scope="function",autouse=False,params=read_yaml())
def exe_database_sql(request):
print("sql查询")
yield request.param
print("关闭查询")
@pytest.mark.usefixtures("exe_database_sql")
class TestPC():
def test_login(self):
print('今天星期一')
def test_add(self,exe_database_sql):
print(1+2,'天气很不错:',exe_database_sql)
调用exe_database_sql的用例会根据参数执行相应的次数,并将exe_database_sql的值作为参数
ids:给参数起别名,不能单独使用,必须结合params使用
name:给fixture固件起别名,使用name之后,调用该固件时必须使用新起的别名
def read_yaml():
return ["huge","tangyan","yangmi"]
@pytest.fixture(scope="function",autouse=False,params=read_yaml(),ids=['a','b','c'],name='db')
def exe_database_sql(request):
print("sql查询")
yield request.param
print("关闭查询")
class TestPC():
def test_login(self):
print('今天星期一')
def test_add(self,db):
print(1+2,'天气很不错:',db)
三:fixture结合conftest.py文件
1.conftest.py专门用于存放fixture的配置文件,固定名称
2.conftest.py中所有的方法调用都不需要导包
3.conftest.py可以有多个,且多个conftest.py中的固件均可被一个用例调用
四、setup、setup_class、teardown、 teardown_class、fixture、conftest.py优先级
类:fixture:session > fixture:class > setup_class
函数:fixture:functiom>setup
五、pytest执行顺序
1.查询当前目录下的conftest.py文件
2.查询当前目录下的pytest.ini文件,找到测试用例的路径位置
3.查询用例目录下的conftest.py文件
4.查询py文件中是否有setup、setup_class、teardown、 teardown_class
5.再根据pytest.ini文件的测试用例规则去查找用例执行