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

问题描述 投票:2回答:2

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

我们正在使用VS2013.Net 4.5 MSTest,结果最终会反馈到Jenkins。我希望能够做的是检测到事情因为节流或负载而失败,然后添加延迟代码并再次重试。这可能吗?

c# mstest
2个回答
1
投票

我也遇到过类似的问题。偶尔会因为外部资源而导致测试失败,使整个运行失败。我试图找到一个简单的解决方案来解决你的问题,但经过大量的研究,我没有找到--一旦测试失败,你就无法在相同的运行中改变其结果。

我的最终解决方案是写一个外部脚本(甚至不需要用C#语言),使用VSTest.console.exe或MSTest.exe运行测试,解析产生的trx,然后决定重新运行哪些测试。这并不是一个很复杂的任务,因为从trx中提取失败测试的名称和错误是很容易的,任何一个像样的xml-library。


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

© www.soinside.com 2019 - 2024. All rights reserved.