问题标签 [vstest.console.exe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure-devops - Visual Studio Team 服务运行 webtest
我对团队服务有点陌生,所以通常先道歉。我需要运行一个 webtest(通过记录浏览器步骤创建的 webtest1.webtest,即用于负载测试运行的相同),它在 VS 2015 上本地运行良好。我正在寻找一种在团队服务上运行它的方法。
为了给你一个大纲,我将检查团队服务存储库上的代码,CI 开始构建过程,其中包含 Visual Studio 构建和单元测试,这些测试与在我的 VM 中本地部署的代理一起运行。如果单元测试成功,它将被部署到测试环境,然后我需要在此处执行 Web 测试,如果成功,则将其部署到产品。
我通读了几篇文章,其中概述了在团队服务上运行 webtest 作为负载测试,但我不想做负载测试,我只想在场景/功能/集成测试中执行一次,即页面是否可访问以及所有数据通过或类似的东西。
在命令行中本地使用 mstest.exe 运行 webtest 时运行良好,但团队服务使用 vstest.console.exe 执行它。它指出没有找到测试用例(我尝试使用 dll 和 webtest1.webtest 作为构建的一部分)。
我无法在命令行上本地使用 vstest.console.exe 以及一些建议的orderedtest 和其他一些方法。在命令行中本地执行时,我得到的是缺少orderedtestadapter。
我正在考虑在命令行中使用 mstest.exe 作为团队服务构建任务之一执行测试,但是然后如何将 trx 文件加载回构建结果我也应该采用这个或任何其他更好的方法。
非常感谢有关如何解决它的任何步骤。
c# - 在 vstest.console.exe 中运行多个单元测试时格式化控制台输出
情况
我正在使用 vstest.console.exe 一次运行一些单元测试项目。我也对控制台输出感兴趣,因为我无法使用 I/O 操作将结果记录到 .trx 文件。我也仅限于 vstest.console.exe 的一个实例。所以我想一次运行 UnitTests1.dll、UnitTests2.dll 等。我正在通过以下方式实现这一目标vstest.console.exe UnitTests1.dll UnitTests2.dll
。当测试被执行并且我得到我的控制台输出时,这工作得很好。
问题
我遇到的问题是输出的格式。它看起来像控制台的默认输出。问题是所有单元测试项目都捆绑在一起,就好像我正在运行一个单元测试项目一样。
目标
我想将每个单元测试项目的输出放在自己单独的行上,就像这样
UnitTests1: Total tests: 3. Passed: 2. Failed: 1. Skipped 0.
UnitTests2: Total tests: 3. Passed: 3. Failed: 0. Skipped 0.
换句话说,甚至可以在 vstest.console.exe 中格式化*控制台输出吗?提前致谢!
vstest - vstest 传递参数到“dotnet test”执行
描述
我想使用 vstest.console 运行 .net 核心 NUnit 测试。这工作正常,但我想将参数传递给“dotnet test”执行,在我的情况下为“--no-build”我如何将此参数解析为 dotnet 执行?我没有找到正确的 runsettings 变量
重现步骤
vstest.console.exe " "project.json" /UseVsixExtensions:true /Settings:settings.runsettings
预期行为
["C:\Program Files\dotnet\dotnet.exe" 测试 "project.json" --port 55307 --no-build]
实际行为
["C:\Program Files\dotnet\dotnet.exe" 测试 "project.json" --port 55307 ]
环境
Windows 7的
项目.json
{“版本”:“1.0.0-*”,
“依赖项”:{“NUnit”:“3.5.0”,“dotnet-test-nunit”:“3.4.0-beta-3”},
“testRunner”:“nunit”,“框架”:{“netcoreapp1.0”:{“imports”:“portable-net45+win8”,“依赖项”:{“Microsoft.NETCore.App”:{“版本”: “1.0.0-*”、“类型”:“平台”} } } } }`
vstest - 在 vstest.console.exe 中过滤未分类的测试
我有一个视觉工作室测试程序集。有几种测试方法,其中一些方法TestCategoryAttribute
适用于它们,而另一些则没有。我想过滤掉所有不包含该属性的方法被执行,即不应该执行未分类的测试。
我试图有这样的东西不起作用。
vstest.console.exe MyTests.dll /TestCaseFilter:"(TestCategory!=)"
寻找正确的语法。我正在使用 Visual Studio 2015。
.net - vstest.console.exe 执行模型和隔离行为
我试图确定在编写要在vstest.console.exe
.
示例 1:假设我有两个测试都依赖于MyClass.Singleton.Counter
零值。现在假设我们聘请了一位新实习生,他在他编写的测试中无意中增加了该值。如果这个新测试在旧的两个单元测试之前运行。如果测试在同一个进程中运行,这两个单元测试将失败(并且没有重置计数器值)。
示例 2:假设我有两个针对同一个数据库的集成测试。这两个测试都记录数据库中存在的计数器的值,递增计数器,然后从数据库中读取计数器,断言它的值比最初读取时高 1。如果这两个测试并行运行,我们就有了竞争条件。
最终目标是尝试理解开发人员在编写特定运行的测试时应该牢记的注意事项vstest.console.exe
,它的执行模型是什么?
注意:我对最佳实践不感兴趣,只对vstest.console.exe
影响测试结果的方式的执行模型感兴趣。
相关考虑:
- 如果
project1.dll
和project2.dll
被传递到控制台,并且每个都对依赖程序集的冲突版本有依赖关系,那么项目测试文件将如何成功执行? - 每个测试文件(即dll)是否都有自己的进程?
- 每个测试文件(即 dll)是否在单个进程中都有自己的 AppDomain?
- 执行每个测试文件的当前工作目录是什么?
- 测试是串行执行还是并行执行?
- 测试执行顺序是否确定?
- 不同的测试适配器对相关行为有多少控制?
.runsettings
未指定文件或测试适配器时的默认行为是什么?
相关背景资料:
(1) vstest.console.exe 文档/InIsolation
声明它“在一个独立的进程中运行测试” 。
我会从上面推断出创建了一个进程,在该进程中传递给测试运行器的所有测试文件都将执行,但这可能不准确。
(2)vstest.console.exe
可以在命令行上取多个测试“文件”,它们是DLL,可能会引用不同目录下的不同项目。
(3) 通过提供*.runsettings
文件,可以使用测试适配器来执行测试。
teamcity - 从 TeamCity 步骤中的特定类中排除 MSTest 测试
因为您不能使用 MSTest 在测试类上设置测试类别,所以我选择在名称上做类似的事情,只要测试类...IntegrationTests
包含运行缓慢的测试,就为它们添加后缀。
在 Visual Studio 测试资源管理器中,我可以使用以下方法排除这些测试:
但是,在 TeamCity 中,此选项不起作用。我在最新版本的 TeamCity 中使用 VSTest 2017 测试引擎版本。但是,它似乎只有一个TestCaseFilter
选项似乎缺少排除某个类中的测试的选项?
我使用了这个 VSTest.ConsoleRunner 文档和这篇文章TestCaseFilter
来得出这个结论。我还通读了runsettings 文件文档,看看它是否包含任何信息,但没有运气。
我的目标是让 1 个 TeamCity 步骤在未“标记”为慢的类中运行所有测试,并在标记的类中运行另一个后续步骤。
我目前看到的唯一解决方法是将我的所有测试项目分成两个项目,并将这些集成测试类移动到单独的程序集中。我宁愿不那样做。
底线:如何在类名包含特定字符串的类中排除测试?
visual-studio - 如何在 Visual Studio 中调试自定义测试适配器
我正在为 Visual Studio 2017 开发自定义测试适配器。如何配置 Visual Studio 以调试测试适配器,而无需使用诸如添加Debugger.Launch()
我的适配器代码之类的技巧?
code-coverage - 如果启用代码覆盖率,则 TFS 2017 测试任务在 VS 2017 构建机器上运行失败
我们正在使用 VS 2017 Enterprise 的构建机器上执行大量测试,我们在其中启用了 Visual Studio 测试任务的代码覆盖。此操作失败并在 TFS 2017 控制台中出现以下错误:
使用 Visual Studio 2015 企业版,测试执行时代码覆盖率没有错误。
我们提供了 vstest.console.exe 文件的路径作为自定义路径。
如果我在 TFS 2017 'Visual Studio Test' 任务的复选框中禁用代码覆盖率并使用未指定代码覆盖率收集器的运行设置文件,则会执行测试,但不会报告代码覆盖率。
我也尝试过禁用代码覆盖率复选框并且
参数作为测试任务的命令行参数提供。这提供了与上述相同的错误。
我发现很多人在 VS 2017 中遇到代码覆盖问题,但这似乎主要与 .NET 核心项目有关?
谢谢您的帮助!:-)
更新 1
如果我尝试通过开发人员命令提示符运行 vstest.console.exe,我将无法成功指定该/EnableCodeCoverage
选项。它提供以下错误消息:
如果我在没有上述开关的情况下运行完全相同的命令,则不会出现此错误消息。
更新 2
如果我改用 Runsettings 文件,在该文件中指定数据收集器,则会收到与 JSON 相关的错误:
如果我使用 /Diag 开关,我会在日志文件中获得以下堆栈跟踪:
更新 3
我们的构建服务器是 Windows 2012 标准服务器。除了安装 Windows SDK 有效负载外,我们能够安装 VS 2017 而没有任何错误。之后我们不得不手动安装适用于 Windows 8 的 Windows SDK,因为 VS 2017 Enterprise 中包含的 Windows SDK 有效负载没有安装在 Windows server 2012 上。
我刚刚注意到 Windows Server 2012 不在VS 2017支持的操作系统列表中?...
更新 4
vstest.console.exe /? 的详细输出 从 VS 2017 开发人员命令提示符运行时是:
然后列出所有参数。这
开关无处可寻。开发人员命令提示符使用“开始”菜单中的快捷方式打开。
我尝试运行一个测试套件,其中数据收集器是在 .runsettings 文件中定义的,而不是使用 /enablecodecoverage 开关,但这会产生上面列出的 JSON 错误。
更新 5
将我们的本地 TFS 升级到 2017 更新 1 后,我们能够成功执行单元测试并获得代码覆盖率。
但是,我们正在使用 SonarQube,显然在编写 Marketplace Extension v. 3.0.0 中提供的 SonarQube 扫描仪时,由于 VS 2017 中的注册表项发生了更改,因此无法正确定位代码覆盖率报告。
已向 SonarQube 提交了有关此问题的错误报告。
您可以通过在以下注册表项下手动创建名为“ShellFolder”的注册表值来绕过此限制:
'ShellFolder' 字符串值应为:
我已将上述信息留在这里,以防其他人遇到与我们相同的问题。
c# - 覆盖率报告说 C#.Net 测试代码的覆盖率为零(对于 Nunit 测试)
我正在尝试使用 OpenCover 进行声纳分析来获取 C# 测试项目(Nunit 测试用例)的代码覆盖率。我在命令提示符下运行了以下执行 cmd(来自 C# 项目解决方案文件夹和来自 C# 项目文件夹),但我总是得到以下执行输出。我从声纳页面得到了执行命令。
有什么我做错了还是我需要添加更多的论点来获得报告。
系统和软件详细信息:
- 操作系统: Windows7 64位
- MsBuild 版本: 14
- 视觉工作室: VS2015
- 开盖版本: 4.6.166.0
- Nunit 版本: 2.4.8.0(仅具有 Nunit 核心、Nunit 框架和 Nunit 核心接口库 dll)
- SonarQube 版本: 5.6.5
- SonarC# 版本: 5.10.0.1411
- MSBuild 版本的声纳扫描仪: 2.2.0.24
执行 cmd : "C:\Program Files (x86)\OpenCover\OpenCover.Console.exe" -output:"SolutionFolder.sonarqube\opencover.xml" -register:user -target:"C:\Program Files (x86)\ Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"SolutionFolder\UnitTestProject1\bin\Debug\UnitTestProject1.dll"
执行输出: 执行:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe Microsoft (R) Test Execution Command Line Tool Version 14.0.25420.1 版权所有 (c) Microsoft Corporation . 版权所有。开始测试执行,请稍候... 警告:使用隔离模式运行测试,根据有效 Platform:X86 和 .Net Framework:Framework35 设置进行测试运行。使用 /inIsolation 参数禁止显示此警告。警告:SolutionFolder\UnitTestProject1\bin\Debug\UnitTestProject1.dll 中没有可用的测试。确保已安装的测试发现器和执行器、平台和框架版本设置正确,然后重试。信息:此外,如果测试发现者 &,您可以尝试指定“/UseVsixExtensions”命令 executor 作为 vsix 扩展安装在机器上,并且您的安装支持 vsix 扩展。示例:vstest.console.exe myTests.dll /UseVsixExtensions:true 正在提交... 访问过的类 0 of 1 (0) 访问过的方法 0 of 22 (0) 访问过的点 0 of 117 (0) 访问过的分支 0 of 22 (0) ==== 替代结果(包括所有方法,包括那些没有相应来源的方法) ==== 替代访问类 0 of 1 (0) 替代访问方法 0 of 23 (0)
注意:在覆盖率输出报告中,我只获得零百分比的覆盖率。