搜索
您的当前位置:首页正文

pytest用例设置前后置、固件

来源:易榕旅网

一、测试用例前后置

前置: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("测试类结束,每个类结束后执行一次")

执行结果:

二.使用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)

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执行顺序

因篇幅问题不能全部显示,请点此查看更多更全内容

Top