Visual Studio 2022中pytest testlauncher.py启动失败求助
问题描述
- 在Visual Studio 2022的虚拟环境中安装pytest(版本8.2.2),测试在VS外部可正常运行
- VS测试资源管理器跳过所有测试,触发
AttributeError: module '_pytest.compat' has no attribute '_translate_non_printable'错误 - 已通过在pyproj中添加VSTest目标使
dotnet test可用,寻求测试资源管理器的修复方案
环境信息:
- 平台:win32
- Python版本:3.12.4
- pytest版本:8.2.2
- pluggy版本:1.5.0
报错详情:
env1\Scripts\python.exe "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py" XXXX\ pytest "" 0 "" "" dummyfilename .\tests\test_optimization_host.py::test_bogus_endpoint --junitxml=XXX\TestResults\junitresults_e6fdf0a1-8aa1-4227-8f5c-f9bcc5b97e34.xml --rootdir=XXXX -o junit_logging=all -o junit_family=xunit1 Traceback (most recent call last): File "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py", line 189, in <module> main() File "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py", line 30, in main run(testRunner, coverage_file, test_file, args) File "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py", line 119, in run patch_translate_non_printable() File "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py", line 136, in patch_translate_non_printable translate_non_printable = getattr(_pytest.compat, "_translate_non_printable") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: module '_pytest.compat' has no attribute '_translate_non_printable' Results for pytest not found xxxx\TestResults\junitresults_e6fdf0a1-8aa1-4227-8f5c-f9bcc5b97e34.xml ========== Test run finished: 1 Tests (0 Passed, 0 Failed, 1 Skipped) run in 176 ms ========== ========== Starting test discovery ========== Starting pytest discovery for the XXXX project. This can take up to 60 seconds. cd xxxx set PYTHONPATH=XXX\nenv1\Scripts\python.exe C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\PythonFiles\testing_tools\run_adapter.py discover pytest --output-file ERROR: failed to patch pytest, _pytest.compat._translate_non_printable ========== Test discovery finished: 1 Tests found in 1.5 sec ==========
修复方案
方案1:降级pytest到兼容版本
VS 2022的Python测试工具目前对pytest 8.x版本兼容性不足,_translate_non_printable是pytest 7.x及更早版本的私有API,pytest 8.x已移除该属性。执行以下命令降级到兼容版本:
pip install pytest==7.4.4
降级后重启VS,重新运行测试资源管理器即可。
方案2:修改VS内置testlauncher.py脚本(需管理员权限,不推荐)
若不想降级pytest,可手动修改VS的测试启动脚本,跳过对该属性的依赖:
- 定位到路径:
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\PYTHON\CORE\testlauncher.py - 用管理员权限打开文件,找到
patch_translate_non_printable函数 - 修改函数内容,添加异常捕获逻辑:
def patch_translate_non_printable(): try: import _pytest.compat translate_non_printable = getattr(_pytest.compat, "_translate_non_printable", None) if translate_non_printable: # 保留原有补丁逻辑(若有) pass except AttributeError: # 忽略属性不存在的错误 pass
- 保存文件后重启VS,重新运行测试。
方案3:安装VS最新更新
微软已针对该兼容性问题在VS后续更新中修复,可打开Visual Studio Installer,检查并安装Visual Studio 2022的最新累积更新,更新后测试工具会适配pytest 8.x版本。
内容的提问来源于stack exchange,提问作者martin
相关产品推荐
相关产品推荐

