【发布时间】:2017-06-01 15:20:51
【问题描述】:
我想从我的持续集成构建中排除一些测试,但我还没有找到这样做的方法。
我尝试过的其中一件事是将这些测试的优先级设置为 -2,然后在构建时我指定了最小测试优先级 = -1,但它仍然运行这些测试。
任何帮助将不胜感激。
【问题讨论】:
-
你的测试仪是什么? MSTest、NUnit、其他东西 (?)
标签: unit-testing tfs tfsbuild
我想从我的持续集成构建中排除一些测试,但我还没有找到这样做的方法。
我尝试过的其中一件事是将这些测试的优先级设置为 -2,然后在构建时我指定了最小测试优先级 = -1,但它仍然运行这些测试。
任何帮助将不胜感激。
【问题讨论】:
标签: unit-testing tfs tfsbuild
您应该使用“测试类别”方法,而不是使用已描述的“测试列表”。测试列表和 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
您还可以通过在类别名称前指定!(感叹号)字符来排除运行测试类别,以进一步定义您的过滤器。
【讨论】:
如果您使用的是 MSTest,您可以为持续集成中需要的测试创建 Test List。
【讨论】:
使用 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”,即没有解决方案差异。因此,构建定义可以包含在任何现有的构建定义中(甚至是一个常见的构建定义),它总是执行正确的测试集。预先添加“如果存在”检查以允许构建定义仅在存在测试程序集时运行测试将是一项简单的任务。当没有找到测试程序集时,我们不会使用它来获取构建错误,因为我们绝对希望使用所有使用此定义的构建进行测试。
【讨论】:
我的偏好与上面一样使用测试列表,但有些人已经发布了合并/编辑 vsmdi 文件...我们最终得到单独的解决方案并使用模式匹配在适当的 DLL 中执行所有测试。
【讨论】:
在 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)"
另一种可能性是在其他构建定义中的一些(即更多或更少)测试源中的一个构建定义中包含一些测试源。
【讨论】: