Files
2026-08-18 19:05:24 +08:00

110 lines
6.2 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>覆盖率分析报告</title>
<style>:root{--bg:#f5f6f8;--card:#fff;--text:#1f2937;--muted:#6b7280;--border:#e5e7eb;--primary:#2563eb;--green:#22c55e;--red:#ef4444;--yellow:#eab308}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,'Segoe UI','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text);padding:24px;max-width:1200px;margin:0 auto;line-height:1.5}
.nav{display:flex;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin-bottom:16px}
.nav a{color:var(--muted);text-decoration:none;padding:4px 10px;border-radius:6px;font-size:13px}
.nav a:hover{background:#f0f4ff;color:var(--primary)}
.nav a.active{background:var(--primary);color:#fff}
.page-header{margin-bottom:20px}
.page-header h1{font-size:22px;margin-bottom:8px}
.meta{display:flex;flex-wrap:wrap;gap:16px;color:var(--muted);font-size:13px}
.meta .badge{font-weight:600;padding:2px 8px;border-radius:20px;font-size:12px}
.badge.ok{background:#dcfce7;color:#15803d}
.badge.bad{background:#fee2e2;color:#b91c1c}
.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px;margin-bottom:16px}
.card h2{font-size:16px;margin-bottom:12px}
.summary-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;padding:16px}
.summary-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px;text-align:center}
.summary-card .num{font-size:36px;font-weight:700}
.summary-card .label{font-size:14px;color:var(--muted);margin:6px 0}
.summary-card .sub{font-size:12px;color:var(--muted)}
.num.ok{color:var(--green)}.num.warn{color:var(--yellow)}.num.bad{color:var(--red)}
table.grid{width:100%;border-collapse:collapse;font-size:13px}
table.grid th,table.grid td{border-bottom:1px solid var(--border);padding:8px 10px;text-align:left}
table.grid th{background:#f9fafb;color:var(--muted);font-weight:600}
table.grid tr:hover td{background:#fafbff}
.mono{font-family:Consolas,'Courier New',monospace;font-size:12px}
.link{color:var(--primary);text-decoration:none}
.link:hover{text-decoration:underline}
.check-list{list-style:none}
.check-list li{padding:6px 0;font-size:14px}
.check-list li.ok{color:var(--green)}
.check-list li.bad{color:var(--red)}
.bar-wrap{position:relative;min-width:120px;background:#f3f4f6;border-radius:4px;height:18px;overflow:hidden}
.bar{height:100%;border-radius:4px}
.bar-txt{position:absolute;top:0;right:6px;font-size:11px;color:#374151;line-height:18px;font-weight:600}
.legend{float:right;font-size:12px;color:var(--muted);font-weight:400}
.lg{display:inline-block;padding:2px 8px;border-radius:4px;margin-left:8px}
.lg.covered{background:#dcfce7;color:#15803d}
.lg.partial{background:#fef9c3;color:#a16207}
.lg.missed{background:#fee2e2;color:#b91c1c}
pre.code{font-family:Consolas,'Courier New',monospace;font-size:12px;line-height:1.55;overflow-x:auto;background:#0f172a;color:#e2e8f0;border-radius:8px;padding:14px}
.code .cl{display:block;padding:0 8px;border-radius:3px;border-left:3px solid transparent}
.code .cl.covered{background:rgba(34,197,94,.12);border-left-color:#22c55e}
.code .cl.partial{background:rgba(234,179,8,.12);border-left-color:#eab308}
.code .cl.missed{background:rgba(239,68,68,.18);border-left-color:#ef4444}
.code .ln{color:#64748b;user-select:none}
.code .mark{color:#94a3b8;user-select:none;width:14px;display:inline-block}
.code .cl.missed .mark{color:#ef4444}
.code .cl.covered .mark{color:#22c55e}
.note{color:var(--muted);font-size:13px;padding:8px 0}
.footer{text-align:center;color:var(--muted);font-size:12px;padding:16px 0}
</style>
</head>
<body>
<nav class="nav">
<a class="active" href="index.html">总览</a>
<a class="" href="by-author.html">提交人维度</a>
<a href="summary.json" target="_blank">summary.json</a>
</nav>
<header class="page-header">
<h1>覆盖率分析报告</h1>
<div class="meta">
<span>项目:D:/bestpay-srdcloud/ft-pay-core</span>
<span>分支:develop</span>
<span>commit:a1b2c3d</span>
<span>耗时:45s</span>
<span><span class="badge ok">✓ 通过</span></span>
</div>
</header>
<section class="card summary-cards">
<div class="summary-card">
<div class="num ok">99.41%</div>
<div class="label">单元测试通过率(目标 100%)</div>
<div class="sub">通过 2036 / 总数 2048,失败 0,错误 0</div>
</div>
<div class="summary-card">
<div class="num warn">70.27%</div>
<div class="label">行覆盖率(目标 80%)</div>
<div class="sub">已覆盖 130 / 185 行</div>
</div>
<div class="summary-card">
<div class="num warn">70.45%</div>
<div class="label">方法覆盖率</div>
<div class="sub">已覆盖 31 / 44 方法</div>
</div>
</section>
<section class="card">
<h2>阈值校验</h2>
<ul class="check-list"><li class="ok">全量测试通过率与行覆盖率均满足阈值要求</li></ul>
</section>
<section class="card">
<h2>包级覆盖率 <a class="link" href="by-author.html">查看提交人维度 &rarr;</a></h2>
<table class="grid">
<thead><tr><th>包</th><th>类数</th><th>行覆盖</th><th>行覆盖率</th><th>方法覆盖</th><th>方法覆盖率</th></tr></thead>
<tbody>
<tr><td class="mono">com/bestpay/pay/order</td><td>2</td><td>100 / 125</td><td><div class="bar-wrap"><div class="bar" style="width:80.00%;background:#22c55e"></div><span class="bar-txt">80.00%</span></div></td><td>25 / 30</td><td><div class="bar-wrap"><div class="bar" style="width:83.33%;background:#22c55e"></div><span class="bar-txt">83.33%</span></div></td></tr>
<tr><td class="mono">com/bestpay/pay/refund</td><td>1</td><td>30 / 60</td><td><div class="bar-wrap"><div class="bar" style="width:50.00%;background:#eab308"></div><span class="bar-txt">50.00%</span></div></td><td>6 / 14</td><td><div class="bar-wrap"><div class="bar" style="width:42.86%;background:#ef4444"></div><span class="bar-txt">42.86%</span></div></td></tr>
</tbody>
</table>
</section>
<footer class="footer">由 coverage-report-plugin 生成</footer>
</body>
</html>