pytest分布式执行的问题

如何让scope=session的fixture在 test session 中仅仅执行一次

pytest-xdist是让每个worker进程执行属于自己的测试用例收集下的所有测试用例,这意味着在不同进程中,不同的测试用例可能会调用同一个scope范围级别较高(如session)的fixture,该fixture会被执行多次,不符合scope=session的预期。

解决

虽然pytest-xdist没有内置的支持来确保会话范围的夹具仅执行一次,但可以通过使用锁定文件进行进程间通信来实现:file-Lock

import pytest
from filelock import FileLock


@pytest.fixture(scope="session")
def login():
    print("====登录功能,返回账号,token===")
    with FileLock("session.lock"):
        name = "testyy"
        token = "npoi213bn4"
        # web ui自动化
        # 声明一个driver,再返回

        # 接口自动化
        # 发起一个登录请求,将token返回都可以这样写

    yield name, token
    print("====退出登录!!!====")