pytest文件执行顺序

问题

pytest执行test_.py文件时,先执行了setup_class后,再执行conftest.py文件内容

报错信息

test_download_count.py
class TestDownloadCount:
def setup_class(self):
self.interface = Interface()
def test_env(self, get_env):
print(f"The current environment is: {get_env}")

conftest.py
@pytest.fixture(scope=“session”, autouse=True)
def get_env(request):
env = request.config.getoption(“–env”)
print(env)
BASE_PATH = os.path.dirname(os.path.dirname(os.path.realpath(file)))
# 获取当前配置文件的路径,相当于根路径,读取env.ini配置文件
config_file_path = os.path.join(BASE_PATH, “env.ini”)
# 定义配置文件对象
cf = configparser.ConfigParser()
# 读取配置文件
cf.read(config_file_path)
cf.set(‘env’, ‘env’, f’{env}‘)
with open(’…/env.ini’, ‘w’) as f:
cf.write(f)
return request.config.getoption(“–env”)

环境

报错信息是啥?

看着有点累,感觉还是帖代码截图和报错截图直观点

image

没有报错,就是我预期是先执行conftest.py文件中的代码然后再执行setup_class中的代码,但是实际执行时,执行顺序正好是相反的

setup_class是在整个测试类中首先执行,进行初始化工作,执行顺序肯定是最前的

  1. case的完整写法是: def test_DownloadCount(self, get_env):
    所以set_class 肯定会在get_env之前执行。

  2. 虽然这里的session(scope=“session”), 看着比class(set_class)优先级高(session的范围比class大), 但是这里的session只是定义这个autouse的fixture会对那些case起作用而已(和执行顺序没有关系)。
    @pytest.fixture(scope=“session”, autouse=True)
    def get_env(request):