Selenium WebUI 自动化使用 pytest-xdist 多进程执行报错求助

Jason丨玖卿 · 2024年06月25日 · 最后由 yeyu 回复于 2024年07月11日 · 6520 次阅读

WebUI 自动化在使用 pytest-xdist 多进程进行并发运行时经常出现以下两种报错(偶现,但偶现频率挺高的):

urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=53730): Max retries exceeded with url: /session/e4d27454c15a67c8963874d64793bba6/screenshot (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))

共收到 7 条回复 时间 点赞

看提示是服务端拒绝连接,先手动看 url 是否正确、可访问吧,可以的话再看服务端日志

yeyu 回复

多进程测的是同一个 web 系统,有些进程又能正常访问测试,有些进程才报这个错误

Jason丨玖卿 回复

没遇到过,进程数是多少呢?
可能多个进程间抢占资源或者访问太多服务端响应不过来,减少进程个数或者每个进程使用不同的用户账号试下
最好还是抓包、分析日志看看可能原因

yeyu 回复

进程就开了两个,回头我试试用多个账号登录看,请问怎么设置某个进程就专门使用某个账号呢

Jason丨玖卿 回复

可以考虑将账号信息作为进程调用函数的入参

yeyu 回复

在 pytest-xdist 插件中如何实现这个呢

Jason丨玖卿 回复

用的少,百度搜了下你可以试下
// 也可以看下这种能不能解决?https://blog.csdn.net/whatday/article/details/109257348

pytest-xdist 用例账户登录
pytest-xdist 是一个 pytest 插件,可以用来运行多线程或者分布式的测试。如果你需要在使用 pytest-xdist 进行分布式测试时进行账户登录,你可以考虑以下几种方案:

使用 pytest.fixture 和 pytest-xdist 的 rsynced 模式。rsynced 模式会确保每个工作进程都有自己的副本,并且在测试之间不会共享状态。

使用外部数据库或者缓存系统来保存登录状态,并在测试之间共享。

下面是一个使用 pytest.fixture 和 pytest-xdist 的 rsynced 模式进行账户登录的简单示例:

import pytest

@pytest.fixture(scope="session")
def login_info(request):
if not hasattr(request.config.session, "login_info"):
# 模拟登录过程,实际项目中你需要替换为实际的登录代码
request.config.session.login_info = {"username": "user", "password": "pass"}
return request.config.session.login_info

@pytest.mark.xdist_rsync_secure
def test_example1(login_info):
# 使用 login_info 进行测试
print(f"Test 1 with login info: {login_info}")

@pytest.mark.xdist_rsync_secure
def test_example2(login_info):
# 使用 login_info 进行测试
print(f"Test 2 with login info: {login_info}")
在这个例子中,login_info 是一个 fixture 函数,它会在会话级别只执行一次,并且通过 xdist_rsync_secure 标记确保每个使用该 fixture 的测试都有自己的副本。

请注意,这只是一个示例,实际的登录逻辑需要替换为你项目中的实际登录代码。同时,xdist_rsync_secure 标记是 pytest-xdist 插件提供的,用于确保跨多个工作进程的测试之间不会共享状态。
提示:AI 自动生成,仅供参考

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册