gpt4 book ai didi

code-coverage - 如果启用代码覆盖率,TFS 2017 测试任务在 VS 2017 构建机器上运行失败

转载 作者:行者123 更新时间:2023-12-01 04:48:50 33 4
gpt4 key购买 nike

我们正在使用 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 测试”任务的复选框中禁用代码覆盖率并使用未指定代码覆盖率收集器的运行设置文件,则会执行测试,但不会报告代码覆盖率。

我还尝试禁用代码覆盖率复选框和
/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 标准服务器。我们能够安装 VS 2017,没有任何错误,除了安装 Windows SDK 有效负载。由于 VS 2017 Enterprise 中包含的 Windows SDK 负载未安装在 Windows Server 2012 上,因此我们必须随后手动安装适用于 Windows 8 的 Windows SDK。

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

更新 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

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

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

更新 5

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

然而,我们正在使用 SonarQube,显然在编写 Marketplace Extension v. 3.0.0 中提供的 SonarQube 扫描仪时,由于 VS 2017 中注册表项的更改,它没有正确定位代码覆盖率报告。

bug report has been filed with SonarQube在这个问题上。

您可以通过在以下注册表项下手动创建名为“ShellFolder”的注册表值来绕过此限制:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\15.0

'ShellFolder' 字符串值应该是:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise

我已将上述信息留在这里,以防其他人遇到与我们相同的问题。

最佳答案

原因是直接调用 vstest.console.exe 工具没有/EnableCodeCoverage 选项。 (为 Visual Studio 测试步骤/任务指定 vstest.console.exe 路径)。如果通过 VS 2017 的开发人员命令提示符调用 vstest.console 命令,它有/EnableCodeCoverage。

要解决此问题,您可以将 TFS 2017 升级到 TFS 2017 更新 1 ,然后选择 2.* 的版本Visual Studio 测试步骤/任务 , 之后您可以选择 Visual Studio 2017 的选项VSTest 版本 .

更新:

另一个解决方法是,您可以安装 agent for VS 2017 (Tools for Visual Studio 2017) 在构建代理上,然后在测试代理安装文件夹中为 Visual Studio 测试步骤/任务指定 vstest.console.exe 路径。 (C:\Program Files (x86)\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe)

enter image description here

关于code-coverage - 如果启用代码覆盖率,TFS 2017 测试任务在 VS 2017 构建机器上运行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805498/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com