在测试过程中,会有许多测试用例的前置条件都存在相同的内容,比如登录,如果每执行一个测试用例都执行一次登录显然是不合理的。因此需要将登录写成一个方法,共享给所有需要使用的测试用例。要实现这样的功能需要conftest.py文件,在conftest.py文件中定义共享的功能,其他测试文件在运行时会自动查找。
一、conftest.py文件
在使用conftest.py文件时需要注意:
1、conftest.py文件名称是固定的,不能修改。
2、conftest.py需要与运行的用例文件在同一个package下,并且存在_init_.py文件。
3、使用conftest.py文件时不需要导入,Pytest用例会自动识别。
4、如果conftest.py文件放在项目的根目录下,对全局生效。若放在某个package下则只对package下的用例文件生效,并且允许存在多个conftest.py文件。
5、conftest.py文件不能被其它文件导入。
6、所有同目录测试文件运行前都会执行conftest.py文件。
二、使用conftest.py实现共享Fixture功能
1、目录结构
在一个package下创建_init_.py文件、conftest.py文件以及两个测试文件,目录结构如下:
2、conftest.py文件
在文件中定义一个登录退出方法,并且在方法上添加装饰器@pytest.fixture()。、
import pytest
@pytest.fixture()
def sign_exit():
print('\n登录成功!')
yield
print('\n退出登录!')
3、测试文件
test_fixture_1文件的测试方法:
def test_fixture1(sign_exit): #在参数中调用fixture方法
print('第一个测试方法')
assert 1 == 1
test_fixture_2文件的测试方法:
def test_fixture2(sign_exit):
print('第二个测试方法')
assert 2 == 2
def test_fixture3(sign_exit):
print('第三个测试方法')
assert 3 == 3
4、运行结果
在package目录下运行pytest -s -v,运行结果如下。可见在每个测试方法执行前后都进行了登录和退出,实现了fixture的共享。
因为上面的fixture方法的scope是function级别的,所以在每个方法运行前后都会调用,如果需要在程序运行过程中只执行一次,那么只需要把fixture的作用域修改为会话级别session即可,运行结果如下:
今天的内容就这些~拜拜咯~