coveralls.net
coveralls.net copied to clipboard
Teamcity coverage stats
Have an arg to optionally publish the coverage in teamcity stats format:
var coverageResults = System.Xml.Linq.XDocument.Load($"./{fileName}");
var summary = coverageResults.Root.Element("Summary");
//classes
var visitedClasses = GetAttributeValue(summary, "visitedClasses");
var totalClasses = GetAttributeValue(summary, "numClasses");
var classesCoverage = Average(visitedClasses, totalClasses);
Information($"##teamcity[buildStatisticValue key='CodeCoverageC' value='{classesCoverage}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsCCovered' value='{visitedClasses}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsCTotal' value='{totalClasses}']");
//methods
var visitedMethods = GetAttributeValue(summary, "visitedMethods");
var totalMethods = GetAttributeValue(summary, "numMethods");
var methodsCoverage = Average(visitedMethods, totalMethods);
Information($"##teamcity[buildStatisticValue key='CodeCoverageM' value='{methodsCoverage}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='{visitedMethods}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='{totalMethods}']");
//sequence points / statements
var visitedPoints = GetAttributeValue(summary, "visitedSequencePoints");
var totalPoints = GetAttributeValue(summary, "numSequencePoints");
var pointsCoverage = GetAttributeValue(summary, "sequenceCoverage");
Information($"##teamcity[buildStatisticValue key='CodeCoverageS' value='{pointsCoverage}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsSCovered' value='{visitedPoints}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsSTotal' value='{totalPoints}']");
//branches
var visitedBranches = GetAttributeValue(summary, "visitedBranchPoints");
var totalBranches = GetAttributeValue(summary, "numBranchPoints");
var branchesCoverage = GetAttributeValue(summary, "branchCoverage");
Information($"##teamcity[buildStatisticValue key='CodeCoverageB' value='{branchesCoverage}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='{visitedBranches}']");
Information($"##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='{totalBranches}']");
private string Average(decimal count, decimal total)
{
return $"{(count/total)*100:N2}";
}
private decimal GetAttributeValue(System.Xml.Linq.XElement element, string key)
{
return decimal.Parse(element.Attribute(key).Value);
}