如果启用了代码覆盖,则VS 2017构建计算机上的TFS 2017测试任务运行失败

时间:2017-05-05 12:52:24

标签: code-coverage visual-studio-2017 tfs2017 vstest.console.exe

我们在使用VS 2017 Enterprise的构建计算机上执行了大量测试,我们在Visual Studio测试任务中启用了代码覆盖。此操作失败,并在TFS 2017控制台中出现以下错误:

##[section]Starting: Test Assemblies **\*test*.dll
Preparing task execution handler.
Executing the powershell script: d:\builds\4\_tasks\VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9\1.0.60\VSTest.ps1
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform
Working folder: d:\builds\4\3\s
Executing C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe "d:\builds\4\3\s\Source\u.a.testassembly.dll"  /Settings:"C:\Users\username\AppData\Local\Temp\tmp9CCF.tmp" /EnableCodeCoverage /logger:trx /TestAdapterPath:"d:\builds\4\3\s"
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

##[error]The test source file "/EnableCodeCoverage" provided was not found.

使用Visual Studio 2015企业,测试是在代码覆盖率下执行的,没有错误。

我们将vstest.console.exe文件的路径作为自定义路径提供。

如果我在TFS 2017' Visual Studio测试'的复选框中禁用了代码覆盖率。任务并使用未指定代码覆盖收集器的runsettings文件,执行测试,但不报告代码覆盖率。

我还尝试禁用代码覆盖率复选框和

/EnableCodeCoverage

参数作为测试任务的命令行参数提供。这提供了与上面相同的错误。

我发现很多人在VS 2017中遇到代码覆盖问题,但这似乎与.NET核心项目有关?

感谢您的帮助! : - )

更新1

如果我尝试通过开发人员命令提示符运行vstest.console.exe,则无法成功指定/EnableCodeCoverage选项。它提供以下错误消息:

Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

The test source file "/EnableCodeCoverage" provided was not found.

如果在没有上述开关的情况下运行完全相同的命令,则不会出现此错误消息。

更新2

如果我使用Runsettings文件,而是指定数据采集器,则会收到与JSON相关的错误:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) 
into type 'System.Collections.ObjectModel.Collection`1 Microsoft.VisualStudio.TestPlatform.ObjectModel.AttachmentSet]' 
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

如果我使用/ Diag开关,我会在日志文件中获得以下堆栈跟踪:

Stack Trace:
ved Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
ved Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
ved Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
ved Newtonsoft.Json.Linq.JToken.ToObject(Type objectType, JsonSerializer jsonSerializer)
ved Newtonsoft.Json.Linq.JToken.ToObject[T](JsonSerializer jsonSerializer)
ved Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.JsonDataSerializer.DeserializePayload[T](Message message)
ved Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection.ProxyDataCollectionManager.<>c__DisplayClass6_0.<AfterTestRunEnd>b__0()
ved Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection.ProxyDataCollectionManager.InvokeDataCollectionServiceAction(Action action, ITestMessageEventHandler runEventsHandler)

更新3

我们的构建服务器是Windows 2012标准服务器。除了安装Windows SDK有效负载之外,我们能够安装VS 2017而没有任何错误。之后我们不得不手动安装适用于Windows 8的Windows SDK,因为VS 2017 Enterprise中包含的Windows SDK有效负载并未在Windows Server 2012上安装。

我刚刚注意到VS 2008的Windows Server 2012不在the list of supported operating systems上?...

更新4

详细输出     vstest.console.exe /? 从VS 2017开发人员命令提示符运行时:

Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Usage: vstest.console.exe [Arguments] [Options] [[--] <args>...]]
Description: Runs tests from the specified files.

然后列出所有参数。在

/Enablecodecoverage

切换无处可寻。使用“开始”菜单中的快捷方式打开“开发人员命令提示符”。

我试图运行一个测试套件,其中datacollector是在.runsettings文件中定义的,而不是使用/ enablecodecoverage开关,但这会产生上面列出的JSON错误。

更新5

将我们的TFS内部部署升级到2017年更新1后,我们能够成功执行单元测试并获得代码覆盖率。

然而,我们正在使用SonarQube,显然在撰写市场扩展版本3.0.0中提供的SonarQube扫描仪时,由于VS 2017中完成的注册表项更改,因此无法正确找到代码覆盖率报告

关于此问题的bug report has been filed with SonarQube

您可以通过手动创建名为&#39; ShellFolder&#39;的注册表值来解决此限制。在以下注册表项下:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\15.0

&#39; ShellFolder&#39;字符串值应为:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise

我已将这些信息留在此处,以防有人看到我们遇到的相同问题。

0 个答案:

没有答案