Skip to content

Commit

Permalink
Merge pull request #19 from gmattinson/master
Browse files Browse the repository at this point in the history
Add crude JUnit parser
  • Loading branch information
anshooarora authored Dec 26, 2019
2 parents ea9eff6 + 78fdc75 commit c6c3c74
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 32 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Extensions\StatusExtensions.cs" />
<Compile Include="Extensions\KnownFileExtensions.cs" />
<Compile Include="Logging.cs" />
<Compile Include="Model\LoggingLevel.cs" />
<Compile Include="Model\TestFramework.cs" />
<Compile Include="Parser\IParser.cs" />
<Compile Include="Parser\JUnitParser.cs" />
<Compile Include="Parser\NUnitParser.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
using AventStack.ExtentReports.MarkupUtils;

using AventStack.ExtentReports.CLI.Extensions;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace AventStack.ExtentReports.CLI.Parser
{
internal class JUnitParser : IParser
{
private ExtentReports _extent;

public JUnitParser(ExtentReports extent)
{
_extent = extent;
}

public void ParseTestRunnerOutput(string resultsFile)
{
var doc = XDocument.Load(resultsFile);

if (doc.Root == null)
{
throw new NullReferenceException("Root element not found for " + resultsFile);
}

AddSystemInformation(doc);

var suites = doc
.Descendants("testsuite");

foreach (var ts in suites.ToList())
{
var test = _extent.CreateTest(ts.Attribute("name").Value);

// Test Cases
foreach (var tc in ts.Descendants("testcase").ToList())
{
var node = CreateNode(tc, test);

AssignStatusAndMessage(tc, node);
}
}
}

private static ExtentTest CreateNode(XElement tc, ExtentTest test)
{
var name = tc.Attribute("name").Value;
var description = string.Empty;
var node = test.CreateNode(name, description);
return node;
}

private static void AssignStatusAndMessage(XElement tc, ExtentTest test)
{
var error = tc.Elements().FirstOrDefault();

if (error != null)
{
var statusMessage = "Type: " + error.Attribute("type") + Environment.NewLine;
statusMessage += "Message: " + error.Attribute("message");

test.Fail(statusMessage);
}
else
{
test.Pass(string.Empty);
}
}

private void AddSystemInformation(XDocument doc)
{
var suite = doc.Descendants("testsuite").FirstOrDefault();
if (suite == null)
return;

_extent.AddSystemInfo("Machine Name", suite.Attribute("hostname").Value);
}
}
}
27 changes: 16 additions & 11 deletions ExtentReportsDotNetCLI/ExtentReportsDotNetCLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ internal class Program
private Logger _logger;
private ExtentReports _extent = new ExtentReports();
private int _filesProcessed = 0;

[Option(ShortName = "p")]
private TestFramework Parser { get; set; } = TestFramework.NUnit;
static private int _errorCount;

[Option(ShortName = "i")]
private string TestRunnerResultsFile { get; set; }
Expand All @@ -40,9 +38,10 @@ internal class Program
private bool Merge { get; set; } = false;


private static void Main(string[] args)
private static int Main(string[] args)
{
CommandLineApplication.Execute<Program>(args);
return _errorCount;
}

private void OnExecute()
Expand All @@ -52,41 +51,45 @@ private void OnExecute()

string output = string.IsNullOrWhiteSpace(Output) ? $".\\{DefaultBaseDirectory}" : Output;

if (!string.IsNullOrEmpty(TestRunnerResultsDirectory) && File.GetAttributes(TestRunnerResultsDirectory) == FileAttributes.Directory && Parser.Equals(TestFramework.NUnit))
if (!string.IsNullOrEmpty(TestRunnerResultsDirectory) &&
File.GetAttributes(TestRunnerResultsDirectory).HasFlag(FileAttributes.Directory))
{
string filePattern = "*." + KnownFileExtensions.GetExtension(Parser);
string filePattern = "*.xml";
_logger.WriteLine(LoggingLevel.Normal, $"Getting test runner result files in folder '{TestRunnerResultsDirectory}' matching pattern '{filePattern}' ...");

List<string> files = Directory.GetFiles(TestRunnerResultsDirectory, filePattern, SearchOption.AllDirectories).ToList();

if (Merge)
{
files.ForEach(x => ProcessSingle(x, output, true));
files.ForEach(x =>
{
_errorCount += ProcessSingle(x, output, true);
});
}
else
{
files.ForEach(x =>
{
var dir = Path.Combine(output, Path.GetFileNameWithoutExtension(x));
ProcessSingle(x, dir, false);
_errorCount += ProcessSingle(x, dir, false);
});
}
}

if (!string.IsNullOrWhiteSpace(TestRunnerResultsFile))
{
ProcessSingle(TestRunnerResultsFile, output, true);
_errorCount += ProcessSingle(TestRunnerResultsFile, output, true);
}

if (_filesProcessed == 0)
{
_logger.WriteLine(LoggingLevel.Normal, "Nothing to do!");
}

_logger.WriteLine(LoggingLevel.Verbose, "extentreports-cli finished.");
_logger.WriteLine(LoggingLevel.Verbose, $"extentreports-cli finished. {_errorCount} errors.");
}

private void ProcessSingle(string testResultsFilePath, string output, bool merge = false)
private int ProcessSingle(string testResultsFilePath, string output, bool merge = false)
{
_logger.WriteLine(LoggingLevel.Normal, $"Parsing test runner result file '{testResultsFilePath}' ...");

Expand All @@ -103,10 +106,12 @@ private void ProcessSingle(string testResultsFilePath, string output, bool merge
}

new NUnitParser(_extent).ParseTestRunnerOutput(testResultsFilePath);
new JUnitParser(_extent).ParseTestRunnerOutput(testResultsFilePath);
_extent.Flush();
_filesProcessed++;

_logger.WriteLine(LoggingLevel.Normal, $"Report for '{testResultsFilePath}' is complete.");
return _extent.Stats.ChildCountFail;
}

private void InitializeReporter(ExtentReports extent, string path)
Expand Down

0 comments on commit c6c3c74

Please sign in to comment.