如何将完整的 PartCover 结果纳入 TeamCity 5?

2024-01-06

我正在尝试在 TeamCity 5.0 中正确生成 PartCover 报告。当我单击构建详细信息中的“代码覆盖率”选项卡时,报告为空。

我正在使用 sln2008 构建代理,我的 PartCoverage 设置如下:

包括模式:

[*]*

报告 XSLT:

C:\Program Files\PartCover .NET 2.3\xslt\Report By Assembly.xslt=>ByAssembly.html
C:\Program Files\PartCover .NET 2.3\xslt\Report By Class.xslt=>ByClass.html

如果您能够描述如何将这些报告(或仅重要部分)包含在 TeamCity 发送的成功/失败构建的电子邮件中,则可获得加分。如果可能的话,我想继续使用 sln2008 构建代理,而不是其他构建代理。


我对 PartCover 报告也有同样的问题。因此,我一直在努力使其正常工作,但我刚刚发现问题出在 PartCover 发行版附带的两个 XSLT 文件上。

我修复了这些文件,现在一切正常:

大会报告

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt">
  <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">

    <xsl:variable name="cov0style" select="'background:#E79090;text-align:right;'"/>
    <xsl:variable name="cov20style" select="'background:#D79797;text-align:right;'"/>
    <xsl:variable name="cov40style" select="'background:#D7A0A0;text-align:right;'"/>
    <xsl:variable name="cov60style" select="'background:#C7A7A7;text-align:right;'"/>
    <xsl:variable name="cov80style" select="'background:#C0B0B0;text-align:right;'"/>
    <xsl:variable name="cov100style" select="'background:#D7D7D7;text-align:right;'"/>

<table style="border-collapse: collapse;">
  <tr style="font-weight:bold; background:whitesmoke;">
    <td colspan="2">Coverage by assembly</td>
  </tr>

  <xsl:variable name="asms" select="/PartCoverReport/Assembly"/>
  <xsl:for-each select="$asms">
    <xsl:variable name="current-asm-node" select="."/>
    <tr>

      <xsl:element name="td">
        <xsl:attribute name="style">background:ghostwhite; padding: 5px  30px 5px  5px;</xsl:attribute>
        <xsl:value-of select="$current-asm-node/@name"/>
      </xsl:element>

      <xsl:variable name="codeSize" select="sum(/PartCoverReport/Type[@asmref=$current-asm-node/@id]/Method/pt/@len)+0"/>
      <xsl:variable name="coveredCodeSize" select="sum(/PartCoverReport/Type[@asmref=$current-asm-node/@id]/Method/pt[@visit>0]/@len)+0"/>

      <xsl:element name="td">
        <xsl:if test="$codeSize=0">
          <xsl:attribute name="style">
            <xsl:value-of select="$cov0style"/>
          </xsl:attribute>
          0%
        </xsl:if>
        <xsl:if test="$codeSize &gt; 0">
          <xsl:variable name="coverage" select="ceiling(100 * $coveredCodeSize div $codeSize)"/>
          <xsl:if test="$coverage &gt;=  0 and $coverage &lt; 20">
            <xsl:attribute name="style">
              <xsl:value-of select="$cov20style"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="$coverage &gt;= 20 and $coverage &lt; 40">
            <xsl:attribute name="style">
              <xsl:value-of select="$cov40style"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="$coverage &gt;= 40 and $coverage &lt; 60">
            <xsl:attribute name="style">
              <xsl:value-of select="$cov60style"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="$coverage &gt;= 60 and $coverage &lt; 80">
            <xsl:attribute name="style">
              <xsl:value-of select="$cov80style"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="$coverage &gt;= 80">
            <xsl:attribute name="style">
              <xsl:value-of select="$cov100style"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:value-of select="$coverage"/>%
        </xsl:if>
      </xsl:element>
    </tr>
  </xsl:for-each>
</table>

按班级报告

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt">
<xsl:output method="html" indent="no"/>

<xsl:template match="/">

<xsl:variable name="cov0style" select="'background:#FF4040;text-align:right;'"/>
<xsl:variable name="cov20style" select="'background:#F06060;text-align:right;'"/>
<xsl:variable name="cov40style" select="'background:#E78080;text-align:right;'"/>
<xsl:variable name="cov60style" select="'background:#E0A0A0;text-align:right;'"/>
<xsl:variable name="cov80style" select="'background:#D7B0B0;text-align:right;'"/>
<xsl:variable name="cov100style" select="'background:#E0E0E0;text-align:right;'"/>

<table style="border-collapse: collapse;">
    <tr style="font-weight:bold; background:whitesmoke;"><td colspan="2">Coverage by class</td></tr>

    <xsl:for-each select="/PartCoverReport/Type">
        <tr>

            <xsl:element name="td">
                <xsl:attribute name="style">background:ghostwhite; padding: 5px  30px 5px  5px;</xsl:attribute>
                <xsl:value-of select="@name"/>
            </xsl:element>

            <xsl:variable name="codeSize" select="sum(./Method/pt/@len)+0"/>
            <xsl:variable name="coveredCodeSize" select="sum(./Method/pt[@visit>0]/@len)+0"/>

            <xsl:element name="td">
                <xsl:if test="$codeSize=0">
                    <xsl:attribute name="style"><xsl:value-of select="$cov0style"/></xsl:attribute>
                    0%
                </xsl:if>

                <xsl:if test="$codeSize &gt; 0">
                    <xsl:variable name="coverage" select="ceiling(100 * $coveredCodeSize div $codeSize)"/>

                    <xsl:if test="$coverage &gt;=  0 and $coverage &lt; 20"><xsl:attribute name="style"><xsl:value-of select="$cov20style"/></xsl:attribute></xsl:if>
                    <xsl:if test="$coverage &gt;= 20 and $coverage &lt; 40"><xsl:attribute name="style"><xsl:value-of select="$cov40style"/></xsl:attribute></xsl:if>
                    <xsl:if test="$coverage &gt;= 40 and $coverage &lt; 60"><xsl:attribute name="style"><xsl:value-of select="$cov60style"/></xsl:attribute></xsl:if>
                    <xsl:if test="$coverage &gt;= 60 and $coverage &lt; 80"><xsl:attribute name="style"><xsl:value-of select="$cov80style"/></xsl:attribute></xsl:if>
                    <xsl:if test="$coverage &gt;= 80"><xsl:attribute name="style"><xsl:value-of select="$cov100style"/></xsl:attribute></xsl:if>
                    <xsl:value-of select="$coverage"/>%
                </xsl:if>

            </xsl:element>
        </tr>
    </xsl:for-each>
</table>    
</xsl:template>
</xsl:stylesheet>

希望这个对你有帮助。此外,欢迎有关此文件的任何反馈,以便我们可以向社区提供正确的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将完整的 PartCover 结果纳入 TeamCity 5? 的相关文章

  • 在.rdlc报告的底部设置一个文本框

    我在 rdlc 报告中使用 tablix 有一个文本框 其中包含文本 签名 我想将此文本框放置在报告最后一页的底部 就在页脚之前 我已经用谷歌搜索了这个解决方案 但没有找到满意的结果 我的环境是VS2010 framework 4 0 有什
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • .NET EXE 内存占用

    即使是一个简单的Notepad http en wikipedia org wiki Notepad 28software 29C 中的应用程序消耗兆字节的 RAM 如任务管理器中所示 最小化应用程序时 任务管理器中的内存大小会显着下降 并
  • 序列化和反序列化 HttpRequestMessage 对象

    有人有序列化 HttpRequestMessage 对象的经验吗 尝试使用 Json net 它部分有效 也就是说 JsonConvert DeserializeObject 由于 StringContent 构造问题而失败 无法找到用于类
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • 当 mstest 成功运行并且所有测试通过时,为什么 PartCover 报告显示 0%

    我正在尝试通过 mstest 测试获得代码覆盖率 我正在使用 PartCover 2 2 0 36424 问题在于真实的程序集 我得到 0 的代码覆盖率 注意 所有测试都通过 在我创建的演示源的演示测试中 它运行良好 报告很有意义 我注意到
  • Windows DPAPI - 如何处理熵?

    我正在使用 Windows DPAPI 来加密一些敏感数据 密码存储在注册表中 这一切都运行良好 但我想知道是否有人可以澄清我对 NET 中 可选 提供给 ProtectedData Protect 的 熵 字节的理解 熵 字节数组似乎类似
  • 如何使用 NGEN 二进制文件安装 IronPython 2.0?

    有谁知道如何使用 MSI 包安装带有 NGEN 二进制文件的 IronPython 2 0 这IronPython 官方主页 http www codeplex com IronPython据说NGEN选项将大大改善启动时间 但由于某种原因
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何使正则表达式匹配不区分大小写?

    我有以下正则表达式加拿大的邮政编码 http en wikipedia org wiki Postal codes in Canada ABCEGHJKLMNPRSTVXY 1 d 1 A Z 1 d 1 A Z 1 d 1 它工作正常 但
  • 如何使用 C# 连接到 Asana Rest API?

    有谁有使用 C 连接到 Asana API 的代码片段吗 他们的网站上有一个 Hello World 应用程序 但不幸的是它是用 ruby 编写的 https asana com developers documentation examp
  • 为什么 dotnet 的 char.IsLower() 是静态方法?

    这似乎违背了每一个设计准则 接受 T 类型的单个参数的静态方法通常应该只是一个成员方法 这太奇怪了我实际上不得不发布一个StackOverflow问题 https stackoverflow com questions 389100 is
  • Foursquare - OAuth 身份验证 - .Net 示例

    是否有关于如何使用 Oauth 向 Foursquare 进行身份验证的示例 这里有一个关于如何将 OAuth 与 Foursquare 结合使用的非常好的工作流程摘要 http developer foursquare com docs
  • ASP.NET MVC:如何可靠地获取当前请求的真实URL?

    现在我有一个 MVC 应用程序运行在http 127 0 0 1 8081 http 127 0 0 1 8081 它实际上在 Azure 计算模拟器中运行 浏览器位置栏清楚地显示端口号为 8081 然而 Request Url and R
  • 面向对象的铸造错误[重复]

    这个问题在这里已经有答案了 将派生类强制转换为基类 我有一个通用的基本抽象类 继承自 IComparable 其定义如下 public abstract class BaseClass
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin

随机推荐

  • 使用 api.rpc. payment.queryFeeDetails 获取外部费用

    我想用api rpc payment queryFeeDetailsAPI 调用 https polkadot js org docs substrate rpc queryfeedetailsextrinsic bytes at bloc
  • Android NDK 在 CallObjectMethod 调用 getSystemService 中崩溃

    这是我问的另一个问题的后续 Android 从JNI获取MEID https stackoverflow com questions 11643498 android get meid from jni 我正在尝试获取 Android 手机
  • 访问Python列表中的元素

    我的答案列表如下 answers defaultdict
  • 在 R 中使用 tryCatch() 在循环中分配错误值

    我正在努力了解 R 中 tryCatch 的说明 我正在尝试捕获股票的收盘价 案例 2 好案例 TickersJuly2 独特的价格与股票代码关系 情况 1 坏情况 TickersJuly1 FABU 收盘价是 CETX 的重复 对于 FA
  • 以编程方式估计 Android 手机电池耗尽的时间

    因此有一些方法可以通过监听器获取当前的电池电量 但是 这些可以为您提供手机当前电池状态的值 但无法指示电池耗尽的速度有多快 慢 有什么方法可以估计电池耗尽之前的剩余时间 你能做任何知道电压是多少的事情吗 或者也许可以监控一段时间内电池消耗的
  • android recyclerview加载更多按钮[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有教程 示例包含带有 recyclerview 的加载更多按钮 我需要在 recyclerview
  • 控制鼠标键盘Golang?

    如何在操作系统 X11 级别上控制检索 设置鼠标位置并触发键盘事件 这与中的功能类似Java 中的机器人类 http docs oracle com javase 7 docs api java awt Robot html 我知道很可能不
  • 如何在AppBundle中添加视图?

    我正在尝试在 symfony3 中进行实验 我试图在谷歌上搜索它 但我没有找到他们明确的答案 这是 symfony 中的默认控制器 class DefaultController extends Controller Route name
  • Anaconda navigator 和 activate.bat 在 Windows 中出现空格问题

    最近 我突然开始遇到 Anaconda 提示符和使用 VS Code 启动 jupyter 实例的问题 存在 访问被拒绝 错误 但即使作为管理员 我也收到一个错误 该错误提示我路径中存在空格问题 我从来没有遇到过这个问题 并且 anacon
  • discord.py 中的 Cog 和 Extension 有什么区别?

    在discord py文档中 有 扩展 https discordpy readthedocs io en stable ext commands extensions html https discordpy readthedocs io
  • 获取 Puppeteer 中 XPath 的所有链接(暂停或不起作用)?

    我需要使用 XPath 选择页面上的所有链接 然后我的 Puppeteer 应用程序才能单击并执行一些操作 我发现该方法 下面的代码 有时会卡住 我的爬虫会暂停 是否有更好 不同的方式从 XPath 获取所有链接 或者我的代码中是否存在不正
  • Firefox 中可点击的电话协议标签

    我有一个非常标准的电话号码标签 它适用于一切except火狐 我认为电话协议是标准的 有我不知道的解决方法吗 a class tel href 800 123 4567 a 火狐浏览器错误信息 地址不明白 Firefox 不知道如何打开此地
  • java 中最好的 XML 解析库是哪个 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails 范围查找当前用户

    我使用 Rails 3 和 Devise 进行用户身份验证 假设我有一个启用了 Devise 的用户模型和一个产品模型 并且用户有很多产品 在我的产品控制器中 我希望我的 find 方法的范围由 current user 确定 即 prod
  • 为什么 Heroku 会给出权限被拒绝的错误?

    When git clone v email protected cdn cgi l email protection testabcde git Cloning into testabcde Heroku 回归 Permission de
  • 角度 2 不透明令牌

    需要一些有关提供 OpaqueToken 的帮助 使用 Angular 2 beta 12 如果提供程序密钥是字符串 则它可以正常工作 但在使用 OpaqueToken 时则不起作用 在 Child 类中 SF 未定义 家长班级 expor
  • 如何计算时间加权平均值并创建滞后

    我搜索了论坛 但没有找到任何可以回答或提供如何在论坛上做我想做的事情的提示 我有每年的暴露数据测量 我希望根据每个人参与研究的情况来计算个人水平的年平均值 对于每一行 一年暴露分配应包括从加入研究前最后一个月开始的前 12 个月的数据 例如
  • 从内存中扩充 XML 文件

    我复制了一个 XML 文件 assets到我的应用程序数据文件夹 data data package name files 我这样做是因为用户将能够修改大量数据 并且我想将该数据保存到内部存储器中 然后在重新启动应用程序时再次加载 这一切都
  • 如何为 Chrome 设置可调试标志?

    官方教程里有https github com phonegap phonegap wiki Debugging in PhoneGap https github com phonegap phonegap wiki Debugging in
  • 如何将完整的 PartCover 结果纳入 TeamCity 5?

    我正在尝试在 TeamCity 5 0 中正确生成 PartCover 报告 当我单击构建详细信息中的 代码覆盖率 选项卡时 报告为空 我正在使用 sln2008 构建代理 我的 PartCoverage 设置如下 包括模式 报告 XSLT