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("====退出登录!!!====")