You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22全新安装后运行Pytest触发Chrome SingletonLock文件未找到错误

Ubuntu 22下Django测试触发Chrome SingletonLock文件不存在错误

问题描述

在全新安装的Ubuntu 22系统中,Google Chrome可正常安装并运行,但运行Django项目的测试时,pytest抛出文件未找到错误,提示找不到/home/me/.config/google-chrome/SingletonLock。

使用版本

  • pytest-django==4.5.2
  • pytest==7.2.0

错误信息

FileNotFoundError: [Errno 2] No such file or directory: '/home/me/.config/google-chrome/SingletonLock'

触发错误的测试用例

import pytest
from django.urls import reverse


@pytest.mark.django_db
def test_home_view(client):
    """ ensure our default home view is accessable and working"""
    url = reverse('packages')
    response = client.get(url)
    print(f" response {response}")
    assert response.status_code == 200

可正常运行的测试用例

def test_DEBUG_env_var_exists():
    if int(DEBUG) > 0:  # debug is set to true in localhost
        pytest.skip("database misconfigured, test skip")
    assert os.environ.get('DEBUG') is not None

原因分析

这个错误的核心是测试过程中意外触发了依赖Chrome的逻辑:

  1. 失败的测试用例使用client fixture模拟HTTP请求,正常情况下不会关联Chrome,但目标视图packages的代码中很可能包含调用Chrome/无头浏览器的逻辑(比如生成网页截图、渲染页面内容等),当client.get访问该视图时,触发了这部分代码。
  2. SingletonLock是Chrome单实例运行时生成的锁文件,仅当Chrome处于运行状态时才会存在。如果视图代码试图读取这个文件,或者依赖已运行的Chrome进程,而测试环境中未启动Chrome,就会抛出该错误。
  3. 也可能是环境变量配置错误,导致测试代码错误地指向了Chrome的配置路径,进而尝试读取该锁文件。

解决方法

  • 排查视图逻辑:检查packages视图的实现,确认是否有调用Chrome的代码(比如selenium、playwright等工具)。如果存在:
    • 改为使用无头模式运行Chrome,避免依赖单实例锁文件;
    • 在测试中mock掉这部分依赖Chrome的逻辑,不让它实际执行浏览器调用。
  • 检查权限与路径:确保运行测试的用户对/home/me/.config/google-chrome/目录有读写权限(不过Chrome能正常运行的话,这个概率较低)。
  • 排查环境变量:测试前打印所有环境变量,确认是否有错误配置的变量指向了Chrome的路径,导致测试时误读锁文件。
  • 显式启动Chrome实例:如果测试确实需要运行Chrome,确保测试代码中显式启动Chrome进程,而不是依赖系统中已运行的实例。

内容的提问来源于stack exchange,提问作者rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:15:32