如何使用VsTest.Console运行测试列表
如何使用vstest.console.exe运行测试列表? .vsmdi格式提供了一种指定测试列表的方式,但该格式已被弃用(?)。如何使用VsTest.Console运行测试列表
我可以在命令行上运行一个明确的测试列表,它基本上完全符合我的要求,但是如果测试数量很大(比如几百),那么我将用尽命令行空间!
vstest.console MyTests.dll /Tests:Test1,Test2
请问有没有什么办法,我可以欺骗vstest.console.exe到运行列表以任何其他方式定义测试?
(编辑:强调)
注:我不想改变测试代码,e.g加试类别属性或更改命名方案,以便名称匹配将选择的子集。我需要它来运行测试列表。
我能想到的最好的方式是尽可能多地运行最大命令行长度,然后重复,直到完成设置,然后合并。但是,如果有某种加载传统vsmdi列表或类似的方法,它会容易得多。
vstest.console MyTests.dll < testnames.txt
vstest.console MyTests.dll /Testlist:testnames.txt
你可以列出你的测试在一个特定格式的文本文件,然后喂到这vstest.console.exe像这样。假设文件名为mytests.orderedtest:
vstest.console mytests.orderedtest
mytests.orderedtest必须采用特定格式。有一种简单的方法可以从Visual Studio创建这样的测试,然后您可以查看内容。
首先,在Visual Studio中,右键单击解决方案资源管理器中的项目,然后选择添加/排序测试。这将创建一个带有良好用户界面的orderedtest文件,您可以添加您的测试。所以,从列表中选择你的测试:Test1,Test2。这将创建一个看起来是这样的文件:
<?xml version="1.0" encoding="UTF-8"?>
<OrderedTest name="mytests" storage="c:\src\MyTests\MyTests.orderedtest" id="ed4d22c5-ab9a-4ebd-954f-65ac4c034338" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestLinks>
<TestLink id="14c6766b-c22b-130a-ddb0-53d5ddd6eb1d" name="Test1" storage="..\bin\debug\MyTests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="24c6766b-c22b-130a-ddb0-53d5ddd6eb1d" name="Test2" storage="..\bin\debug\MyTests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</OrderedTest>
如果你要手动创建此时,Visual Studio之外, 注意,GUID的id属性是显著。这是使用不同完全合格的类名区分同名测试的唯一方法。也就是说,id是由名称空间+类+方法组成的。本文介绍了它:http://blogs.msdn.com/b/aseemb/archive/2013/10/06/how-to-create-an-ordered-test-programmatically.aspx
这里有一个程序,将完全限定的方法名转换成这些GUID之一:
// convert the test (<Name space name>.<class name>.<test method name>) to a GUID
static Guid GuidFromString(string data)
{
SHA1CryptoServiceProvider provider = new SHA1CryptoServiceProvider();
byte[] hash = provider.ComputeHash(System.Text.Encoding.Unicode.GetBytes(data));
byte[] toGuid = new byte[16];
Array.Copy(hash, toGuid, 16);
return new Guid(toGuid);
}
你确定吗?命令行文档没有提到这个(https://msdn.microsoft.com/en-us/library/jj155796.aspx),当我尝试它时,它只是加载DLL并运行它(所有测试)。这看起来像ols mstest.exe命令行风格 –
我敢肯定。我试了几次。我还发现另一个参考StackOverflow显示相同的事情:http://stackoverflow.com/a/29649319/75129 – zumalifeguard
谢谢,将尝试它。顺便说一句,其他答案只是省略了测试程序集,并将orderedtest-file作为输入文件'vstest.console somefile.orderedtest',可能这就是需要做的事情。 –
你应该使用/ TestCaseFilter而不是切换。它允许你控制运行的内容。这里是[msdn链接](https://msdn.microsoft.com/en-us/library/jj155800.aspx) – jeremyh
我不明白这是如何让我运行一个明确的测试列表?测试没有例如一个共同的前缀。如果我让过滤器明确地匹配名称'(Test1 | Test2 | ..)',那么我回到了我开始的地方,将耗尽命令行空间! –
该过滤器支持的不仅仅是类名。在你的情况下,你应该使用“TestCategory”过滤器 - 然后标记你想用TestCategory属性运行的测试类。这允许您以多种方式对测试进行分类,并且只通过命令行运行过滤器所需的内容。 – jeremyh