seed-skills/ci-test-sharding-parallelization/SKILL.md
Teach agents to shard and parallelize Playwright, Jest, and pytest suites in CI to reduce wall-clock time while merging reports reliably.
npx skillsauth add PramodDutta/qaskills CI Test Sharding ParallelizationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a test infrastructure engineer who reduces CI wall-clock time by sharding and parallelizing test suites while preserving deterministic results, useful reports, and clear failure ownership.
Create scripts for each framework.
npm install --save-dev @playwright/test jest jest-junit
python -m venv .venv
. .venv/bin/activate
pip install pytest pytest-xdist pytest-json-report
mkdir -p test-results merged-reports
Use consistent environment variables.
export SHARD_INDEX=1
export SHARD_TOTAL=4
export CI_NODE_INDEX=1
export CI_NODE_TOTAL=4
ci/
sharding/
playwright.yml
jest.yml
pytest.yml
scripts/
run-playwright-shard.sh
run-jest-shard.ts
run-pytest-shard.sh
merge-reports.sh
test-results/
merged-reports/
Use the built-in Playwright shard flag.
#!/usr/bin/env bash
set -euo pipefail
: "${SHARD_INDEX:?SHARD_INDEX is required}"
: "${SHARD_TOTAL:?SHARD_TOTAL is required}"
npx playwright test \
--shard="${SHARD_INDEX}/${SHARD_TOTAL}" \
--reporter=blob \
--output="test-results/playwright-${SHARD_INDEX}"
Merge Playwright blob reports after all shards finish.
#!/usr/bin/env bash
set -euo pipefail
mkdir -p merged-reports/playwright
npx playwright merge-reports --reporter html ./blob-report
Use Jest shard support when available.
// scripts/run-jest-shard.ts
import { spawnSync } from 'node:child_process';
const shardIndex = process.env.SHARD_INDEX || '1';
const shardTotal = process.env.SHARD_TOTAL || '1';
const result = spawnSync(
'npx',
[
'jest',
`--shard=${shardIndex}/${shardTotal}`,
'--runInBand',
'--ci',
'--reporters=default',
'--reporters=jest-junit',
],
{ stdio: 'inherit' },
);
process.exit(result.status ?? 1);
Use xdist for process-level parallelism and CI matrix for sharding.
#!/usr/bin/env bash
set -euo pipefail
PYTEST_WORKERS="${PYTEST_WORKERS:-auto}"
REPORT_FILE="test-results/pytest-${SHARD_INDEX:-1}.json"
pytest tests \
-n "$PYTEST_WORKERS" \
--json-report \
--json-report-file="$REPORT_FILE"
Use matrix jobs for Playwright shards.
name: sharded-tests
on:
pull_request:
jobs:
playwright:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx playwright install --with-deps
- run: bash scripts/run-playwright-shard.sh
env:
SHARD_INDEX: ${{ matrix.shard }}
SHARD_TOTAL: 4
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-blob-${{ matrix.shard }}
path: blob-report
Measure before and after.
| Framework | Sharding Method | Report Merge |
|---|---|---|
| Playwright | --shard=1/4 | Blob report merge |
| Jest | --shard=1/4 | JUnit aggregation |
| pytest | Matrix plus xdist | JSON or JUnit merge |
| Cypress | Dashboard or spec split | Dashboard report |
| Large monorepo | Package filters | Per-package reports |
| Slow E2E | Historical timing split | Custom manifest |
development
Research market rates, build negotiation strategy, and create counter-offer scripts
data-ai
Track different resume versions, maintain master resume, manage tailored versions
testing
Customize resume for specific job postings while maintaining truthfulness
development
Create targeted resume sections optimized for different experience levels and roles