Pytester

SkillDev tools

Guides your agent to write and run isolated pytest plugin tests using pytester.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Pytester skill

About this capability

Write and run isolated pytester-based plugin tests.

What this skill tells your AI

The instructions your AI receives, as published by ethereum/execution-specs in .agents/skills/pytester/SKILL.md and read by ahel’s review.

Guide for pytester-based plugin/CLI tests. Run before writing or modifying these tests.

Which execution mode to use

  • runpytest() — default. In-process, fast, full RunResult API (assert_outcomes(), fnmatch_lines()).
  • runpytest_subprocess() — use only when in-process causes state leakage (Pydantic cache pollution, global mutation in pytest_configure). Same RunResult API.
  • Raw subprocess.run() — never use alongside pytester. Use runpytest_subprocess() instead.

Subprocess isolation masks bugs rather than fixing them. Prefer fixing the root cause and use subprocess as defense-in-depth.

Expected inner failures

runpytest_subprocess() replays inner output to outer stdout (by design). Suppress with capsys.readouterr():

def test_expected_failure(pytester: Any, capsys: Any, pytestconfig: Any) -> None:
    result = pytester.runpytest_subprocess(...)
    capsys.readouterr()  # suppress inner failure bleed
    assert result.ret != 0
    output = "\n".join(result.outlines + result.errlines)
    # conditional print for -s debugging
    if pytestconfig.getoption("capture") == "no":
        with capsys.disabled():
            print(output)

RunResult API

Prefer assert_outcomes() and fnmatch_lines() over manual any(... in line ...) — better failure messages.

  • result.ret — exit code
  • result.outlines / result.errlines — line lists
  • result.assert_outcomes(passed=N, failed=N)
  • result.stdout.fnmatch_lines(["*pattern*"])

Signals

GitHub stars
1k
Forks
505
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
pytester
Source
github.com/ethereum/execution-specs