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.
79
99%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
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.