Pesterの結果からFailureのみを抽出する
PowerShellには、Pesterというユニットテスト用のフレームワークが標準で用意されています。
Pesterのテスト結果はXMLファイルで出力されるのですが、テストケースが多い場合、また多数のサーバーでテストをする場合、テスト結果の中からエラーになった結果(Failure)を捕捉しにくいという欠点がありました。
そこで、複数のテスト結果のXMLファイルの中から、エラーになった結果(Failure)のみを抽出して、Excelファイルに一覧化して出力する方法を記載します。
using ClosedXML.Excel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; using System.Xml.XPath; namespace FailureExtractFromXML { class Program { static void Main(string[] args) { string stCurrentDir = Directory.GetCurrentDirectory(); IEnumerable<string> xmlFiles = Directory.EnumerateDirectories( stCurrentDir, "*", SearchOption.AllDirectories) .SelectMany(d => Directory.EnumerateFiles(d)) .Where(f => new[] { ".xml" }.Contains(Path.GetExtension(f))); var exportFile = Path.Combine(stCurrentDir,$"UTFailureResult_{DateTime.Now:yyyyMMddHHmmss}.xlsx"); using(var workbook = new XLWorkbook()) { var worksheet = workbook.Worksheets.Add("UTFailureResult"); worksheet.Style.Font.FontName = "Meiryo UI"; worksheet.Cell("A1").Value = "nodename"; worksheet.Cell("B1").Value = "name"; worksheet.Cell("C1").Value = "description"; worksheet.Cell("D1").Value = "message"; worksheet.Cell("E1").Value = "stacktrace"; var i = 2; foreach (var xmlFile in xmlFiles) { var nodeName = Path.GetFileNameWithoutExtension(xmlFile); var xdocText = XDocument.Load(xmlFile).ToString(); var xfailures = XDocument.Parse(xdocText).XPathSelectElements($"/test-results/test-suite/results").Descendants("failure"); foreach (var xfailure in xfailures) { worksheet.Cell(i,1).Value = nodeName; worksheet.Cell(i,2).Value = xfailure.Ancestors().First().Attribute("name").Value; worksheet.Cell(i,3).Value = xfailure.Ancestors().First().Attribute("description").Value; worksheet.Cell(i,4).Value = xfailure.Element("message").Value.Replace("\n"," "); worksheet.Cell(i,5).Value = xfailure.Element("stack-trace").Value.Replace("\n"," "); i++; } } workbook.SaveAs(exportFile); } } } }
参考サイト
qiita.com