如何解决TeamCity中缺少测试覆盖率的问题?

时间:2014-06-27 18:29:18

标签: visual-studio-2013 tfs2010 code-coverage teamcity-8.0 dotcover

根据日志,我错过了获取测试覆盖率的信息。可能的原因是:

  1. 包含/排除模式不正确
  2. 在没有调试信息的情况下编译程序集
  3. PDB文件不可用
  4. 为MSTest启用Visual Studio代码覆盖率
  5. TESTRUNCONFIG用于MSTest,并且未禁用Visual Studio代码覆盖率
  6. 作为TeamCity的新手,我需要一些指导如何做。

    1. 我已经通过 +:* DLL 包含了所有DLL。目前没有排除,但我已尝试通过 - :* test * 省略测试本身。
    2. 我使用 DEBUG 配置文件进行编译,结果将放在 bin / debug obj / debug 目录中的服务器上。根本没有发布
    3. 我在服务器上的 .source / bin / debug 中有PDB文件。
    4. 由于我在TeamCity服务器上运行nUnit和dotCover,因此没有涉及VS.
    5. 由于我在TeamCity服务器上运行nUnit和dotCover,因此没有涉及VS.
    6. 我想念什么?我还能做些什么?

      修改

      系统是:VS13,TFS10,TC8.2(包含nUnit和dotCoverage的最新版本)

      作为测试步骤的日志部分(报告编译步骤中没有错误,退出代码0)。在此之后,只有删除dotCover快照文件。但请注意,没有找到DATA文件,并且XML文件不包含任何数据。

      <?xml version="1.0" encoding="UTF-8"?>
      <Root DotCoverVersion="2.6.1000.602" 
            ReportType="TeamCityXml" 
            CoveragePercent="0" 
            TotalStatements="0" 
            CoveredStatements="0"/>
      

      我可以在这做什么?

        

      [10:59:39]步骤2/2:测试(NUnit)(29s)
        [10:59:39]开始:C:\ TeamCity \ buildAgent \ plugins \ dotnetPlugin
        \ bin \ JetBrains.BuildServer.NUnitLauncher.exe #TeamCityImplicit
        [10:59:39]在目录中:C:\ TeamCity \ buildAgent \ work \ 263aa919ed5f7bb8
        [10:59:46] JetBrains dotCover Console Runner v2.6.1000.602。版权所有(c)2009-2014 JetBrains s.r.o.保留所有权利。
        [10:59:55] [JetBrains dotCover]覆盖会议开始[2014-06-30 10:59:55]
        [11:00:02]启动TeamCity NUnit Test Runner
        [11:00:02]在.NET Framework v4.0 x64下运行NUnit-2.6.3测试   [11:00:03]AutonomousTesting.dll
        [11:00:03]CoverageTest.TestExample.TestEquality
        [11:00:03]CoverageTest.TestExample.TestException
        [11:00:03]CoverageTest.TestExample.TestInequality
        [11:00:03]CoverageTest.TestExample.TestOmission
        [11:00:03]测试被忽略:CoverageTest.TestExample.TestOmission
        [11:00:05]AutonomousTesting.dll
        [11:00:05]CoverageTest.TestExample.TestEquality
        [11:00:05]CoverageTest.TestExample.TestException
        [11:00:05]CoverageTest.TestExample.TestInequality
        [11:00:05]CoverageTest.TestExample.TestOmission
        [11:00:05]测试被忽略:CoverageTest.TestExample.TestOmission
        [11:00:07] [JetBrains dotCover]覆盖会议结束[2014-06-30 11:00:07]
        [11:00:07] [JetBrains dotCover]覆盖结果后处理开始[2014-06-30 11:00:07]
        [11:00:08] [JetBrains dotCover]覆盖结果后处理完成[2014-06-30 11:00:08]
        [11:00:09] ## teamcity [importData type =&#39; dotNetCoverage&#39;工具=&#39; dotcover&#39;文件=&#39; C:\ TeamCity的\ buildAgent \ TEMP \ buildTmp \ coverage_dotcover16594618384737853441.data&#39;]
        [11:00:09]从&C; \ TeamCity \ buildAgent \ temp \ buildTmp \ coverage_dotcover16594618384737853441.data&#39;导入数据(8.38 KB)与dotNetCoverage&#39;处理器   [11:00:09]流程退出,代码为0   [11:00:09]等待1个服务流程完成
        [11:00:09]处理1份报道报告
        [11:00:09]由dotcover为文件生成覆盖率报告:[C:\ TeamCity \ buildAgent \ temp \ buildTmp \ coverage_dotcover16594618384737853441.data]
        [11:00:09]获取dotCover版本
        [11:00:09]启动dotCover:C:\ TeamCity \ buildAgent \ tools \ dotCover \ dotCover.exe版本C:\ TeamCity \ buildAgent \ temp \ buildTmp \ dotCover4472367238745438467Version
        [11:00:09]输出:JetBrains dotCover Console Runner v2.6.1000.602。版权所有(c)2009-2014 JetBrains s.r.o.保留所有权利。
        [11:00:09] dotCover退出代码:0
        [11:00:09]使用DotCover 2.6.x命令设置
        [11:00:09]合并dotCover报道(9s)
        [11:00:19]开始dotCover:C:\ TeamCity \ buildAgent \ tools \ dotCover \ dotCover.exe合并C:\ TeamCity \ buildAgent \ temp \ buildTmp \ dotcover4719506578346509917.xml
        [11:00:19]输出:JetBrains dotCover Console Runner v2.6.1000.602。版权所有(c)2009-2014 JetBrains s.r.o.版权所有。 [JetBrains dotCover]快照合并开始[2014-06-30 11:00:18] [JetBrains dotCover]来源快照数量:1 [JetBrains dotCover]快照合并完成[2014-06-30 11:00:19]
        [11:00:19] dotCover退出,代码为:0

3 个答案:

答案 0 :(得分:1)

我跟着这个漂亮的小tutorial让它为我工作。如果你没有得到任何结果,这里提到你可以试试的东西:

  

小提示:如果你做的一切正确但没有生成报告,请查看BuildLog。在第一次尝试时我得到了这个错误:

     

解决方案:

     

无法读取源文件&gt;'C:\ TeamCity \ buildAgent \ temp \ buildTmp \ dotcover8583844779204955574.xml'。找不到路径'C:\ Windows \ system32 \ config \ systemprofile \ AppData \ Local \ Temp \ 4q-kqg6z.tmp'的一部分。

     

在“C:\ Windows \ system32 \ config \ systemprofile \ AppData \ Local”中创建搜索到的“Temp”文件夹

     

通常它不存在,因此出现错误。在此之后它起作用。

如果这不起作用,那么您可能需要提供更多信息,以便我们帮助您推断出错误。

例如,您的路径是什么,您安装的所有版本的版本,您为构建配置启用了哪些设置等。


编辑如你所说,你已经有了这个工作,我想知道你是否还有以前工作版本的构建日志?在你的同事弄乱之前。有没有机会在构建日志工作时和不工作日之间做差异?它可能会让你知道他改变了什么。


我设法制作了一个全新的配置,以测试生成覆盖所需的最低工作量。这正是我采取的步骤。也许这里有一些你会发现你做得与众不同的东西。

在localhost:8080的主TeamCity屏幕上,点击“创建项目”

  • 名称:MyProjectName
  • 点击“创建”

单击“添加构建配置”

  • 名称:调试

单击“VCS设置”

单击“创建并附加VCS根目录”

点击“添加构建步骤”

  • 亚军类型:MSBuild
  • 步骤名称:构建MyProjectName
  • 构建文件路径:MyProjectName.sln
  • MSBuild版本:Microsoft .NET Framework 4.5
  • MSBuild ToolsVersion:4.0
  • 运行平台:x64
  • 点击“保存”

点击“添加构建步骤”

  • 亚军类型:NUnit
  • 步骤名称:运行MyProjectName测试
  • .NET运行时平台:x64
  • .NET运行时版本:4.0
  • 从以下位置运行测试:MyProjectName.Tests \ bin \ Debug \ MyProjectName.Tests.dll
  • .NET Coverage工具:Jetbrains dotCover
  • 点击“保存”

点击“项目”

点击“运行...”

毕竟,构建应该已经生成了覆盖范围。祝你好运!

答案 1 :(得分:1)

康拉德,我很遗憾对.net或团队城市不够了解(任何事情?)告诉你你的设置有什么问题 - 所以如果我有的话,这将更像是我会看到的指南解决它。

Coverage通过检测已编译的二进制文件来工作,以便在运行时吐出信息。设置完成后,您的单元测试将在运行时将信息输出到某种结果文件中。测试完成后,您可以分析该结果文件。

demoncodemonkey的答案中的教程使得TeamCity看起来实际上正在进行测试覆盖。我非常肯定事实并非如此。 TeamCity很可能与您的工具接口并隐藏您的细节。但如果它不起作用,隐藏细节可能会有所帮助!

我的第一步是弄清楚如何在没有TeamCity的情况下从命令行运行该工具。一旦你能做到这一点,你就可以弄清楚你需要使用什么样的TeamCity配置来获得相同的结果。此链接是dotCover CLI文档。

http://www.jetbrains.com/dotcover/webhelp/dotCover__Setting_up_Coverage_Analysis_JetBrains_TeamCity.html

我们使用Jenkins和许多linux类型的工具 - 但是尝试手工逼近构建/测试一直是找出它在服务器上不起作用的最快方法。

答案 2 :(得分:1)

我遇到的问题是,虽然我的测试已执行并且我从中获得了结果,但结果中没有显示测试覆盖率。原因是在“装配体过滤器”选择的覆盖范围内,我使用了:

+:MySolution.*.dll
+:MySolution.*.exe
-:MySolution.*.Tests.dll

但是,要计算覆盖率结果,您必须从过滤器中删除.DLL扩展名,以便它变为:

+:MySolution.*
-:MySolution.*.Tests

然后结果神奇地流过。