你可以在TestCleanup中静默地重新运行测试吗?

时间:2014-06-21 03:15:16

标签: c# mstest

我的工作中有一堆测试,如果CI服务器上的负载过高或外部服务(GoogleDocs等)API调用超时,偶尔会失败。有没有办法可以设置TestCleanup代码,以便可以重新运行测试,如果它们通过,它们不会在.trx文件中显示为失败?

我们正在使用VS2013 / .Net 4.5 MSTest,结果最终会进入Jenkins。我希望能够做的是检测由于限制或加载而导致事情失败并添加延迟代码并再次重试。这可能吗?

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。有时,测试会因外部资源而失败,导致整个运行失败。我试图为你的问题找到一个简单的解决方案,但经过大量的研究后我没有 - 一旦测试失败,你就不能在同一次运行中改变它的结果。

我的最终解决方案是编写一个外部脚本(甚至不必使用C#),使用VSTest.console.exe或MSTest.exe运行测试,解析生成的trx,然后决定重新运行哪些测试。这不是一个非常复杂的任务,因为从任何体面的xml库中提取trx中失败测试的名称和错误都很容易。

答案 1 :(得分:0)

这是提取失败案例名称的方法。

  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测试代理。