当Visual Studio测试任务尝试发布结果时,TFS 2017卡住了

时间:2018-06-22 12:53:00

标签: tfs tfsbuild vstest

我们有一个TFS 2017构建代理,该代理执行Visual Studio测试任务以执行我们的单元测试。这项工作已经进行了好几年,但是突然之间-没有任何代码更改-任务卡住了。

所有测试都已完成运行,我们将看到摘要信息,它将位于通常会发布结果的地方……但是什么都没有发生。我们已经等待了12多个小时才能完成。此步骤通常需要90分钟左右。

我已经确认正在创建TRX文件。大小约为4MB。我们正在运行3000多个单元测试。

我还尝试了禁用测试任务中的代码覆盖率和附件上传功能,但这似乎没有什么作用。

以下是卡住该步骤时日志输出的屏幕截图。

Visual Studio Test Task Logs

最后,我们在此服务器上还有许多其他项目,它们的测试可以很好地运行/发布,以及与此相同版本的TFS发行版,它们也可以运行没有问题的测试(集成/系统测试)。

更新:我们在另一个构建服务器上运行了该构建,并且它正确发布了测试。因此,这意味着此特定的构建服务器有问题...

更新2:所以我不再确定这里发生了什么。我们遇到问题的原始构建服务器现在可以正常工作,并且没有任何更改。刚刚再次开始工作。其他构建服务器正在工作,然后停止。同样的问题。我将3000多个测试分解为两个步骤,大约为50/50,并且工作了几次,但现在没有了。因此,这似乎不是特定于服务器的,也似乎与测试数量无关。调试日志记录没有任何用处,因为一切似乎都很好,直到生成TRX文件后它停止执行任何操作为止。

更新3:好吧,它又发生了。我不确定如何进行。我什至在构建工具箱上尝试了Fiddler,以查看是否可以捕获时髦的流量,但我希望看到的大部分流量都看不到。就像Fiddler并未捕获大量工作(例如源下载,报告进度或测试结果发布)一样。不是通过HTTP / HTTPS吗?

2 个答案:

答案 0 :(得分:1)

由于我们正在运行的测试数量众多,因此很难弄清楚,但我能够将其范围缩小到启动ping.exe的测试:

[ExpectedException(typeof(TimeoutException))]
[TestMethod]
public void ProcessWillTimeout()
{
    const string command = "cmd";
    const string args = "/C ping 127.0.0.1 /t";

    var externalProcessService = new ExternalProcessService();
    externalProcessService.Execute(command, args, TimeSpan.FromMilliseconds(500));
}

无论出于何种原因,此测试都使conhost.exe和ping.exe处于“孤立”状态。这些过程没有终止的事实(由于未知原因)阻止了测试将结果发布回TFS。某处可能有某事在等待过程完成,而这从未发生。

实际上,我们将在任务管理器和进程浏览器中看到一堆conhost.exe和ping.exe进程:

enter image description here

您会在此处看到工具提示...“ [错误打开过程]”。我什至无法使用Process Explorer杀死这些进程-尽管Task Manager可以。果然,当我杀死它们时,TFS构建任务将立即恢复并完成发布结果。

因此,我们正在测试的ExternalProcessService代码中显然存在某种错误(尽管仔细地有一个final块终止了该过程),但是我们至少能够使构建测试再次运行而没有问题。

答案 1 :(得分:0)

建议您放弃此构建,然后再次触发它。缩小范围是否可以稳定复制此问题。

根据您的描述,所有其他构建均可正常运行。而且它工作了好几年。所有测试均通过,测试报告已编写,但仅任务挂起。请仔细检查其他一些进程是否可能无法正常关闭。

除了使用另一个构建代理来再次测试。同样,尝试使用相同的设置创建一个新的构建定义,触发该定义,这可以解决问题。

此外,您可以enable verbose logging进行故障排除。为此,只需添加名为 system.debug 的构建变量并将其值设置为“ true ”,它将包含更详细的日志信息。