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

本文关键字:运行测试 静默 TestCleanup | 更新日期: 2023-09-27 18:09:43

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

我们正在使用VS2013/。Net 4.5 MSTest和结果最终将反馈给Jenkins。我希望能够做的是检测由于节流或加载而导致的失败,并添加延迟代码并再次重试。这可能吗?

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

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

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

这就是如何提取失败案例的名称。

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