Agent skill

Test Environments

by petrkindlmann in petrkindlmann/qa-skills

Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview…

MITAuto-check passedDevOps & Cloud

Install Test Environments

skills CLI
$ npx skills add petrkindlmann/qa-skills --skill test-environments -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install petrkindlmann/qa-skills test-environments --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/test-environments .claude/skills/test-environments && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
test-environments
GitHub stars
165
Token cost
~4.6k tokens
SKILL.md length
2,078 words
Files
3 (incl. references)
Skills in repo
45
Repo updated
First seen
Licence
MIT

At a glance

Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview…

  • Works in 5 steps: How many environments exist today? Local… → Is the app containerized? Check for… → How is test data seeded? Manual SQL,… → …
  • : set up test environment
  • SKILL.md covers Discovery Questions, Core Principles, Environment Strategy and Docker Compose for Testing, plus 7 more sections
  • Calls npm, docker and psql; needs POSTGRES_PASSWORD

What it does

Test Environments is an agent skill from petrkindlmann/qa-skills. Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview environments, production parity, and external-dependency stubbing at the HTTP boundary. Use when: "set up test environment," "docker-compose for tests," "per-PR preview environment," "staging parity," "spin up test infra," "environment tiers." Not for: choosing mock-vs-stub-vs-fake per dependency — use service-virtualization…

Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/docker-compose.md` and `references/stubbing.md`).

It sits in DevOps & Cloud, covering Containers, Test data and fixtures and Integration testing. It works with Docker. The repository describes itself as: 50 QA and test-automation skills for Claude Code, Codex, Cursor, and any Agent Skills Standard runtime. The licence is MIT.

When your agent uses it

  • : set up test environment
  • Docker-compose for tests
  • Per-PR preview environment
  • Spin up test infra

Example prompts

  • “set up test environment,”
  • “docker-compose for tests,”
  • “per-PR preview environment,”
  • “/test-environments”

Requirements

  • Python 3
  • Node.js
  • Docker

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. How many environments exist today? Local dev, CI, staging, preview, production? Map what you have before designing what you need.
  2. Is the app containerized? Check for Dockerfile, docker-compose.yml, or compose.yaml. If yes, multi-stage targets and compose come for…
  3. How is test data seeded? Manual SQL, migration-based, factory libraries, or production snapshots? This decides whether seed scripts are a…
  4. How close is staging to production? Same DB engine, queue, cache, auth provider, orchestration? Each mismatch is a class of bugs staging…
  5. External dependencies: How many third-party APIs does the system call, and are they stubbed in non-prod? Unstubbed third parties are the…

What it can do on your machine

Read from SKILL.md and the folder at commit b3bb61b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • docker
    • psql
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, docker and curl, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • POSTGRES_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Test Environments loads about 4.6k tokens when it runs, and up to ~6.5k if it reads all its reference files. Until then it costs about 184 tokens; SKILL.md has 2,078 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~184
When it runs · the whole SKILL.md, loaded when a task matches
~4.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from petrkindlmann/qa-skills at commit b3bb61b, republished under its MIT licence (© petrkindlmann). 2,078 words, ~4,606 tokens.

Download SKILL.mdSave it as .claude/skills/test-environments/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
test-environments
description
Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview environments, production parity, and external-dependency stubbing at the HTTP boundary. Use when: "set up test environment," "docker-compose for tests," "per-PR preview environment," "staging parity," "spin up test infra," "environment tiers." Not for: choosing mock-vs-stub-vs-fake per dependency — use service-virtualization; factory and fixture data patterns — use test-data-management; pipeline/Actions config — use ci-cd-integration. Related: test-data-management, ci-cd-integration, contract-testing, service-virtualization.
license
MIT
metadata.author
kindlmann
metadata.version
2.0
metadata.category
infrastructure
<objective>
Staging on SQLite passes tests that break on prod Postgres; a shared staging box becomes a
queue where one broken deploy blocks the whole team; an unmocked Stripe call flakes CI at
random. This skill prevents those by designing environment tiers that mirror production where
it matters, isolate per-PR, and stub external dependencies at the HTTP boundary. It delivers a
working `docker compose up` local/CI stack, a parity checklist, and a stubbing strategy keyed
to dependency type.
</objective>

Discovery Questions

Check .agents/qa-project-context.md first — if it exists, use it and skip anything already answered there. Then:

  1. How many environments exist today? Local dev, CI, staging, preview, production? Map what you have before designing what you need.
  2. Is the app containerized? Check for Dockerfile, docker-compose.yml, or compose.yaml. If yes, multi-stage targets and compose come for free; if not, that is the first deliverable.
  3. How is test data seeded? Manual SQL, migration-based, factory libraries, or production snapshots? This decides whether seed scripts are a quick win or a rewrite.
  4. How close is staging to production? Same DB engine, queue, cache, auth provider, orchestration? Each mismatch is a class of bugs staging can never catch.
  5. External dependencies: How many third-party APIs does the system call, and are they stubbed in non-prod? Unstubbed third parties are the top source of CI flake.

Core Principles

1. Staging must mirror production where bugs hide. If staging uses SQLite and production uses PostgreSQL, staging tests prove nothing about prod behavior. Match the database engine and version, the queue system, the cache layer, and the auth provider — those are where environment-specific bugs live.

2. Ephemeral environments beat long-lived ones. A shared staging environment becomes a bottleneck where one broken deploy blocks the entire team. Per-PR preview environments give isolation and parallel testing; keep staging only for final pre-release validation.

3. Deterministic seed data, not production copies. Production snapshots carry PII, stale references, and non-reproducible state. Build seed data from factories that generate consistent, valid, minimal datasets. (For factory patterns, see test-data-management.)

4. Stub external dependencies at the boundary, not deep inside. Third-party APIs are unreliable, rate-limited, and expensive. Stub them at the HTTP boundary with MSW or WireMock — never by mocking internal service classes, which hides integration bugs between your own code.

5. Environment config is code. Every environment difference (URLs, flags, credentials, resource limits) must be version-controlled and reviewable. No manual setup that cannot be reproduced from the repo.


Environment Strategy

Environment Tiers
EnvironmentPurposeDataExternal DepsLifecycle
Local devFast inner loopSeeded fixtures, minimalStubbed (MSW/WireMock)Developer-managed
CIAutomated validationSeeded per-run, ephemeralStubbed or containerizedCreated/destroyed per pipeline
PreviewPR-level review & E2ESeeded from factoriesStubbed or sandboxCreated on PR, destroyed on close
StagingPre-production validationAnonymized production-likeReal integrations (sandbox accounts)Long-lived, regularly reset
ProductionLive usersRealRealPermanent
Local Development

Fast feedback, zero shared state. Developers must be able to run the full stack locally in under two minutes:

bash
docker compose -f docker-compose.test.yml up -d
npm run db:seed
npm run dev

Use Docker Compose for infrastructure deps (database, cache, queue) but run the application natively for fast reload. External APIs are stubbed with MSW handlers loaded in dev mode.

CI Environment

Fully containerized, created fresh per pipeline run, destroyed after. The block below is the services: fragment of a job — nest it under jobs.<id>.services alongside runs-on and steps; on its own it is not a valid workflow file.

yaml
# .github/workflows/test.yml — fragment: nest under jobs.test.services
services:
  postgres:
    image: postgres:18-alpine
    env:
      POSTGRES_DB: testdb
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
    ports: ['5432:5432']
    options: >-
      --health-cmd="pg_isready -U test"
      --health-interval=5s
      --health-timeout=3s
      --health-retries=5
  redis:
    image: redis:8-alpine
    ports: ['6379:6379']
    options: >-
      --health-cmd="redis-cli ping"
      --health-interval=5s
      --health-timeout=3s
      --health-retries=5
Docker Compose vs Testcontainers

Two ways to give tests real infrastructure. Pick by where the lifecycle should live:

  • Docker Compose — declarative stack you bring up before the suite (docker compose up --wait) and tear down after, usually via a trap-guarded script. Best for local dev, a shared CI stack, and E2E where many tests share one set of services.
  • Testcontainers (Node / JVM / Python / Go) — containers spun up from test code and auto-torn-down per suite or per test, with no compose file or trap to maintain. Best for integration tests that need isolated, programmatic infra (a throwaway Postgres per test class). The 2026 default for "ephemeral infra owned by the test," and a strong alternative to hand-rolled compose + trap scripts.

Reach for Compose when humans and many tests share the stack; reach for Testcontainers when each test (or suite) wants its own disposable copy.

Preview Environments (Per-PR)

Each pull request gets its own isolated environment; reviewers click a link and test the exact changes without interfering with other PRs.

Hosting options (2026), pick by stack:

  • Vercel preview deployments — Next.js / static / serverless; per-PR URL automatically.
  • Cloudflare Pages preview — git-integrated, generous free tier.
  • Render / Railway preview environments — full-stack including databases.
  • Northflank, Qovery, Bunnyshell, Uffizzi — full ephemeral-environment platforms (Kubernetes-backed) when previews need the whole stack, not just a frontend.

For each preview, pair the env lifecycle with a database branch (Neon, Supabase, PlanetScale-style): create a branch on PR open, drop it on close. That gives every preview a cheap, instant, isolated DB copy instead of a shared staging DB. (See test-data-management.)

For local-dev parity with CI:

  • Devcontainers (.devcontainer/devcontainer.json) — VS Code, Codespaces, JetBrains. The standard for "everyone gets the same Docker-backed dev env."
  • Tilt (Tiltfile) — Kubernetes-first local dev with hot reload and multi-service orchestration. Pick when staging itself is K8s.

A frontend preview with E2E against the generated URL is a few lines:

yaml
- name: Run E2E against preview
  env:
    BASE_URL: ${{ steps.deploy.outputs.preview-url }}
  run: npx playwright test --project=chromium

A custom Docker preview keyed to a per-PR namespace, auto-torn-down on close:

yaml
- name: Deploy preview
  run: |
    NAMESPACE="pr-${{ github.event.number }}"
    docker compose -f docker-compose.preview.yml -p "$NAMESPACE" up -d
    echo "preview-url=https://${NAMESPACE}.preview.example.com" >> "$GITHUB_OUTPUT"

- name: Teardown preview
  if: github.event.action == 'closed'
  run: |
    NAMESPACE="pr-${{ github.event.number }}"
    docker compose -p "$NAMESPACE" down -v
Staging

Long-lived environment that mirrors production infrastructure. Reset weekly or on-demand to prevent drift:

bash
#!/bin/bash
# scripts/reset-staging.sh
set -euo pipefail

echo "Resetting staging database..."
psql "$STAGING_DATABASE_URL" -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"

echo "Running migrations..."   # migrations MUST recreate extensions + grants (see caveat below)
npm run db:migrate -- --env staging

echo "Seeding anonymized data..."
npm run db:seed -- --env staging --dataset production-anonymized

echo "Verifying staging health..."
curl -sf https://staging.example.com/health || exit 1
echo "Staging reset complete."

Caveat: DROP SCHEMA public CASCADE also drops the schema's default privileges and any installed extensions (uuid-ossp, pgcrypto, …). Your migration pipeline must recreate them (CREATE EXTENSION IF NOT EXISTS …, re-grant defaults) or the migrate step fails. Don't assume a bare CREATE SCHEMA public restores the prior grants — it does not.


Docker Compose for Testing

A production-quality docker-compose.test.yml spins up the full stack (app, Postgres, Redis, a one-shot seed container, Mailpit) for integration and E2E tests. Two details that matter:

  • Health checks gate depends_on. Without a healthcheck + condition: service_healthy, depends_on only waits for the container to start, not for the service to accept connections — tests then race the database and fail with connection errors.
  • Seed is a one-shot container, not a long-running service. It uses depends_on: condition: service_completed_successfully, so the app starts only after seeding exits 0. Teams that model seed as a long-running service get a race where the app boots mid-seed.

See references/docker-compose.md for the full docker-compose.test.yml, the trap-guarded integration test runner, the multi-stage Dockerfile (with the production target), and the MinIO block.

Multi-Stage Dockerfile

One base layer installs deps once; development, test, and seed stages reuse it; and a slim production stage runs prod deps only (npm ci --omit=dev) with build artifacts copied from the test stage. The split keeps test dependencies and source out of the shipped image while giving each environment its own entrypoint. Use npm ci --include=dev in base — the modern flag; --production=false is legacy --omit/--include syntax. Full Dockerfile in references/docker-compose.md.


External Dependency Management

Stubbing Strategy by Dependency Type
Dependency TypeLocal/CI StrategyStaging Strategy
Payment (Stripe)MSW handler returning mock responsesStripe test mode with sk_test_ keys
Email (SendGrid)Mailpit capturing SMTP (web UI on :8025, SMTP on :1025)SendGrid sandbox mode
Auth (Auth0)Local JWT issuer with test keysAuth0 dev tenant
Storage (S3)MinIO container (S3-compatible)Dedicated test bucket with lifecycle policy
Search (Elasticsearch)Testcontainers ElasticsearchDedicated test index with reset script
SMS (Twilio)MSW handlerTwilio test credentials

Avoid: MailHog — unmaintained, last release 2020. Use Mailpit (axllent/mailpit); it is a drop-in on the same ports (1025 SMTP / 8025 UI).

Show full SKILL.md (835 more words)Show less
MSW for HTTP Stubs

Stub external APIs at the HTTP boundary with MSW 2.x: http + HttpResponse from msw, setupServer from msw/node, lifecycle wired through beforeAll/afterEach/afterAll. Set onUnhandledRequest: "error" so an unmocked external call fails the test loudly instead of leaking a real network request. See references/stubbing.md for the Stripe/SendGrid/geocoding handlers and the server lifecycle.

MinIO as an S3 Substitute

Run S3-compatible storage in a container instead of hitting real AWS in local/CI tests. Point the AWS SDK S3Client at it with endpoint, env-var credentials, and forcePathStyle: true (required for MinIO). Compose service + client config in references/docker-compose.md.

Contract Testing as Stub Validation

Stubs drift from reality. Pair every stub with a contract test that verifies the stub matches the real API shape. For details, see contract-testing.


Environment Parity Checklist

Run this when setting up or auditing a non-production environment.

DimensionQuestionRed Flag
Database engineSame engine and version as production?SQLite in test, PostgreSQL in prod
Database schemaSame migration pipeline applied?Manual schema changes in staging
Data shapeSeed data covers all entity states?Only "happy path" records, no edge cases
InfrastructureSame container orchestration?Docker Compose in CI, Kubernetes in prod
NetworkSame internal service topology?Monolith in test, microservices in prod
ConfigEnv vars documented and version-controlled?Undocumented env vars, manual setup
AuthSame auth provider/flow?Bypassed auth in test with hardcoded tokens
Feature flagsSame flag evaluation engine?Hardcoded flags in test, LaunchDarkly in prod
TLS/HTTPSSame certificate handling?HTTP in staging, HTTPS in prod
Timeouts/LimitsSame rate limits, pools, timeouts?Infinite timeouts in test hide perf issues

For factory-based seed data patterns, see test-data-management.


Anti-Patterns

Shared staging as the only test environment. One developer's broken deploy blocks everyone. Use ephemeral per-PR environments for isolation and keep staging for final pre-release validation only.

Production database copies for test data. PII risk, non-reproducible state, massive datasets that slow tests. Build minimal seed data from factories with deterministic values.

Environment-specific code paths. if (process.env.NODE_ENV === "test") { skipAuth(); } means you are not testing the real auth flow. Swap implementations via dependency injection or config, not environment conditionals.

Manual environment setup. If setup needs a 15-step wiki page, it will be wrong within a week. Script everything: docker compose up -d && npm run db:seed should be the only steps.

Stubbing internal services instead of external ones. Stub at the HTTP boundary where your system talks to the outside world. Stubbing internal modules hides integration bugs between your own services.

No health checks in Docker Compose. depends_on without a healthcheck waits only for the container to start, not for the service to be ready — tests race the database and fail with connection errors.

Long-lived preview environments. Previews that persist after merge waste resources and accumulate stale state. Automate teardown on PR close (if: github.event.action == 'closed').


Verification

Run these against the artifacts you produce, smallest check first:

  1. Compose file is valid — docker compose -f docker-compose.test.yml config -q exits 0 (catches YAML and schema errors before you ever pull an image).
  2. Stack comes up healthy — docker compose -f docker-compose.test.yml up -d --wait --wait-timeout 60 exits 0; a non-zero exit means a healthcheck never went green.
  3. Database accepts connections — docker compose exec postgres pg_isready -U test -d testdb reports accepting connections.
  4. Dockerfile builds the production target — docker build --target production -t app:prod . succeeds, and docker run --rm app:prod npm ls --omit=dev --depth=0 shows no dev deps.
  5. Stubs fail loud — run the suite with onUnhandledRequest: "error"; any real outbound call should error the test, not pass silently.

Done When

  • Environment inventory documented (dev, CI, preview, staging, production) with characteristics and access notes per tier.
  • docker compose -f docker-compose.test.yml config -q exits 0 and docker compose up -d --wait brings every service to a passing healthcheck (exit 0).
  • Multi-stage Dockerfile builds the production target with --omit=dev (no dev dependencies in the shipped image).
  • Seed scripts are idempotent (running twice exits 0, no duplicate-key errors) and checked into the repository.
  • External dependencies are stubbed at the HTTP boundary with onUnhandledRequest: "error"; no real third-party credentials in non-prod.
  • Environment parity gaps documented (e.g. SQLite in CI vs PostgreSQL in prod) with mitigations in place or tracked as issues.
  • Preview environments auto-created for PRs and auto-torn-down on close (if: github.event.action == 'closed').

Reference Files (in references/)

  • docker-compose.md — full docker-compose.test.yml (Postgres 18, Redis 8, one-shot seed, Mailpit), the trap-guarded integration test runner, the multi-stage Dockerfile (base/development/test/seed/production), and the MinIO service + S3 client config.
  • stubbing.md — MSW 2.x handlers for Stripe/SendGrid/geocoding and the setupServer lifecycle with onUnhandledRequest: "error".

  • service-virtualization — Decision framework for choosing mock vs stub vs fake vs real per dependency, and WireMock/MSW depth. Go there to decide the stubbing approach; this skill wires the chosen stub into the environment.
  • test-data-management — Factory patterns, synthetic data, database seeding, and DB branching (Neon/Supabase/PlanetScale) for per-PR DB copies.
  • ci-cd-integration — Pipeline config, GitHub Actions services, artifact management, sharding, and self-hosted runners. Go there for the surrounding workflow; this skill defines the services it runs against.
  • contract-testing — Consumer-driven contracts that verify your stubs match real APIs.

© petrkindlmann, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in skills/test-environments of petrkindlmann/qa-skills.

  • SKILL.md
  • references/docker-compose.md
  • references/stubbing.md

Open the folder on GitHubat commit b3bb61b

Compare with similar skills

Test Environments next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Test Environments compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Test Environments this skillpetrkindlmann/qa-skills165—~4.6kAutomated safety check: PassMIT
Cb Build TestBlkLeg/CircuitBreaker201—~1.9kAutomated safety check: PassMIT
Plugin Testapache/skywalking-python219—~2.3kAutomated safety check: PassApache-2.0
Code PatternsAedelon/claude-code-blueprint120—~1.2kAutomated safety check: PassCustom licence
Model Download Devopen-edge-platform/edge-ai-libraries169—~2kAutomated safety check: PassApache-2.0
Senior DevOps Toolkitmaslennikov-ig/claude-code-orchestrator-kit2606 repos~1.1kAutomated safety check: NotesCustom licence

Similar skills

  • Cb Build Test

    BlkLeg/CircuitBreaker

    How Circuit Breaker is built, tested, packaged, and kept secret-safe — the make dev/verify/test targets, the PostgreSQL integration test database and its fixtures, the mono Docker image and native…

    201 GitHub stars~1.9k tokensUpdated 3 days ago
    DevOps & CloudAuto-check passed
  • Plugin Test

    apache/skywalking-python

    Build Docker test images and run SkyWalking Python plugin/unit/e2e tests locally, mirroring the CI pipeline

    219 GitHub stars~2.3k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Code Patterns

    Aedelon/claude-code-blueprint

    Reference patterns for REST APIs, pytest/vitest testing, Docker multi-stage builds, GitHub Actions CI/CD, PostgreSQL, TypeScript generics, Python async, and React Server Components.

    120 GitHub stars~1.2k tokensUpdated 7 mo ago
    DevOps & CloudAuto-check passed
  • Model Download Dev

    open-edge-platform/edge-ai-libraries

    Extend, test, debug, or integrate the Model Download microservice codebase.

    169 GitHub stars~2k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Senior DevOps Toolkit

    maslennikov-ig/claude-code-orchestrator-kit

    Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…

    260 GitHub starsUsed in 6 repos~1.1k tokens
    DevOps & CloudAuto-check: notes
  • GitHub Actions Creator

    FNOSP/FlyNarwhal

    A skill your agent uses when the user wants to create, generate, or set up a GitHub Actions workflow.

    495 GitHub starsUsed in 1 repo~2.4k tokens
    DevOps & CloudAuto-check passed

More from petrkindlmann/qa-skills

All 45 skills in this repo
  • Accessibility Testing

    petrkindlmann/qa-skills

    Test for WCAG 2.2 AA compliance with axe-core + Playwright, keyboard navigation audits, screen reader testing, ARIA pattern validation, and legal compliance mapping (ADA, EAA, Section 508).

    165 GitHub stars~4.5k tokensUpdated 4 mo ago
    Auto-check passed
  • Agentic Browser Testing

    petrkindlmann/qa-skills

    Goal-driven E2E testing where a browser agent (Playwright MCP / computer-use) reads a natural-language goal and explores the app via the accessibility tree to assert outcomes — no pre-written script.

    165 GitHub stars~4.5k tokensUpdated 4 mo ago
    Auto-check passed
  • AI Test Generation

    petrkindlmann/qa-skills

    Use AI to write NEW test code from specs, PRDs, user stories, code diffs, bug reports, or OpenAPI specs.

    165 GitHub stars~4.8k tokensUpdated 4 mo ago
    Auto-check passed
  • API Testing

    petrkindlmann/qa-skills

    Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.

    165 GitHub stars~2.7k tokensUpdated 4 mo ago
    Auto-check passed
  • CI CD Integration

    petrkindlmann/qa-skills

    Design CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills.

    165 GitHub stars~4.8k tokensUpdated 4 mo ago
    Auto-check passed
  • Compliance Testing

    petrkindlmann/qa-skills

    Test for regulatory compliance: GDPR/CMP consent verification, Google Consent Mode v2, Global Privacy Control (GPC), CCPA/US state opt-out, EU AI Act Article 50 transparency, Better Ads Standards…

    165 GitHub stars~4.6k tokensUpdated 4 mo ago
    Auto-check passed

Works with

Questions about Test Environments

What does Test Environments do?

Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview…. Test Environments is an agent skill from petrkindlmann/qa-skills. Design environment strategy for testing across dev, CI, preview, staging, and production — Docker Compose test infrastructure, multi-stage Dockerfiles, seed-data lifecycle, per-PR preview environments, production parity, and external-dependency stubbing at the HTTP boundary.

When should I use Test Environments?

Test Environments fits situations like: : set up test environment; Docker-compose for tests; per-PR preview environment; spin up test infra.

How do I install Test Environments in Claude Code?

Run `npx skills add petrkindlmann/qa-skills --skill test-environments -a claude-code`. Or copy the skill folder (skills/test-environments in petrkindlmann/qa-skills) into .claude/skills/test-environments in your project. Claude Code loads it when a task matches its description.

How do I install Test Environments in Codex?

Run `npx skills add petrkindlmann/qa-skills --skill test-environments -a codex`. Or copy the skill folder (skills/test-environments in petrkindlmann/qa-skills) into .agents/skills/test-environments in your project. Codex loads it when a task matches its description.

Can I use Test Environments in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add petrkindlmann/qa-skills --skill test-environments -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-environments, .gemini/skills/test-environments, .github/skills/test-environments and .opencode/skills/test-environments in your project.

What does Test Environments need to run?

Going by SKILL.md and its folder, Test Environments needs the command-line tools its instructions call (npm, docker, psql and curl) and credentials named POSTGRES_PASSWORD. Our summary lists: Python 3; Node.js; Docker.

Does Test Environments access the network?

SKILL.md contains no URLs. Its commands use npm, docker and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Test Environments safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Test Environments use?

Test Environments is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Test Environments use?

About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.

What are the alternatives to Test Environments?

Skills that share tags, products or a category with Test Environments: Cb Build Test (BlkLeg/CircuitBreaker, 201 stars), Plugin Test (apache/skywalking-python, 219 stars), Code Patterns (Aedelon/claude-code-blueprint, 120 stars) and Model Download Dev (open-edge-platform/edge-ai-libraries, 169 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Test Environments?

petrkindlmann (a GitHub user) maintains it in petrkindlmann/qa-skills, which has 165 GitHub stars. The repository holds 45 skills in this directory. The repository was last updated on June 10, 2026.

Source: petrkindlmann/qa-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.