coveralls.net icon indicating copy to clipboard operation
coveralls.net copied to clipboard

Teamcity coverage stats

Open csMACnz opened this issue 7 years ago • 0 comments

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);
}

csMACnz avatar Jun 06 '18 23:06 csMACnz