当我使用SpecRun在Azure DevOps发布管道中并行运行自动测试时。在SpecFlow中,我在一些与另一个进程(正在运行的其他测试)正在使用Chromedriver相关的测试中遇到了一个异常。例外情况是:
错误:调用的目标引发了异常-&燃气轮机;进程无法访问文件D:a_tentestresultschrome102.0.5005.61X64chromedriver。因为它正被另一个进程使用。
文章源自玩技e族-https://www.playezu.com/179396.html
这不会在本地发生,并且在多个线程上运行良好,而且似乎只在管道中发生。以前有人经历过这种情况吗?如果是这样的话,有没有解决方法?文章源自玩技e族-https://www.playezu.com/179396.html 文章源自玩技e族-https://www.playezu.com/179396.html
未知地区 1F
我设法解决了这个问题。它在本地传递的原因是因为我的机器上存在Chromedriver,所以每当测试运行时,它都不需要下载文件。在虚拟机上,Chromedriver不存在,所以它必须下载。似乎测试是在连接到下载Chromedriver的任何进程完成之前执行的,这就是为什么第一组运行的测试失败了,但这些线程上的后续测试通过了。
我通过弹出一些重试逻辑和一些日志来解决这个问题,以显示初始化失败的次数。
[Before]
public void Before()
{
int errorCount = 0;
while (errorCount < 5)
{
try
{
_webDriverContext = new WebDriverContext();
_webDriverContext.Browser = new Browser(BrowserOptionsSupport.GetBrowserOptions(new TestSettings()));
}
catch
{
Log.Info($"Failed to initialize Chrome on {errorCount} attempt");
errorCount++;
if (errorCount < 5)
{
continue;
}
else
{
throw;
}
}
break;
}
}