当我在Azure DevOps发布管道中使用SpecRun并行运行自动化测试时。SpecFlow,我在与另一个进程(正在运行的其他测试)正在使用的Chromedriver相关的一些测试上得到一个异常。例外是:
Error: Exception has been thrown by the target of an invocation. -> The process cannot access the file 'D:a_tempTestResultsChrome102.0.5005.61X64chromedriver.exe' because it is being used by another process.
这不会在本地发生,并且在多个线程上运行得很好,似乎只发生在管道中。有人经历过这种情况吗?如果是这样,有什么办法解决吗?
我设法解决了这个问题。它在本地传递的原因是因为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;
}
}