Cypress测试本地运行通过但Azure DevOps流水线执行报错如何解决?
报错原因分析
- 本地运行和Azure DevOps流水线的运行权限环境存在差异:本地是使用个人用户账号执行命令,对Cypress相关目录有完整读写权限;而流水线代理如果使用服务账号运行,默认对Cypress的浏览器缓存目录没有删除修改权限,触发EPERM权限报错。
- Chrome进程残留:上一次流水线运行异常中断后,Chrome后台进程没有正常退出,持续占用缓存目录中的
data_1文件,导致新的Cypress任务无法操作该文件,同时残留进程也会阻塞新Chrome实例和Cypress的连接,触发浏览器连接超时报错。 - 当前使用的Cypress 6.9.1属于较旧版本,存在Windows环境下浏览器缓存清理、进程回收逻辑的已知缺陷,更容易触发这类权限冲突问题。
对应解决方案
- 临时快速修复方案:在Cypress运行任务前添加PowerShell脚本任务,执行以下命令清理残留进程和缓存:
# 强制结束所有残留Chrome进程 Get-Process chrome -ErrorAction SilentlyContinue | Stop-Process -Force # 清理Cypress浏览器缓存目录 Remove-Item -Path "C:\Users\admin\AppData\Roaming\Cypress\cy\production\browsers\chrome-stable\*" -Recurse -Force -ErrorAction SilentlyContinue
- 调整Cypress运行参数,添加自动清理配置,修改后的运行命令如下:
npx cypress run --browser chrome --env api_endpoint="https://myApp.com",page="TestAppsForCdnIntegrations/myApp.html" --config trashAssetsBeforeRuns=truetrashAssetsBeforeRuns=true参数会强制Cypress每次运行前自动清理上一次的运行缓存和资源文件。 - 自托管代理权限调整:将代理运行账号加入本地管理员组,或者给运行账号配置
C:\Users\admin\AppData\Roaming\Cypress目录的完全控制权限。 - 永久修复方案:将Cypress升级到最新稳定版本,新版本已经修复了Windows环境下大量权限、进程残留相关的兼容性问题。
内容的提问来源于stack exchange,提问作者user9847788
相关产品推荐
相关产品推荐

