【问题标题】:VSTest.console.exe when run under Jenkins generate empty .coverage fileVSTest.console.exe 在 Jenkins 下运行时生成空的 .coverage 文件
【发布时间】:2018-08-12 02:11:00
【问题描述】:

我有一个简单的 Jenkins 构建配置,用于 .Net Framework 项目。该项目使用单元测试。

当我在 Jenkins 下使用 VSTestRunner 插件运行测试时,它会生成测试报告 .trx 以及 .coverage 文件。所有测试均已找到并正常运行,但生成的 .coverage 文件始终为空(10B 大小且没有覆盖数据)。 我试图在 Jenkins 中将该命令作为 Shell Execution 命令提供。但它仍然给出相同的结果,即空的 .coverage 文件。 命令是:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "CompletePathToLibraries.UnitTest.dll" /Enablecodecoverage /InIsolation /Framework :Framework45 /Logger:trx

但是,如果我从 Jenkins 外部运行相同的命令,即通过手动启动命令提示符,它会生成完美的 .coverage 文件,其中包含预期的数据。

系统配置: 视窗 10 专业版 詹金斯 2.121.2 视觉工作室企业 2017 Jenkins 作为服务安装并在 NT AUTHORITY\SYSTEM 帐户下运行。

【问题讨论】:

    标签: .net visual-studio unit-testing jenkins code-coverage


    【解决方案1】:

    我也遇到了同样的问题,我就是这样解决的: 我发现 Jenkins Server 将使用与您构建的机器用户不同的用户执行 cmd。因此,我决定更改 uesr 帐户,使其与我构建的机器用户帐户相同。

    1. 按win + R
    2. 输入“services.msc”并回车
    3. 找到“Jenkins”服务并双击它
    4. 驱动到“登录”标签
    5. 选中“此帐户”半径按钮
    6. 输入您的本地帐号和密码
    7. 应用设置
    8. 重启 Jenkins 服务

    那么,问题就解决了!

    希望这个解决方案对你有帮助^^

    【讨论】:

    • 谢谢。它为我解决了它。但原因是什么? msbuild 和 vstest.console 在同一个作业中运行。所以两者都必须以同一用户身份运行。对吗?除了覆盖范围之外,其他一切都有效。
    猜你喜欢
    • 2015-09-01
    • 2017-06-16
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2017-05-29
    相关资源
    最近更新 更多