Skip to content

Commit 74df4d3

Browse files
authored
Merge pull request #1 from DragonOS-Community/fix-pass-rate-calculation-exclude-skipped
fix: 修正通过率和成功率计算逻辑
1 parent f5b08a0 commit 74df4d3

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

backend/internal/services/test_run.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,11 @@ func GetMasterBranchLatestStats(c *gin.Context) (*MasterBranchStats, error) {
230230
duration = result.TotalDuration
231231
}
232232

233-
// 计算通过率
233+
// 计算通过率(跳过测例不计入分母)
234234
passRate := 0.0
235-
if totalCases > 0 {
236-
passRate = float64(passedCases) / float64(totalCases) * 100.0
235+
validCases := passedCases + failedCases // 只计算通过和失败的测例
236+
if validCases > 0 {
237+
passRate = float64(passedCases) / float64(validCases) * 100.0
237238
}
238239

239240
stats := &MasterBranchStats{
@@ -370,10 +371,10 @@ func GetDashboardStats(c *gin.Context) (*DashboardStats, error) {
370371
stats.FailedCount = totalFailedCases
371372
stats.SkippedCount = totalSkippedCases
372373

373-
// 计算成功率(基于测例)
374-
totalCases := totalSuccessCases + totalFailedCases + totalSkippedCases
375-
if totalCases > 0 {
376-
stats.SuccessRate = float64(totalSuccessCases) / float64(totalCases) * 100.0
374+
// 计算成功率(基于测例,跳过测例不计入分母
375+
validCases := totalSuccessCases + totalFailedCases // 只计算通过和失败的测例
376+
if validCases > 0 {
377+
stats.SuccessRate = float64(totalSuccessCases) / float64(validCases) * 100.0
377378
}
378379

379380
// 上期成功率(7天前的数据)
@@ -398,9 +399,9 @@ func GetDashboardStats(c *gin.Context) (*DashboardStats, error) {
398399
Where("test_run_id IN (?) AND status = ?", prevRunIDs, models.TestCaseStatusSkipped).
399400
Count(&prevSkippedCases)
400401
}
401-
prevTotalCases := prevSuccessCases + prevFailedCases + prevSkippedCases
402-
if prevTotalCases > 0 {
403-
stats.SuccessRatePrev = float64(prevSuccessCases) / float64(prevTotalCases) * 100.0
402+
prevValidCases := prevSuccessCases + prevFailedCases // 只计算通过和失败的测例
403+
if prevValidCases > 0 {
404+
stats.SuccessRatePrev = float64(prevSuccessCases) / float64(prevValidCases) * 100.0
404405
}
405406
}
406407

frontend/src/views/TestRunDetail.vue

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@
148148
<div class="stat-value">{{ failedTestCases.length }}</div>
149149
<div class="stat-label">失败</div>
150150
</div>
151+
<div class="stat-item" v-if="skippedTestCases.length > 0">
152+
<div class="stat-value">{{ skippedTestCases.length }}</div>
153+
<div class="stat-label">跳过</div>
154+
</div>
151155
<div class="stat-item">
152156
<div class="stat-value">{{ passRate }}%</div>
153157
<div class="stat-label">通过率</div>
@@ -177,6 +181,11 @@
177181
:label="`失败 (${failedTestCases.length})`"
178182
>
179183
</t-tab-panel>
184+
<t-tab-panel
185+
value="skipped"
186+
:label="`跳过 (${skippedTestCases.length})`"
187+
>
188+
</t-tab-panel>
180189
</t-tabs>
181190
</div>
182191
<div class="test-cases-toolbar">
@@ -316,6 +325,9 @@ const passedTestCases = computed(() =>
316325
const failedTestCases = computed(() =>
317326
testCases.value.filter((tc) => tc.status === "failed"),
318327
);
328+
const skippedTestCases = computed(() =>
329+
testCases.value.filter((tc) => tc.status === "skipped"),
330+
);
319331
320332
// 根据标签页过滤的测例
321333
const tabFilteredTestCases = computed(() => {
@@ -324,6 +336,8 @@ const tabFilteredTestCases = computed(() => {
324336
return passedTestCases.value;
325337
case "failed":
326338
return failedTestCases.value;
339+
case "skipped":
340+
return skippedTestCases.value;
327341
default:
328342
return allTestCases.value;
329343
}
@@ -420,10 +434,11 @@ const handleSortChange = (sortInfo) => {
420434
};
421435
422436
const passRate = computed(() => {
423-
if (allTestCases.value.length === 0) return 0;
424-
return Math.round(
425-
(passedTestCases.value.length / allTestCases.value.length) * 100,
426-
);
437+
// 通过率 = 通过数 / (通过数 + 失败数) * 100,跳过测例不计入分母
438+
const validCases =
439+
passedTestCases.value.length + failedTestCases.value.length;
440+
if (validCases === 0) return 0;
441+
return Math.round((passedTestCases.value.length / validCases) * 100);
427442
});
428443
429444
const getStatusText = (status) => {

0 commit comments

Comments
 (0)