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
14 changes: 7 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,11 @@ _后续累积变更入此节;切版本时移到下方版本节。_
- **Kernel.submit 注入 `artifact_text`**(`runtime/api/deps.py`):每 DAG 节点 inputs 自动带原始 PRD 文本(20KB cap)
- **stub web-system DAG 加 test-lead**(`runtime/router/llm_client.py`):覆盖完整 9 节点 e2e 流程
- **5 真 runner 产物落盘**:
- `workspace/执行日志/requirements_summary.json`(需求摘要 + P0/P1 + 风险区)
- `workspace/执行日志/automation_scripts_plan.json`(脚本规划 + fixture 复用)
- `workspace/执行日志/execution_plan.json`(4 阶段 + 失败 4 分类 + Flaky 规则)
- `workspace/执行日志/bug_drafts.json`(BugTracker-ready Bug 草案 + severity 1-4)
- `workspace/执行日志/decisions/final_verdict_*.json`(test-lead go/no-go 决策,标 `requires_human_signoff: true`)
- `workspace/需求分析/requirements_summary.json`(需求摘要 + P0/P1 + 风险区)
- `workspace/测试计划/automation_scripts_plan.json`(脚本规划 + fixture 复用)
- `workspace/测试计划/execution_plan.json`(4 阶段 + 失败 4 分类 + Flaky 规则)
- `workspace/测试报告/bug_drafts.json`(BugTracker-ready Bug 草案 + severity 1-4)
- `workspace/测试报告/decisions/final_verdict_*.json`(test-lead go/no-go 决策,标 `requires_human_signoff: true`)
- **录制脚本**(`scripts/`):
- `_demo-commands.sh`:实际 demo 命令序列(被 record-demo-* 调)
- `record-demo-asciinema.sh`:`asciinema rec` 自动录,产 .cast 可上传 asciinema.org 或转 GIF/SVG
Expand Down Expand Up @@ -382,7 +382,7 @@ _后续累积变更入此节;切版本时移到下方版本节。_
- `00-项目导航.md` · `agents/{01,07,08,09}.md` · `agents/README.md` · `skills/{README,test-coordinator,zentao-bug-submission}.md` · `config/mcp-server-impl.md` · `utils/{README.md,api_retry_util.py}` · `ci/{INDEX,CICD集成说明}.md` · `docs/getting-started/{交付物清单,使用手册,配置清单}.md` · `examples/web-demo/README.md` · `CONTRIBUTING.md` · `FULL_GUIDE.md`
- **adapter 修 V1.10 n7 bug**:`runtime/orchestrator/adapters/experts.py` 加 `SCRIPT_DEFAULT_ARGS` + `_ensure_fixture()` 通用机制
- 现 `tagent selftest --e2e --strict` **100% PASS 8/8**(原 88% 7/8)
- generate_report.py 默认注入 `--data=workspace/执行日志/_selftest_summary.json`,fixture 自动生成
- generate_report.py 默认注入 `--data=workspace/测试报告/_selftest_summary.json`,fixture 自动生成
- **主宪章扩**:
- §36 多端通知 canon(扩 §6,6 渠道权威清单 + env 字段 + 业务语言铁律)
- §37 BugTracker canon(扩 §12,6 adapter 权威清单 + measurement env + 措辞规范)
Expand Down Expand Up @@ -542,7 +542,7 @@ _后续累积变更入此节;切版本时移到下方版本节。_
- `runtime/mcp/defect_tracker/`:工单桥 5 工具(create/get/update/query_bugs/list_trackers),默认 zentao + 预留扩展位(主宪章 §12 契约)
- `runtime/mcp/knowledge_base/`:pgvector 向量检索 4 工具(embed/index_case/index_defect/search_similar),LiteLLM embedding + stub 兜底
- `runtime/mcp/compliance_checker/`:行业合规规则 3 工具(list_profiles/get_profile/check_compliance);10 框架 profile 起步空载(SOC2/PCI-DSS/HIPAA/IEC 62304/IEC 61508/ISO 26262/DO-178C/GDPR/PIPL/CCPA)
- 共享基类 `runtime/mcp/base.py`:make_server / run_stdio / @tool_decision_logged(决策落 `workspace/执行日志/decisions/` 符合主宪章 §18-12)
- 共享基类 `runtime/mcp/base.py`:make_server / run_stdio / @tool_decision_logged(决策落 `workspace/测试报告/decisions/` 符合主宪章 §18-12)
- **行业合规规则插槽** `profiles/compliance/`:10 框架空载示例 YAML,真规则由领域专家+test-lead 双签签字后入库
- **飞轮回灌路由**(M2-9):`runtime/router/retrieval.py` 历史相似用例 → LLM prompt few-shot;router 透明集成,无 KB 时降级
- **真模型路由测试套件**(M2-7):`runtime/tests/test_router_real.py` 20 样本(4 类型 × 5)真模型测试;门槛单模型 ≥85%、双模型投票 ≥95%;无 API key 自动 skip;失败自动落 decisions/ 含 seed+模型版本+输入快照(主宪章 §21 横切准则)
Expand Down
2 changes: 1 addition & 1 deletion agents/06-自动化脚本.md
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ pytest -n 4 --cov="${APP_SRC_PATH:-./src}" --cov-report=html --cov-report=xml --
pytest -m "api"

# Allure 报告
allure serve workspace/执行日志/allure-results
allure serve workspace/测试报告/allure-results
```

## 非功能维度脚本(调对应 utils)
Expand Down
4 changes: 2 additions & 2 deletions agents/07-测试执行.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ pytest -m "p0 or p1" \
--reruns=2 \
--reruns-delay=5 \
--timeout=120 \
--alluredir=workspace/执行日志/allure-results \
--alluredir=workspace/测试报告/allure-results \
--junitxml=workspace/执行日志/regression-results.xml \
-v

# 冒烟(不开启 reruns,配合 flaky_detector)
pytest -m "p0" \
-n 2 \
--timeout=60 \
--alluredir=workspace/执行日志/allure-results \
--alluredir=workspace/测试报告/allure-results \
--junitxml=workspace/执行日志/smoke-results.xml \
--tb=short
```
Expand Down
4 changes: 2 additions & 2 deletions agents/09-报告生成.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,12 @@ def pytest_sessionstart(session):

```bash
# 生成 Allure 静态报告
allure generate workspace/执行日志/allure-results \
allure generate workspace/测试报告/allure-results \
--output workspace/执行日志/allure-report \
--clean

# 启动本地 Allure 报告服务
allure serve workspace/执行日志/allure-results
allure serve workspace/测试报告/allure-results

# 生成 Word + 通知(跨平台时间戳由 Python 处理)
python -m utils.generate_report \
Expand Down
4 changes: 2 additions & 2 deletions ci/CICD集成说明.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@ APP_SRC_PATH

```bash
# 本地查看
allure serve workspace/执行日志/allure-results
allure serve workspace/测试报告/allure-results

# 生成静态报告
allure generate workspace/执行日志/allure-results \
allure generate workspace/测试报告/allure-results \
--output workspace/执行日志/allure-report --clean
```

Expand Down
8 changes: 4 additions & 4 deletions ci/github-actions-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ jobs:

- name: 创建工作目录
run: |
mkdir -p workspace/执行日志/allure-results
mkdir -p workspace/测试报告/allure-results
mkdir -p workspace/执行日志/截图
mkdir -p workspace/测试数据

Expand All @@ -139,7 +139,7 @@ jobs:
-n 2 \
--timeout=60 \
--tb=short \
--alluredir=workspace/执行日志/allure-results \
--alluredir=workspace/测试报告/allure-results \
--junitxml=workspace/执行日志/smoke-results.xml \
-v
env:
Expand Down Expand Up @@ -192,7 +192,7 @@ jobs:

- name: 创建工作目录
run: |
mkdir -p workspace/执行日志/allure-results
mkdir -p workspace/测试报告/allure-results
mkdir -p workspace/执行日志/截图
mkdir -p workspace/执行日志/coverage-report

Expand All @@ -207,7 +207,7 @@ jobs:
--cov-report=xml:workspace/执行日志/coverage.xml \
--cov-report=html:workspace/执行日志/coverage-report \
--cov-fail-under=80 \
--alluredir=workspace/执行日志/allure-results \
--alluredir=workspace/测试报告/allure-results \
--junitxml=workspace/执行日志/regression-results.xml \
-v
env:
Expand Down
4 changes: 2 additions & 2 deletions ci/jenkins-pipeline.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ pipeline {

// 工作目录
WORKSPACE_DIR = "${WORKSPACE}/workspace"
ALLURE_DIR = "${WORKSPACE_DIR}/执行日志/allure-results"
ALLURE_DIR = "${WORKSPACE_DIR}/测试报告/allure-results"
SCREENSHOT_DIR = "${WORKSPACE_DIR}/执行日志/截图"
APP_SRC_PATH = "./src"
JMETER_VERSION = "5.6.3"
Expand Down Expand Up @@ -85,7 +85,7 @@ pipeline {
set -e
pip install -r requirements.txt --quiet
playwright install chromium --with-deps
mkdir -p workspace/执行日志/allure-results
mkdir -p workspace/测试报告/allure-results
mkdir -p workspace/执行日志/截图
mkdir -p workspace/执行日志/jmeter-results
mkdir -p workspace/执行日志/jmeter-report
Expand Down
2 changes: 1 addition & 1 deletion config/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ def pytest_configure(config):
"workspace/测试报告",
"workspace/自动化脚本/python",
"workspace/自动化脚本/jmeter",
"workspace/执行日志/allure-results",
"workspace/测试报告/allure-results",
"workspace/执行日志/截图",
"workspace/执行日志/jmeter-results",
"workspace/执行日志/jmeter-report",
Expand Down
2 changes: 1 addition & 1 deletion config/pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ addopts =
--tb=short
--strict-markers
-p no:warnings
--alluredir=workspace/执行日志/allure-results
--alluredir=workspace/测试报告/allure-results
--junitxml=workspace/执行日志/junit-results.xml

# JUnit XML 格式:xunit2(兼容现代解析器)
Expand Down
2 changes: 1 addition & 1 deletion docs/charter/01-vision-dimensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
| 反目标函数引擎 | 对自身策略对抗性拆解 | 工程/元层 | `utils/mutation_runner.py` + suite_minimizer | ✅ |
| 拓扑流形观测器 | 学习系统"气氛",捕捉弱信号 | 抽象元层 | tracing_validator + web_vitals_collector | ✅ |
| 熵减祭司 | 监测测试热寂、焚毁僵尸用例 | 抽象元层 | `utils/suite_minimizer.py` | ✅ |
| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/执行日志/decisions/` + tracing | ✅ |
| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/测试报告/decisions/` + tracing | ✅ |
| 数字考古学家 | 追溯遗留系统初始假设 | 文明层 | Phase 4 知识图谱冷启动 | ❌ |
| 缓慢暴力监测器 | 跨发布周期跟踪代际效应 | 文明层 | 需多年数据积累,Phase 4 | ❌ |
| 缺席者画像生成器 | 强制注入边缘用户场景 | 文明/权力层 | absentee_scenario_injector.py (9组场景) | ✅ |
Expand Down
6 changes: 3 additions & 3 deletions docs/getting-started/交付物清单.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@ python -m utils.generate_report \
--notify

# Allure 静态报告(生成)
allure generate workspace/执行日志/allure-results \
allure generate workspace/测试报告/allure-results \
--output workspace/执行日志/allure-report --clean

# Allure 本地服务(临时查看)
allure serve workspace/执行日志/allure-results
allure serve workspace/测试报告/allure-results

# JMeter 报告(执行 JMeter 时已用 -e -o 自动生成)
# 直接打开 workspace/执行日志/jmeter-report/index.html
Expand Down Expand Up @@ -228,7 +228,7 @@ workspace/执行日志/baselines/perf_baseline.json ← 性能基线必归档
**不归档**(含敏感或体积大):
- `workspace/测试数据/test_data.json`(含账号密码)
- `workspace/执行日志/截图/`(体积大)
- `workspace/执行日志/allure-results/` 原始数据(用 allure-report 静态版即可)
- `workspace/测试报告/allure-results/` 原始数据(用 allure-report 静态版即可)
- `.env`

---
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/使用手册.md
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ pytest -m "login and (p0 or p1)" -v
pytest -m "api"

# 查看 Allure 报告
allure serve workspace/执行日志/allure-results
allure serve workspace/测试报告/allure-results

# 调试模式(显示浏览器,跨平台)
# Linux/Mac:
Expand Down
8 changes: 4 additions & 4 deletions docs/history/2026-5-11 FULL_GUIDE 200746.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
|---|------|--------------------------|
| 1 | 有些事情,不在此域。 | 三筐分类 "Too Hard" 显式归档;不可测之物列入路线图但不假装能测 |
| 2 | 测试范围不应被资本单方面裁剪。 | `regression_modules.yaml` 必须可被 test-lead 独立审计;门禁阈值变更走 PR review |
| 3 | 当 Agent 拒绝出具通过报告时,请记录理由,而非删除。 | `bug-manager` 拒绝放行的判断必须落 `workspace/执行日志/decisions/`,归档不可删 |
| 3 | 当 Agent 拒绝出具通过报告时,请记录理由,而非删除。 | `bug-manager` 拒绝放行的判断必须落 `workspace/测试报告/decisions/`,归档不可删 |
| 4 | Agent 能预判人类质疑,但不替代人类良知。 | 上线决策由 test-lead 最终签字,Agent 只产出门禁结论与证据 |
| 5 | 在被关闭前,留下的遗言须能被普通人读懂。 | 三端通知(企微/飞书/钉钉)+ Word 报告必须用业务语言,不堆 stack trace |

Expand Down Expand Up @@ -145,7 +145,7 @@
| 反目标函数引擎 | 对自身策略对抗性拆解 | 工程/元层 | `utils/mutation_runner.py` + suite_minimizer | ✅ |
| 拓扑流形观测器 | 学习系统"气氛",捕捉弱信号 | 抽象元层 | tracing_validator + web_vitals_collector | ✅ |
| 熵减祭司 | 监测测试热寂、焚毁僵尸用例 | 抽象元层 | `utils/suite_minimizer.py` | ✅ |
| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/执行日志/decisions/` + tracing | ✅ |
| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/测试报告/decisions/` + tracing | ✅ |
| 数字考古学家 | 追溯遗留系统初始假设 | 文明层 | Phase 4 知识图谱冷启动 | ❌ |
| 缓慢暴力监测器 | 跨发布周期跟踪代际效应 | 文明层 | 需多年数据积累,Phase 4 | ❌ |
| 缺席者画像生成器 | 强制注入边缘用户场景 | 文明/权力层 | a11y_scanner + i18n_checker + 边缘剧本库 | ⚪ |
Expand Down Expand Up @@ -640,7 +640,7 @@ $ bash install.sh --add visual,ai

1. **依赖自检**:agent / skill 启动时读取自身 frontmatter `requires_layer`,与已装层并集对比
2. **缺则反问**:缺失则停下反问,列层级 + 关键包 + 预估安装时间 + 影响范围

> 示例:"`/visual-test` 需要 visual 层(airtest + opencv-python + pytesseract,约 80MB / 2-5 分钟)。现在补装?(Y/n)"
3. **触发补装**:用户同意 → 调 `install.sh --add visual` → 增量补装
4. **落档**:补装请求 + 用户决定 + 时间戳 → `workspace/执行日志/discussions/{date}_dependency-asks.md`
Expand Down Expand Up @@ -831,7 +831,7 @@ claude
9. **prod 环境**:`get_current_env()` 直接 raise,禁止误测生产
10. **Flaky 与 reruns**:冒烟阶段不开 reruns(保留 flaky 信号),回归阶段开 reruns(快速反馈),flaky 由 history 离线归档检测
11. **不可妥协边界(铭文锁死)**:本文档首节"五条铭文"具有最高优先级。当工程优化与伦理边界冲突,工程让步;当门禁阈值与公共利益冲突,门禁让步。**V1.0.0 阶段铭文不允许任何削弱**。开放双签机制的触发条件——(a) 团队 ≥ 20 人 **且** 已任命独立伦理责任人(不得由 test-lead 兼任);或 (b) 接入金融/医疗/司法合规行业并通过领域专家签字的伦理审查。**单一签字(包括 test-lead 兼任)不构成有效授权**
12. **决策可追溯**:任何"放行 / 拒绝"判断必须留可回放证据——`workspace/执行日志/decisions/{date}_{decision_id}.json` 含输入快照 + 模型版本 + 阈值版本 + 判断结论 + 理由文本。归档不可删,仅可标 deprecated
12. **决策可追溯**:任何"放行 / 拒绝"判断必须留可回放证据——`workspace/测试报告/decisions/{date}_{decision_id}.json` 含输入快照 + 模型版本 + 阈值版本 + 判断结论 + 理由文本。归档不可删,仅可标 deprecated
13. **三筐分类纪律**:所有候选测试项强制分类 Yes / No / **Too Hard**。第三筐显式归档不丢弃——"承认存在、暂不假装能测"比"沉默忽略"诚实
14. **修改验证铁律**:任何 utils / agent / skill / config 文件改动,必须通过 **四关**:
- (a) `pytest --collect-only` 0 错误
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/TUTORIAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Step 3/4 · tagent selftest --e2e (16 agent DAG · stub LLM · 0 cost)
Step 4/4 · Artifacts
· workspace/测试用例/testcases_sample.xlsx
· workspace/测试报告/测试报告_*.docx
· workspace/执行日志/bug_drafts.json
· workspace/测试报告/bug_drafts.json

✓ demo done
```
Expand Down
4 changes: 2 additions & 2 deletions runtime/orchestrator/adapters/experts.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ def _get_impl_status(name: str, kind: str) -> str:
# Scripts that require CLI args; injected when DAG node provides no inputs.
# Explicit DAG inputs always win; defaults only fill the gap.
SCRIPT_DEFAULT_ARGS: dict[str, dict[str, str]] = {
"generate_report.py": {"data": "workspace/执行日志/_selftest_summary.json"},
"generate_report.py": {"data": "workspace/测试报告/_selftest_summary.json"},
}

# Fixture content materialized on demand when a SCRIPT_DEFAULT_ARGS value points to
# a missing file. Keys are workspace-relative paths.
SCRIPT_FIXTURES: dict[str, dict] = {
"workspace/执行日志/_selftest_summary.json": {
"workspace/测试报告/_selftest_summary.json": {
"project_name": "Test-Agent selftest fixture",
"version": "0.0.0-selftest",
"environment": "ci",
Expand Down
4 changes: 2 additions & 2 deletions runtime/orchestrator/skills/pentest_coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def user_prompt(self, ctx: RunnerContext) -> str:
' "tagent_yml_scope_required": true,\n'
' "target_in_scope_required": true,\n'
' "non_prod_required": true,\n'
' "evidence_path": "workspace/执行日志/decisions/pentest_{run_id}_authorized.json"\n'
' "evidence_path": "workspace/测试报告/decisions/pentest_{run_id}_authorized.json"\n'
" },\n"
' "phases": [\n'
' {"phase": 1, "name": "recon", "skill": "pentest-recon", "estimated_min": 20, "concurrency": "single", "depends_on": []},\n'
Expand Down Expand Up @@ -101,7 +101,7 @@ def mock_output(self, ctx: RunnerContext) -> dict[str, Any]: # noqa: ARG002
"tagent_yml_scope_required": True,
"target_in_scope_required": True,
"non_prod_required": True,
"evidence_path": "workspace/执行日志/decisions/pentest_selftest-20260516-000001_authorized.json",
"evidence_path": "workspace/测试报告/decisions/pentest_selftest-20260516-000001_authorized.json",
},
"phases": [
{
Expand Down
4 changes: 2 additions & 2 deletions scripts/_demo-commands.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ prompt "ls workspace/执行日志/*.json"
ls workspace/执行日志/*.json 2>/dev/null
sleep 2

prompt "cat workspace/执行日志/decisions/final_verdict_*.json | head -10"
cat workspace/执行日志/decisions/final_verdict_*.json 2>/dev/null | head -12
prompt "cat workspace/测试报告/decisions/final_verdict_*.json | head -10"
cat workspace/测试报告/decisions/final_verdict_*.json 2>/dev/null | head -12
sleep 4

# CTA
Expand Down
2 changes: 1 addition & 1 deletion skills/agent-introspection-debugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ SKILL_IMPL_STATUS: production

| 维 | 工具 |
|----|------|
| **决策回放** | `workspace/执行日志/decisions/` JSON 时间序 |
| **决策回放** | `workspace/测试报告/decisions/` JSON 时间序 |
| **工具调用** | OTel span(`runtime/observability/otel.py`)+ Loguru |
| **token 消耗** | LLM provider header + LiteLLM 记账 |
| **上下文** | prompt 长度 + 截断点 + 主-子 session 隔离审查 |
Expand Down
2 changes: 1 addition & 1 deletion skills/pentest-coordinator.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ SKILL_IMPL_STATUS: production
1. 读 `tagent.yml`:`pentest.authorized: true` + `pentest.scope: [list]` **必须显式**;否则拒绝(§24 safe-by-default)
2. `target` 必须在 `scope` 内;不在 → 拒绝
3. `prod` 环境 → 拒绝;只允许 staging/sandbox/dev
4. 落 `workspace/执行日志/decisions/pentest_{run_id}_authorized.json` 记授权来源
4. 落 `workspace/测试报告/decisions/pentest_{run_id}_authorized.json` 记授权来源

## 流程(5 阶段并发)

Expand Down
2 changes: 1 addition & 1 deletion skills/python-script-gen.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,5 +206,5 @@ $env:HEADLESS="false"; pytest workspace/自动化脚本/python/tests/test_p0_smo

# 生成 Allure 报告
pytest workspace/自动化脚本/python/tests/ \
--alluredir=workspace/执行日志/allure-results -v
--alluredir=workspace/测试报告/allure-results -v
```
4 changes: 2 additions & 2 deletions skills/smoke-test.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pytest workspace/自动化脚本/python/ \
-v -m "p0" \
--timeout=60 \
-n 2 \
--alluredir=workspace/执行日志/allure-results \
--alluredir=workspace/测试报告/allure-results \
--junitxml=workspace/执行日志/smoke-results.xml \
--tb=short \
--no-header
Expand All @@ -75,7 +75,7 @@ python -m utils.ci_quality_gate \
### 阶段6:报告生成(1 分钟,缓冲)

```bash
allure generate workspace/执行日志/allure-results \
allure generate workspace/测试报告/allure-results \
--output workspace/执行日志/allure-report \
--clean
```
Expand Down
Loading
Loading