在我的工作中,我们有一堆测试,如果CI服务器的负载过高或者外部服务(GoogleDocs等)的API调用超时,这些测试偶尔会失败。有什么方法可以让我设置TestCleanup代码,使测试可以重新运行,如果它们通过了,就不会在.trx文件中显示为失败?
我们正在使用VS2013.Net 4.5 MSTest,结果最终会反馈到Jenkins。我希望能够做的是检测到事情因为节流或负载而失败,然后添加延迟代码并再次重试。这可能吗?
我也遇到过类似的问题。偶尔会因为外部资源而导致测试失败,使整个运行失败。我试图找到一个简单的解决方案来解决你的问题,但经过大量的研究,我没有找到--一旦测试失败,你就无法在相同的运行中改变其结果。
我的最终解决方案是写一个外部脚本(甚至不需要用C#语言),使用VSTest.console.exe或MSTest.exe运行测试,解析产生的trx,然后决定重新运行哪些测试。这并不是一个很复杂的任务,因为从trx中提取失败测试的名称和错误是很容易的,任何一个像样的xml-library。
这就是你如何提取失败案例的名称。
System.Xml.Linq.XDocument xDoc = XDocument.Load("full/path/to/trx");
System.Xml.Linq.XNamespace defaultNs = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";
List<System.Xml.Linq.XElement> UnitTestResultNode = (from data in xDoc.Descendants(defaultNs + "Results")
select data).Descendants(defaultNs + "UnitTestResult").ToList();
var failedset = (from src in UnitTestResultNode
where src.Attribute("outcome").Value == "Failed"
select new { src.Attribute("testName").Value }).ToList();
当你得到失败的案例后,你可以通过VStest测试代理。