Skip to main content

elf-allure-report

Elf Express 以 Allure Report v3 作為跨框架的測試報告 UI:Playwright、Vitest、xUnit 的結果統一寫入 repo 根目錄 `allure-results/`,再以 `allure` CLI(npm 套件,pnpm 安裝)產出 HTML 報告。 當任務涉及設置測試報告、讓測試框架輸出 Allure 結果、撰寫 `allurerc.*`、CI 產出 / 上傳報告、 quality gate、watch 即時報告、多框架或 rerun 結果合併時觸發。

Informations de source

Dépôt
elf-express/skillshare-source
Dernière activité de la source
20 octobre 2026 à 02:43
Langue détectée de SKILL.md
chinois
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
elf-allure-report
description
Elf Express 以 Allure Report v3 作為跨框架的測試報告 UI:Playwright、Vitest、xUnit 的結果統一寫入 repo 根目錄 `allure-results/`,再以 `allure` CLI(npm 套件,pnpm 安裝)產出 HTML 報告。 當任務涉及設置測試報告、讓測試框架輸出 Allure 結果、撰寫 `allurerc.*`、CI 產出 / 上傳報告、 quality gate、watch 即時報告、多框架或 rerun 結果合併時觸發。
metadata
{"version":"1.0.0","owner":"Elf Express","upstream":{"name":"Allure Report","version":"3.x","docs":"https://allurereport.org/docs/v3/"}}
# Elf Express Allure Report v3 規範 > 相關 skill:`elf-e2e`(Playwright,團隊標準 E2E 框架)、`elf-unit`(Vitest / xUnit)、`elf-integration`、 > `elf-cicd-frontend` / `elf-cicd-backend`(CI 上產出與發布報告)、`elf-stack`(Node 24.18 / pnpm / .NET 10)。 ## 1. 何時使用 - 為新專案配置測試報告 UI - 讓 Playwright / Vitest / xUnit 輸出 Allure 結果 - CI/CD pipeline 整合 Allure 輸出 - 設定 quality gate(失敗測試臨界量 fast-fail) - 設定 known issues、多環境報告、rerun 結果聚合 - 啟動 real-time `watch` 即時報告 ### 核心概念(Allure 3) 1. **兩階段資料流** - **Collection phase**:測試框架(透過 adapter)寫 JSON 到 results 目錄 - **Visualization phase**:`allure` CLI 讀 JSON 產出 HTML 2. **單一配置檔**:`allurerc.mjs`(或 `.js` / `.ts`)管理所有 report 設定 3. **Plugin 系統**:預設啟用 Awesome plugin,提供新版 UI 4. **支援框架**:JUnit、TestNG、Pytest、Behave、Cucumber、Jest、Vitest、Mocha、NUnit、xUnit、MSTest、Cypress、Playwright 等 5. **CLI 是 npm 套件 `allure`**(Node 實作)。Allure 2 的 Java 版 CLI(brew / scoop 安裝、`allure serve`、`generate --clean`)**不適用**。 6. Allure 3 可直接讀 Allure 2 格式的結果檔,adapter 不需為升級而改。 ## 2. 固定規則 1. **MUST** 用 pnpm 在 repo 根目錄安裝 CLI:`pnpm add -D -w allure`;指令一律 `pnpm exec allure ...`,**MUST NOT** 全域安裝或用 `npx`。 2. **MUST** 所有框架的結果寫到**同一個** repo 根目錄 `allure-results/`;報告輸出到 `allure-report/`。兩者都加入 `.gitignore`。 3. **MUST** 每次完整測試前清空 `allure-results/`(CI 用新的 checkout 即可;本機用 §3.6 的 script),否則舊結果混入報告。 4. **MUST** `allurerc.mjs` 放 repo 根目錄,內容以 §3.1 為準。 5. **MUST** 所有路徑為 repo 相對路徑,**MUST NOT** 寫本機絕對路徑。 6. **MUST NOT** 使用 Allure 2 指令:`allure serve`(改 `allure open allure-results`,會即時產生並開啟)、 `allure generate --clean`(Allure 3 無此旗標)。 7. **MUST** Allure 為「附加」報告:Playwright 在 CI 仍保留 `github` reporter 以顯示 PR 註解(見 `elf-e2e` §3.1)。 8. **MUST NOT** 未經團隊決定就啟用 quality gate 或發布到 GitHub Pages(見 §6)。 9. **MUST** `uses:` 一律釘 40 碼 commit SHA 並在行尾註解版本,SHA 與版本逐字取自 `stack/elf-stack` 3.5 節對照表;**MUST NOT** 改回 `@vN`、`@stable` 或分支名。WHY:見 elf-stack 規則 9 與其 `references/simplification-evidence.md`。 ## 3. 標準範本 ### 3.1 `allurerc.mjs`(repo 根目錄) ```js import { defineConfig } from 'allure' export default defineConfig({ name: '<AppName> Test Report', output: './allure-report', historyPath: './allure-history.jsonl', plugins: { awesome: { options: { reportName: '<AppName>', }, }, }, }) ``` - `<AppName>` 換成專案名(兩處) - `allure-history.jsonl` 用於跨次執行的趨勢;CI 需要趨勢時要把它存成 artifact 或快取(見 §6) ### 3.2 Playwright(`allure-playwright`) ```bash pnpm add -D -w allure-playwright ``` `playwright.config.ts` 的 reporter(其他設定照 `elf-e2e` §3.1 不變;CI **追加** allure,`github` + `html` 一律保留): ```ts reporter: process.env.CI ? [ ['github'], ['html', { open: 'never', outputFolder: 'playwright-report' }], ['allure-playwright', { detail: true, resultsDir: 'allure-results', suiteTitle: false }], ] : [['list'], ['allure-playwright', { detail: true, resultsDir: 'allure-results', suiteTitle: false }]], ``` `video: 'on'`、`screenshot: 'on'` 產生的檔案會自動附加到 Allure 測試結果。 ### 3.3 Vitest(`allure-vitest`) ```bash pnpm --filter <app> add -D allure-vitest # installed in apps/, next to vitest ``` 前端 app 的 `vite.config.ts`(`resultsDir` 指回 repo 根目錄;app 在 `apps/` 下時為 `../allure-results`): ```ts test: { // ...elf-unit §3.3 的設定不變 reporters: ['default', ['allure-vitest/reporter', { resultsDir: '../allure-results' }]], }, ``` ### 3.4 xUnit(.NET 10,`Allure.Xunit`) 專案採 Central Package Management(見 `elf-stack`):版本寫在 `server/Directory.Packages.props`,csproj 不寫 `Version=`。 ```xml <!-- server/Directory.Packages.props --> <PackageVersion Include="Allure.Xunit" Version="<version>" /> <!-- server/tests/<Project>.Tests/<Project>.Tests.csproj --> <ItemGroup> <PackageReference Include="Allure.Xunit" /> </ItemGroup> <ItemGroup> <None Update="allureConfig.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> ``` `server/tests/<Project>.Tests/allureConfig.json`: ```json { "allure": { "directory": "../../../../../../allure-results" } } ``` - 相對路徑以測試執行時的工作目錄 `server/tests/<Project>.Tests/bin/<Configuration>/net10.0/` 為起點, 往上**六層**(`net10.0` → `<Configuration>` → `bin` → `<Project>.Tests` → `tests` → `server`)才是 repo 根目錄 - 目錄層數變了(例如改 `TargetFramework` 輸出路徑、`UseArtifactsOutput`)就要重算;少一層會把結果寫進 `server/allure-results/`,報告看不到 xUnit 結果 - 整合測試專案(`server/tests/<App>.Api.IntegrationTests/`)比照辦理,層數相同 ### 3.5 產報告 ```bash pnpm exec allure generate allure-results -o allure-report # 轉 HTML pnpm exec allure open allure-report # 本地開啟 pnpm exec allure open allure-results # 直接從結果即時產生並開啟(取代 Allure 2 的 serve) pnpm exec allure watch allure-results # 開發中即時更新 pnpm exec allure run -- pnpm test:e2e # 執行測試並產報告 ``` ### 3.6 `package.json` scripts(repo 根目錄) ```json { "scripts": { "allure:clean": "node -e \"require('node:fs').rmSync('allure-results',{recursive:true,force:true})\"", "allure:generate": "allure generate allure-results -o allure-report", "allure:open": "allure open allure-report" } } ``` 跨平台(Windows / Linux)皆可執行;**MUST NOT** 用 `rm -rf`(Windows 本機無法執行)。 ### 3.7 CI(GitHub Actions 片段) ```yaml # ... after the test steps; runs even when tests failed - name: Allure report if: always() run: pnpm exec allure generate allure-results -o allure-report - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 if: always() with: name: allure-report path: allure-report/ retention-days: 7 ``` 多個 job(web / e2e / server)各自產生結果時:各 job 上傳 `allure-results/` 為 artifact(名稱不同), 最後一個 job 用 `actions/download-artifact` v5(SHA 見 elf-stack 3.5;`merge-multiple: true`、`path: allure-results`)下載後再 `generate` 一次。 完整 workflow 由 `elf-cicd-frontend` / `elf-cicd-backend` 維護。 ### 3.8 Quality gate(範本,啟用前需團隊決定門檻) ```js // allurerc.mjs export default defineConfig({ // ... qualityGate: { rules: [ { maxFailures: 0 }, // threshold to be decided — see §6 { id: 'critical', maxFailures: 0, fastFail: true, filter: (tr) => tr.labels.some((l) => l.name === 'severity' && l.value === 'critical'), }, ], }, }) ``` ## 4. 檢查清單 - [ ] `allure` 以 `pnpm add -D -w` 安裝在 repo 根目錄,指令一律 `pnpm exec allure` - [ ] `allurerc.mjs` 在 repo 根目錄,`output: './allure-report'` - [ ] Playwright / Vitest / xUnit 結果都寫到 repo 根目錄 `allure-results/` - [ ] `.gitignore` 含 `allure-results/`、`allure-report/`、`allure-history.jsonl`(除非決定入版控) - [ ] 沒有 `allure serve`、`--clean`、`npx allure`、本機絕對路徑 - [ ] xUnit 專案有 `allureConfig.json`(`directory` 往上六層)且設 `CopyToOutputDirectory`;`Allure.Xunit` 版本在 `Directory.Packages.props` - [ ] CI 的 Playwright reporter 仍含 `github` + `html`;`actions/*` 為 v5(SHA 見 elf-stack 3.5) - [ ] CI 在測試失敗時仍產生並上傳報告(`if: always()`) - [ ] 所有 `uses:` 為 40 碼 SHA+`# 版本` 註解,且與 elf-stack 3.5 對照表逐字一致 ## 5. 常見錯誤 | 錯誤 | 後果 | 正確做法 | |------|------|----------| | 照 Allure 2 教學 `brew install allure` / `allure serve` | 裝到 Java 版 CLI,與 `allurerc.mjs` 不相容 | `pnpm add -D allure`,`allure open allure-results` | | `allure generate ... --clean` | Allure 3 CLI 不認得此旗標 | 直接 `allure generate allure-results -o allure-report` | | 各框架寫到不同 `allure-results` | 報告只看得到其中一種測試 | 全部指到 repo 根目錄 `allure-results/` | | 未清空 `allure-results/` 就重跑 | 舊結果與新結果混在一起 | `pnpm allure:clean` | | xUnit 忘記複製 `allureConfig.json` | 結果寫在 `bin/.../allure-results`,報告找不到 | `CopyToOutputDirectory: Always` | | `allureConfig.json` 只往上五層 | `server/tests/` 多一層,結果寫到 `server/allure-results/` | 往上六層(§3.4) | | 移除 Playwright `github` reporter 改只用 Allure | PR 上看不到失敗註解 | 兩者並用 | | CI 報告步驟沒加 `if: always()` | 測試失敗時反而沒有報告 | `if: always()` | ## 6. 待確認 - [ ] 是否正式採用 Allure 作為團隊統一報告(目前 `elf-e2e` 預設仍為 Playwright HTML) - [ ] 報告發布方式:CI artifact(目前規定)、GitHub Pages、或 Allure Service - [ ] Quality gate 門檻(允許失敗數 / 比例)與是否 fast-fail - [ ] Known issues 的來源與設定方式 - [ ] 趨勢歷史 `allure-history.jsonl` 的保存方式(artifact / cache / 入版控) - [ ] 多環境(dev / staging / prod)報告是否需要分開產出或合併 - [ ] `allure`(3.18.0)、`allure-playwright` / `allure-vitest`(3.12.2)、`Allure.Xunit`(2.15.0)版本是否納入 `elf-stack` 定本(2026-09 查得最新版) - [ ] Python(pytest)等非團隊主力框架的 adapter 範本是否需要 ## 參考 - 官方文檔:https://allurereport.org/docs/v3/ - Demo:https://demo.allurereport.org - GitHub:https://github.com/allure-framework/allure3
Voir sur GitHub