【问题标题】:Excluding tests from tfs build从 tfs build 中排除测试
【发布时间】:2017-06-01 15:20:51
【问题描述】:

我想从我的持续集成构建中排除一些测试,但我还没有找到这样做的方法。

我尝试过的其中一件事是将这些测试的优先级设置为 -2,然后在构建时我指定了最小测试优先级 = -1,但它仍然运行这些测试。

任何帮助将不胜感激。

【问题讨论】:

  • 你的测试仪是什么? MSTest、NUnit、其他东西 (?)

标签: unit-testing tfs tfsbuild


【解决方案1】:

您应该使用“测试类别”方法,而不是使用已描述的“测试列表”。测试列表和 VSMDI 功能实际上已在 Visual Studio 2010 中弃用,Microsoft 可能会在未来版本的 Visual Studio 中完全删除该功能。

如果您想了解更多关于如何使用测试类别的信息,尤其是在您的自动化构建过程中,请查看这篇博文:http://www.edsquared.com/2009/09/25/Test+Categories+And+Running+A+Subset+Of+Tests+In+Team+Foundation+Server+2010.aspx

您还可以通过在类别名称前指定!(感叹号)字符来排除运行测试类别,以进一步定义您的过滤器。

【讨论】:

  • 在我的 CI 构建中,我使用“!Integration&!Load”运行
【解决方案2】:

如果您使用的是 MSTest,您可以为持续集成中需要的测试创建 Test List

【讨论】:

  • 我不知道这个功能。它打开了一个充满可能性的新世界。谢谢!
  • 有关如何使用 TFS 2008 团队构建执行此操作的示例构建配置,请参阅下面的帖子。对于 TFS 2010,构建定义是基于工作流的,但原理是一样的。
  • 仅供参考 - “测试列表”方法(使用 .VSMDI)文件已被弃用,不再建议使用。相反,您应该使用 MSTest 的测试类别功能。 Microsoft 可能会在 Visual Studio 的未来版本中完全删除测试列表功能。如果您有兴趣,我可以在这里获得更多信息:edsquared.com/2009/09/25/…
【解决方案3】:

使用 MSTest,您可以简单地创建两个测试项目(程序集),并且只在构建配置中指定一个用于测试。在 MSBuild 中,这是要走的路。对于新的基于 WF 的构建定义,我目前手头没有示例:

<ItemGroup>
    <!--  TEST ARGUMENTS
     If the RunTest property is set to true then the following test arguments will be used to run 
     tests. Tests can be run by specifying one or more test lists and/or one or more test containers.

     To run tests using test lists, add MetaDataFile items and associated TestLists here.  Paths can 
     be server paths or local paths, but server paths relative to the location of this file are highly 
     recommended:

        <MetaDataFile Include="$(BuildProjectFolderPath)/HelloWorld/HelloWorld.vsmdi">
            <TestList>BVT1;BVT2</TestList>
        </MetaDataFile>

     To run tests using test containers, add TestContainer items here:

        <TestContainer Include="$(OutDir)\AutomatedBuildTests.dll" />
        <TestContainer Include="$(SolutionRoot)\TestProject\WebTest1.webtest" />
        <TestContainer Include="$(SolutionRoot)\TestProject\LoadTest1.loadtest" />

     Use %2a instead of * and %3f instead of ? to prevent expansion before test assemblies are built
    -->
</ItemGroup>

<PropertyGroup>
    <RunConfigFile>$(SolutionRoot)\LocalTestRun.testrunconfig</RunConfigFile>
</PropertyGroup>

提示:要使用通用构建定义,我们将所有测试项目命名为“AutomatedBuildTests”,即没有解决方案差异。因此,构建定义可以包含在任何现有的构建定义中(甚至是一个常见的构建定义),它总是执行正确的测试集。预先添加“如果存在”检查以允许构建定义仅在存在测试程序集时运行测试将是一项简单的任务。当没有找到测试程序集时,我们不会使用它来获取构建错误,因为我们绝对希望使用所有使用此定义的构建进行测试。

【讨论】:

    【解决方案4】:

    我的偏好与上面一样使用测试列表,但有些人已经发布了合并/编辑 vsmdi 文件...我们最终得到单独的解决方案并使用模式匹配在适当的 DLL 中执行所有测试。

    【讨论】:

      【解决方案5】:

      在 Visual Studio 2012 及更高版本中,您可以使用 Test case filter 设置配置构建定义。

      此设置是您的构建定义的一部分。 打开构建定义并导航到Process 选项卡。在3. Test 部分中,您可以定义多个测试源。对于每个测试源,您可以指定 Test case filter

      您可以在这篇 MSDN 文章中找到详细信息:Running selective unit tests in VS 2012 RC using TestCaseFilter

      我从这篇文章中复制了支持的运算符和一些示例:

      RC 支持的运算符有:

      1.=(等于)

      2.!=(不等于)

      3.~(仅包含字符串值或子字符串)

      4.&(和)

      5.| (或)

      6.( )(用于分组的括号)

      可以将这些运算符用作任何有效的逻辑条件来创建表达式。 & (and) 有更高的 优先于 | (或)在评估表达式时。

      例如
      “TestCategory=NAR|优先级=1” “所有者=vikram&TestCategory!=UI” "FullyQualifiedName~NameSpace.Class"
      "(TestCategory!=UI&(Priority=1|Priority=2))|(TestCategory=UI&Priority=1)"

      另一种可能性是在其他构建定义中的一些(即更多或更少)测试源中的一个构建定义中包含一些测试源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        相关资源
        最近更新 更多