首页 新闻 会员 周边

pytest使用多线程,conftest.py重复执行

1
[已解决问题] 解决于 2023-01-09 15:46

我在使用pytest做接口自动化时, 使用了pytest-xdist来做多线程执行用例, 但是发现conftest.py文件里的函数也被重复执行了,因为conftest.py文件里面是“登录”, 我总不能一个用例登录一次,有什么办法可以解决这个问题呢?

博无止境的主页 博无止境 | 初学一级 | 园豆:153
提问于:2023-01-06 17:41
< >
分享
最佳答案
0

问题已经解决, 从官方文档中找到了解决方法, 解决方法如下:

登录方法_pc BusinessCase().login_pc(),这个是我定义的登录方法, 其它代码不要动, 直接套用就行,使用

多线程后, 这个方法只会执行一次,而不会跟着多线程多次执行。

@pytest.fixture(autouse=True, scope="class")
def login_request(tmp_path_factory, worker_id):
if worker_id == "master":
# 登录方法_pc
BusinessCase().login_pc()
# 获取所有子节点共享的临时目录,无需修改【不可删除、修改】
root_tmp_dir = tmp_path_factory.getbasetemp().parent
# 【不可删除、修改】
fn = root_tmp_dir / "data.json"
# 【不可删除、修改】
with FileLock(str(fn) + ".lock"):
# 【不可删除、修改】
if fn.is_file():
pass
else:
# 登录方法_pc
BusinessCase().login_pc()

博无止境 | 初学一级 |园豆:153 | 2023-01-09 15:45

只执行一次是 scope=class 控制的吧

ahguo | 园豆:200 (初学一级) | 2023-01-09 19:59

@ahguo: 你说的这个是夹具,和这个没有关系的

博无止境 | 园豆:153 (初学一级) | 2023-01-09 20:32

@博无止境: 那原来多线程执行为什么登录会多次执行

ahguo | 园豆:200 (初学一级) | 2023-01-09 20:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册