Skip to main content

test-analyzer

Analyze test failures from CTRF reports using jq for deterministic parsing

معلومات المصدر

المستودع
lefant/agent-skills
آخر نشاط في المصدر
٤ فبراير ٢٠٢٦ في ١٠:٢٨
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
4 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
test-analyzer
description
Analyze test failures from CTRF reports using jq for deterministic parsing
invocationPattern
when user asks to analyze test failures, investigate failing tests, or understand test patterns
# Test Analyzer Skill ## Purpose Analyze CTRF test reports to identify failure patterns, suggest fixes, and provide insights into test health. Uses deterministic jq parsing for efficient, token-friendly analysis. ## When to Use Call this skill when: - Tests have failed and user wants analysis - User asks "what tests failed?", "analyze test failures", or "why did tests fail?" - User wants to understand test failure patterns or trends - User asks about slow tests, flaky tests, or test coverage ## Quick Reference **Using ctrf-utils.sh:** ```bash ctrf-utils.sh summary <file> # Show pass/fail summary ctrf-utils.sh failures <file...> # List failed test names ctrf-utils.sh failures-detail <file> # Show failures with error messages ctrf-utils.sh flaky <file> # Show tests with retry attempts ctrf-utils.sh slowest <N> <file> # Show N slowest tests ``` **Direct jq commands:** ```bash jq '.results.summary' report.ctrf.json jq -r '.results.tests[] | select(.status == "failed") | .name' report.ctrf.json ``` ## CTRF Schema Overview CTRF reports have this structure: ```json { "results": { "tool": { "name": "vitest" }, "summary": { "tests": 50, "passed": 48, "failed": 2, "skipped": 0 }, "tests": [ { "name": "should validate user input", "status": "failed", "duration": 156, "suite": "UserForm", "message": "Expected true, received false", "filePath": "src/components/UserForm.test.ts", "line": 23 } ] } } ``` **Required fields per test:** `name`, `status`, `duration` **Full schema:** [ctrf-schema.json](./ctrf-schema.json) ## Essential jq Examples (~10 most common) ### 1. Summary statistics ```bash jq '.results.summary' /workspace/artifacts/test/vitest.ctrf.json ``` ### 2. One-line summary ```bash jq -r '.results.summary | "Tests: \(.tests) | Passed: \(.passed) | Failed: \(.failed)"' /workspace/artifacts/test/vitest.ctrf.json ``` ### 3. List failed test names ```bash jq -r '.results.tests[] | select(.status == "failed") | .name' /workspace/artifacts/test/*.ctrf.json ``` ### 4. Failed tests with error messages ```bash jq -r '.results.tests[] | select(.status == "failed") | "❌ \(.name): \(.message // "No message")"' /workspace/artifacts/test/*.ctrf.json ``` ### 5. Group failures by error pattern ```bash jq '[.results.tests[] | select(.status == "failed")] | group_by(.message) | map({error: .[0].message, count: length, tests: map(.name)}) | sort_by(.count) | reverse' /workspace/artifacts/test/*.ctrf.json ``` ### 6. Slowest 10 tests ```bash jq '.results.tests | sort_by(.duration) | reverse | limit(10; .[]) | {name, duration}' /workspace/artifacts/test/vitest.ctrf.json ``` ### 7. Flaky tests (with retries) ```bash jq -r '.results.tests[] | select(.retries > 0 or .flaky == true) | "⚠️ \(.name) (retries: \(.retries // 0))"' /workspace/artifacts/test/*.ctrf.json ``` ### 8. Extract file paths for failed tests ```bash jq -r '[.results.tests[] | select(.status == "failed") | .filePath] | unique | .[]' /workspace/artifacts/test/vitest.ctrf.json ``` ### 9. Cross-project failure summary ```bash jq -s '{vitest: .[0].results.summary.failed, pytest: .[1].results.summary.failed, total: ((.[0].results.summary.failed // 0) + (.[1].results.summary.failed // 0))}' /workspace/artifacts/test/vitest.ctrf.json /workspace/artifacts/test/pytest.ctrf.json ``` ### 10. AI-friendly compact summary ```bash jq -c '{summary: .results.summary, failures: [.results.tests[] | select(.status == "failed") | {name, suite, message, file: "\(.filePath):\(.line)"}]}' /workspace/artifacts/test/*.ctrf.json ``` ## More jq Examples For comprehensive examples (24+), see: [jq-examples-comprehensive.md](./jq-examples-comprehensive.md) ## Scripts Reference Implementation scripts: - [ctrf-utils.sh](./ctrf-utils.sh) - CTRF utilities for deterministic parsing (used by skill) - [references/run-silent.sh](./references/run-silent.sh) - Silent-on-success wrapper pattern (reference) ## Research Background Context and research behind this approach: - [references/2026-01-15-context-efficient-backpressure-blogpost.md](./references/2026-01-15-context-efficient-backpressure-blogpost.md) - [references/2026-01-15-test-output-strategies-ai-agents-claude.md](./references/2026-01-15-test-output-strategies-ai-agents-claude.md) - [references/2026-01-15-test-output-strategies-ai-agents-gemini.md](./references/2026-01-15-test-output-strategies-ai-agents-gemini.md) - [references/2026-01-15-research-test-output-summarization-chatgpt.md](./references/2026-01-15-research-test-output-summarization-chatgpt.md) ## Skill Behavior When invoked: 1. **Locate CTRF reports** (common locations: `artifacts/test/`, `test-results/`, project root) 2. **Get summary:** ```bash jq -r '.results.summary | "Tests: \(.tests) | Passed: \(.passed) | Failed: \(.failed)"' *.ctrf.json ``` 3. **If failures exist, list them:** ```bash jq -r '.results.tests[] | select(.status == "failed") | "❌ \(.name): \(.message // "No message")"' *.ctrf.json ``` 4. **Analyze patterns** (group similar errors): ```bash jq '[.results.tests[] | select(.status == "failed")] | group_by(.message) | map({error: .[0].message, count: length})' *.ctrf.json ``` 5. **Read source files for failed tests** (extract file paths with jq, then read) 6. **Suggest fixes based on patterns** (group similar errors, identify root causes)
عرض على GitHub