Adk Verify Snippets
google/adk-python
Checks that every Python code block in a Markdown file actually compiles and runs, by extracting each block to a temporary file, executing it in an isolated subprocess, and writing a pass/fail…
Use as a supporting skill when the test level is known and the implementation should use pytest, fixtures, parametrization, mocks, dirty-equals, pytest-httpx, coverage, benchmark, or Allure
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dzhalaevd/Donatello testing-pytest --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/testing-pytest .claude/skills/testing-pytest && rm -rf skills-srcUse ~/.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/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .claude/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytestType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dzhalaevd/Donatello testing-pytest --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/testing-pytest .agents/skills/testing-pytest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .agents/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dzhalaevd/Donatello testing-pytest --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/testing-pytest .cursor/skills/testing-pytest && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .cursor/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dzhalaevd/Donatello.git --path .agents/skills/testing-pytest--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dzhalaevd/Donatello testing-pytest --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/testing-pytest .gemini/skills/testing-pytest && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .gemini/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dzhalaevd/Donatello testing-pytestInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/testing-pytest .github/skills/testing-pytest && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .github/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dzhalaevd/Donatello --skill testing-pytest -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dzhalaevd/Donatello testing-pytest --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhalaevd/Donatello.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/testing-pytest .opencode/skills/testing-pytest && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "testing-pytest" agent skill from https://github.com/dzhalaevd/Donatello/tree/main/.agents/skills/testing-pytest into .opencode/skills/testing-pytest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-pytest", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
testing-pytestUse as a supporting skill when the test level is known and the implementation should use pytest, fixtures, parametrization, mocks, dirty-equals, pytest-httpx, coverage, benchmark, or Allure
Testing Pytest is an agent skill from dzhalaevd/Donatello. Use as a supporting skill when the test level is known and the implementation should use pytest, fixtures, parametrization, mocks, dirty-equals, pytest-httpx, coverage, benchmark, or Allure
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Unit testing. It works with pytest and Python. The repository describes itself as: Make Dating Great Again. An open source dating platform. The licence is Apache-2.0.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b57816e. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python and toml).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Testing Pytest loads about 2.3k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 652 words of instructions outside code blocks.
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.
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.
The full file from dzhalaevd/Donatello at commit b57816e, republished under its Apache-2.0 licence (© dzhalaevd). 652 words, ~2,304 tokens.
.claude/skills/testing-pytest/SKILL.md (or your agent's skills folder).Guide to concrete pytest implementation for backend services.
Use this as a supporting/tooling skill after the lead testing skill is known:
unit-testing leads isolated Python behavior;integration-testing leads database, repository, transaction, API, and multi-component behavior;concurrency_fuzzing_testing leads scheduler/interleaving/race-condition behavior;testing-test-strategy leads broad test planning;test-driven-development leads the test-first workflow.If the user simply asks for "pytest tests" and the level is unclear, first infer or state the lead level, then use this skill for pytest-specific syntax and fixtures.
Write tests using AAA:
def test_create_user_fails_when_email_already_exists(client: Client) -> None:
# Arrange
client.post("/api/users", json={"name": "John", "email": "john@example.com"})
# Act
response = client.post(
"/api/users",
json={"name": "John2", "email": "john@example.com"},
)
# Assert
assert response.status_code == 409
assert "already exists" in response.json()["message"].lower()Rules:
Act -> Assert -> Act -> Assert unless it is one coherent scenario;if inside tests;Name tests in domain language.
Good:
def test_create_user_fails_when_email_already_exists() -> None: ...Bad:
def test_create_user_409_case_2() -> None: ...Prefer clarity over a rigid naming scheme.
Mock external uncontrolled dependencies:
Do not mock by default:
Mocking internal implementation often makes tests brittle.
When creating mocks, prefer specs:
from unittest.mock import Mock, create_autospec
email_sender_mock = Mock(spec=EmailSender)
repository_mock = create_autospec(UserRepository)Specs catch typos, wrong attributes, bad signatures, and contract drift.
Avoid asserting internals:
def test_user_creation_internals(client, user_repository_mock, db_session) -> None:
response = client.post("/api/users", json={"name": "John", "email": "john@example.com"})
assert response.status_code == 201
assert db_session.execute.call_count == 2
user_repository_mock.create.assert_called_once()Prefer public effects:
from dirty_equals import IsDatetime, IsInt
def test_create_user_successfully(client, email_service_mock) -> None:
email_service_mock.send_welcome_email.return_value = True
response = client.post(
"/api/users",
json={"name": "John", "email": "john@example.com"},
)
assert response.status_code == 201
assert response.json() == {
"id": IsInt,
"name": "John",
"email": "john@example.com",
"created_at": IsDatetime,
"updated_at": IsDatetime,
}
email_service_mock.send_welcome_email.assert_called_once()In tests, readability matters more than removing every duplicate line.
Prefer DAMP: Descriptive And Meaningful Phrases.
Small duplication is acceptable when it makes the scenario obvious. Do not build complex helper classes or factories that hide the business meaning.
A helper is useful when it is:
Each test should:
Bad:
created_user_id = None
def test_create_user(client) -> None:
global created_user_id
created_user_id = client.post("/api/users", json={...}).json()["id"]
def test_get_user(client) -> None:
response = client.get(f"/api/users/{created_user_id}")
assert response.status_code == 200Good:
def test_get_user(client) -> None:
create_response = client.post(
"/api/users",
json={"name": "John", "email": "john@example.com"},
)
user_id = create_response.json()["id"]
response = client.get(f"/api/users/{user_id}")
assert response.status_code == 200Use fixtures for infrastructure and repeated preparation:
Rules:
Typed factory example:
from collections.abc import Callable
from dataclasses import dataclass
@dataclass(slots=True)
class User:
id: int | None
name: str
email: str
UserFactory = Callable[..., User]Use pytest.mark.parametrize for meaningful scenarios:
import pytest
@pytest.mark.parametrize(
("email", "expected_status"),
[
("john@example.com", 201),
("invalid-email", 422),
("", 422),
],
)
def test_create_user_email_validation(client, email: str, expected_status: int) -> None:
response = client.post("/api/users", json={"name": "John", "email": email})
assert response.status_code == expected_statusAvoid combinatorial explosions. Parametrize important equivalence classes, not every possible combination.
Do not stop at happy paths. Check:
Use dirty-equals for complex structures with dynamic values:
from dirty_equals import IsDatetime, IsInt, IsRegex
assert response.json() == {
"id": IsInt,
"email": "john@example.com",
"created_at": IsDatetime,
"request_id": IsRegex(r"^[a-f0-9-]{36}$"),
}This is clearer than many tiny asserts for datetime formats, regexes, and types.
For httpx code, use pytest-httpx:
def test_get_user_from_external_api(httpx_mock) -> None:
httpx_mock.add_response(
method="GET",
url="https://api.example.com/users/42",
json={"id": 42, "name": "Ada"},
status_code=200,
)
result = get_user(42)
assert result == {"id": 42, "name": "Ada"}For a large external API, create a thin mocker:
class ExternalApiMocker:
def __init__(self, httpx_mock) -> None:
self._httpx_mock = httpx_mock
def add_user_response(self, user_id: int, name: str) -> None:
self._httpx_mock.add_response(
method="GET",
url=f"https://api.example.com/users/{user_id}",
json={"id": user_id, "name": name},
)The wrapper should simplify tests, not become another framework.
For benchmark tests, pytest-benchmark is acceptable.
Recommended config:
[tool.pytest.ini_options]
addopts = "--benchmark-skip"
python_functions = ["test_*", "bench_*"]Normal tests should run in CI by default. Benchmarks should be explicit.
If the project uses Allure, add human-readable titles to important tests:
import allure
@allure.title("User cannot register with an already used email")
def test_create_user_fails_when_email_already_exists(client) -> None: ...Do not duplicate obvious descriptions for every small unit test.
When writing tests:
© dzhalaevd, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/testing-pytest of dzhalaevd/Donatello.
Open the folder on GitHubat commit b57816e
Testing Pytest 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Testing Pytest this skilldzhalaevd/Donatello | 135 | — | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Adk Verify Snippetsgoogle/adk-python | 22k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Hermetic Python Unit TestsdimensionalOS/dimos | 4.6k | — | ~1.4k | Automated safety check: Pass | Custom licence | |
| ONNX Runtime Test Runnermicrosoft/onnxruntime | 22k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Simple Modern Uvjlevy/simple-modern-uv | 301 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Test Coverage Reviewareed1192/finance-news-aggregator | 149 | — | ~2.6k | Automated safety check: Pass | MIT |
google/adk-python
Checks that every Python code block in a Markdown file actually compiles and runs, by extracting each block to a temporary file, executing it in an isolated subprocess, and writing a pass/fail…
dimensionalOS/dimos
Rules for writing, fixing and reviewing pytest unit tests that are hermetic: behavior-focused, deterministic, isolated and cheap to run.
microsoft/onnxruntime
Runs and debugs ONNX Runtime tests: Google Test executables for C++ and unittest or pytest for Python, with filters and build-directory guidance.
jlevy/simple-modern-uv
Start, selectively modernize, fully migrate, or update Python projects using simple-modern-uv practices: uv, ruff, BasedPyright, pytest, GitHub Actions CI, and tag-driven PyPI publishing.
areed1192/finance-news-aggregator
Audit, plan, write, and verify unit tests for Python projects using pytest.
microsoft/onnxruntime
Runs the ONNX Runtime transformers Python tests against a GPU wheel and proves the cuDNN flash attention path was used rather than a silent fallback.
dzhalaevd/Donatello
Guides stable API and interface design. An agent skill from dzhalaevd/Donatello.
dzhalaevd/Donatello
Records decisions and documentation. An agent skill from dzhalaevd/Donatello.
dzhalaevd/Donatello
Automates CI/CD pipeline setup. An agent skill from dzhalaevd/Donatello.
dzhalaevd/Donatello
Manages deprecation and migration. An agent skill from dzhalaevd/Donatello.
dzhalaevd/Donatello
Instruments code so production behavior is visible and diagnosable.
dzhalaevd/Donatello
Prepares production launches. An agent skill from dzhalaevd/Donatello.
Categories
Use as a supporting skill when the test level is known and the implementation should use pytest, fixtures, parametrization, mocks, dirty-equals, pytest-httpx, coverage, benchmark, or Allure. Testing Pytest is an agent skill from dzhalaevd/Donatello.
Testing Pytest fits situations like: tasks that involve Unit testing.
Run `npx skills add dzhalaevd/Donatello --skill testing-pytest -a claude-code`. Or copy the skill folder (.agents/skills/testing-pytest in dzhalaevd/Donatello) into .claude/skills/testing-pytest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dzhalaevd/Donatello --skill testing-pytest -a codex`. Or copy the skill folder (.agents/skills/testing-pytest in dzhalaevd/Donatello) into .agents/skills/testing-pytest in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dzhalaevd/Donatello --skill testing-pytest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/testing-pytest, .gemini/skills/testing-pytest, .github/skills/testing-pytest and .opencode/skills/testing-pytest in your project.
SKILL.md names no scripts, command-line tools or credentials: Testing Pytest is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Testing Pytest is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Testing Pytest: Adk Verify Snippets (google/adk-python, 22k stars), Hermetic Python Unit Tests (dimensionalOS/dimos, 4.6k stars), ONNX Runtime Test Runner (microsoft/onnxruntime, 22k stars) and Simple Modern Uv (jlevy/simple-modern-uv, 301 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dzhalaevd (a GitHub user) maintains it in dzhalaevd/Donatello, which has 135 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 3, 2026.
Source: dzhalaevd/Donatello on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.