Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions backend/internal/services/test_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,10 +230,11 @@ func GetMasterBranchLatestStats(c *gin.Context) (*MasterBranchStats, error) {
duration = result.TotalDuration
}

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

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

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

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

Expand Down
23 changes: 19 additions & 4 deletions frontend/src/views/TestRunDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@
<div class="stat-value">{{ failedTestCases.length }}</div>
<div class="stat-label">失败</div>
</div>
<div class="stat-item" v-if="skippedTestCases.length > 0">
<div class="stat-value">{{ skippedTestCases.length }}</div>
<div class="stat-label">跳过</div>
</div>
<div class="stat-item">
<div class="stat-value">{{ passRate }}%</div>
<div class="stat-label">通过率</div>
Expand Down Expand Up @@ -177,6 +181,11 @@
:label="`失败 (${failedTestCases.length})`"
>
</t-tab-panel>
<t-tab-panel
value="skipped"
:label="`跳过 (${skippedTestCases.length})`"
>
</t-tab-panel>
</t-tabs>
</div>
<div class="test-cases-toolbar">
Expand Down Expand Up @@ -316,6 +325,9 @@ const passedTestCases = computed(() =>
const failedTestCases = computed(() =>
testCases.value.filter((tc) => tc.status === "failed"),
);
const skippedTestCases = computed(() =>
testCases.value.filter((tc) => tc.status === "skipped"),
);

// 根据标签页过滤的测例
const tabFilteredTestCases = computed(() => {
Expand All @@ -324,6 +336,8 @@ const tabFilteredTestCases = computed(() => {
return passedTestCases.value;
case "failed":
return failedTestCases.value;
case "skipped":
return skippedTestCases.value;
default:
return allTestCases.value;
}
Expand Down Expand Up @@ -420,10 +434,11 @@ const handleSortChange = (sortInfo) => {
};

const passRate = computed(() => {
if (allTestCases.value.length === 0) return 0;
return Math.round(
(passedTestCases.value.length / allTestCases.value.length) * 100,
);
// 通过率 = 通过数 / (通过数 + 失败数) * 100,跳过测例不计入分母
const validCases =
passedTestCases.value.length + failedTestCases.value.length;
if (validCases === 0) return 0;
return Math.round((passedTestCases.value.length / validCases) * 100);
});

const getStatusText = (status) => {
Expand Down