如何从PartCover结果.xml生成HTML报告

时间:2009-07-02 07:54:19

标签: code-coverage partcover

如何从PartCover结果生成HTML报告.xml

4 个答案:

答案 0 :(得分:5)

您可以使用一种工具来生成HTML报告:

https://github.com/danielpalme/ReportGenerator

在这里,您可以找到如何将该工具集成到MSBuild中的文章:

http://www.palmmedia.de/Blog/2009/10/30/msbuild-code-coverage-analysis-with-partcover-and-reportgenerator

答案 1 :(得分:1)

据我所知,没有像NCoverExplorer这样的便捷工具可以将PartCover结果.xml文件转换为.html报告,但是有一些.xsl文件可用于将PartCover的结果转换为CruiseControl中的.html。 NET:Using CruiseControl.NET with PartCover

您可以从CruiseControl.NET获取这些.xsl文件,并使用Sandcastle的XslTransform.exe等转换PartCover results.xml。

顺便说一句,如果这恰好与TeamCity有关,那么即将推出的5.0版本将包括使用PartCover或NCover支持.NET覆盖。有关更多信息,请参阅documentation。否则忽略此段; - )

答案 2 :(得分:1)

最简单的解决方案可能是使用msxsl,一个简单的命令行转换器。我将它用于此目的,并且很容易集成到您的构建系统中。

http://www.microsoft.com/downloads/details.aspx?FamilyID=2FB55371-C94E-4373-B0E9-DB4816552E41&displaylang=en

答案 3 :(得分:0)

也许是一种复杂的方式,但我使用Simian xml报告做到了这一点。为格式化创建了一个XSL文件,然后写了一个愚蠢的小控制台应用程序;

private const string MissingExtension = "Please enter a valid {0} file, this is missing the extension.";
    private const string InvalidExtension = "Please enter a valid {0} file, the file provided has an invalid extension.";

    public static void Main(string[] args)
    {
        if (args.Length < 2)
        {
            System.Console.WriteLine("Please enter a xsl file and xml file full path.");
            return;
        }

        var xslFile = args[0];
        var xmlFile = args[1];

        if (!CheckFileNameFormat(xslFile, false))
            return;
        if (!CheckFileNameFormat(xmlFile, true))
            return;

        var transform = new XslCompiledTransform();
        // Load the XSL stylesheet.
        transform.Load(xslFile);
        // Transform xml file into an html using the xsl file provided.
        transform.Transform(xmlFile, xmlFile.Replace("xml", "html"));
    }

    private static bool CheckFileNameFormat(string fileName, bool isXmlFile)
    {
        var extension = isXmlFile ? "xml" : "xsl";

        // valida that the argument has a period
        if (fileName.IndexOf(".") < 1)
        {
            System.Console.WriteLine(string.Format(MissingExtension, extension));
            return false;
        }

        var filePieces = fileName.Split('.');
        // split on the period and make sure the extension is valid
        if (filePieces[filePieces.GetUpperBound(0)] != extension)
        {
            System.Console.WriteLine(string.Format(InvalidExtension, extension));
            return false;
        }

        return true;
    }

然后我可以从像这样的MSBuild文件中调用它;

 <Target Name="RunSimian" DependsOnTargets="RebuildSolution">

<Exec IgnoreExitCode="true" Command="&quot;$(MSBuildProjectDirectory)\..\Build\Packages\Simian\simian-2.2.24.exe&quot; -formatter=xml:$(MSBuildProjectDirectory)\..\Build\Artifacts\simian.xml -language=cs -excludes=$(MSBuildProjectDirectory)\..\Product\Production\**\*.Designer.cs $(MSBuildProjectDirectory)\Production\**\*.cs" >
</Exec>

<Exec IgnoreExitCode="true" Command="&quot;$(MSBuildProjectDirectory)\..\Build\Packages\XmlToHtmlConverter.exe&quot; $(MSBuildProjectDirectory)\..\Build\Packages\Simian\simian.xsl $(MSBuildProjectDirectory)\..\Build\Artifacts\simian.xml">
</Exec>