Build-an-X workflow that takes an SDET from no test suite to a complete framework design in seven steps - inventory the SUT, choose runner + language, directory layout + fixture architecture, object-model decision, test data + mocking wiring, reporting + CI integration, conventions doc + review gates - producing a written framework blueprint (directory tree, fixture list, chosen patterns, CI matrix) plus an implementation order. This is the whole-framework design workflow - not the Step 2 runner-choice decision on its own, not the Step 4 object-model pattern catalog it defers to, and not the scaffolder that generates the harness skeleton once the blueprint exists. Use when designing a test automation framework from scratch or re-architecting one that grew organically.
72
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Deep mechanics for Step 3 of test-framework-blueprint. The blueprint decisions
(which scope, what each fixture provides, whether tests mutate it) live in
SKILL.md; this file carries the framework-specific wiring.
All per the test-fixtures docs:
test.extend(); teardown code follows await use(...)
in the same function, so setup and teardown live together.{ auto: true }: they are "set up for each test/worker, even
when the test does not list them directly."mergeTests(); this is
what makes the fixtures/index.ts single-import convention work.{ option: true }) configured through test.use() per project.If Step 2 chose Python, the same architecture maps onto pytest fixtures. Per
the pytest fixtures how-to,
tests request fixtures by declaring them as arguments; available scopes are
function (the default), class, module, package, and session, where
scope controls destruction (a function-scoped fixture "is destroyed at the
end of the test"; a session-scoped one at the end of the test session).
The fixtures/index.ts merged-export convention becomes conftest.py
(fixtures there are accessible to "tests from multiple test modules in the
directory"), teardown code goes after yield, and { auto: true } becomes
@pytest.fixture(autouse=True). Playwright's worker scope has no direct
pytest twin; session scope plus per-worker IDs (e.g. pytest-xdist worker
id) fills the same database-per-worker role.