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…
Write high-quality BDD pytest tests for the ArduPilot Methodic Configurator.
$ npx skills add ArduPilot/MethodicConfigurator --skill pytest-testing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ArduPilot/MethodicConfigurator pytest-testing --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/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/pytest-testing .claude/skills/pytest-testing && 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 "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .claude/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testingType 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 ArduPilot/MethodicConfigurator --skill pytest-testing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ArduPilot/MethodicConfigurator pytest-testing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/pytest-testing .agents/skills/pytest-testing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .agents/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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 ArduPilot/MethodicConfigurator --skill pytest-testing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ArduPilot/MethodicConfigurator pytest-testing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/pytest-testing .cursor/skills/pytest-testing && 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 "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .cursor/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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/ArduPilot/MethodicConfigurator.git --path .github/skills/pytest-testing--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 ArduPilot/MethodicConfigurator --skill pytest-testing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ArduPilot/MethodicConfigurator pytest-testing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/pytest-testing .gemini/skills/pytest-testing && 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 "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .gemini/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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 ArduPilot/MethodicConfigurator pytest-testingInstalls 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 ArduPilot/MethodicConfigurator --skill pytest-testing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/pytest-testing .github/skills/pytest-testing && 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 "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .github/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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 ArduPilot/MethodicConfigurator --skill pytest-testing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ArduPilot/MethodicConfigurator pytest-testing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ArduPilot/MethodicConfigurator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/pytest-testing .opencode/skills/pytest-testing && 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 "pytest-testing" agent skill from https://github.com/ArduPilot/MethodicConfigurator/tree/master/.github/skills/pytest-testing into .opencode/skills/pytest-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pytest-testing", 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.
pytest-testingWrite high-quality BDD pytest tests for the ArduPilot Methodic Configurator.
Pytest Testing is an agent skill from ArduPilot/MethodicConfigurator. Write high-quality BDD pytest tests for the ArduPilot Methodic Configurator. Use when writing new unit tests, creating test fixtures, applying Given-When-Then pattern, testing tkinter frontends, or following the minimal-mocking strategy for backend and business logic.
Its SKILL.md is about 3.5k 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. The repository describes itself as: A clear ArduPilot configuration sequence. The licence is GPL-3.0.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1a6392c. 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.
Shell commands in SKILL.md call:
pytestruffgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
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.
Pytest Testing loads about 3.5k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 688 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 ArduPilot/MethodicConfigurator at commit 1a6392c, republished under its GPL-3.0 licence (© ArduPilot). 688 words, ~3,542 tokens.
.claude/skills/pytest-testing/SKILL.md (or your agent's skills folder).Note: This is a comprehensive developer documentation file. For GitHub Copilot repository instructions, see
.github/copilot-instructions.md.
This document provides comprehensive guidelines for writing high-quality, behavior-driven pytest tests for the ArduPilot Methodic Configurator project. These guidelines ensure consistency, maintainability, and comprehensive test coverage while following industry best practices.
test_user_can_select_template_by_double_clickingfunction, class, module, session)All tests MUST follow this structure:
def test_descriptive_behavior_name(self, fixture_name) -> None:
"""
Brief summary of what the test validates.
GIVEN: Initial system state and preconditions
WHEN: The action or event being tested
THEN: Expected outcomes and assertions
"""
# Arrange (Given): Set up test data and mocks
# Act (When): Execute the behavior being tested
# Assert (Then): Verify expected outcomesCreate reusable fixtures that eliminate code duplication:
@pytest.fixture
def mock_vehicle_provider() -> MagicMock:
"""Fixture providing a mock vehicle components provider with realistic test data."""
provider = MagicMock()
# Create properly structured mock data matching real object interfaces
template_1 = MagicMock()
template_1.attributes.return_value = ["name", "fc", "gnss"]
template_1.name = "QuadCopter X"
template_1.fc = "Pixhawk 6C"
template_1.gnss = "Here3+"
provider.get_vehicle_components_overviews.return_value = {
"Copter/QuadX": template_1,
}
return provider
@pytest.fixture
def configured_window(mock_vehicle_provider) -> ComponentWindow:
"""Fixture providing a properly configured window for behavior testing."""
with (
patch("tkinter.Toplevel"),
patch.object(BaseWindow, "__init__", return_value=None),
# Only patch what's necessary for the test
):
window = ComponentWindow(vehicle_components_provider=mock_vehicle_provider)
window.root = MagicMock()
return windowclass TestUserWorkflow:
"""Test complete user workflows and interactions."""
def test_user_can_complete_primary_task(self, configured_window) -> None:
"""
User can successfully complete the primary workflow.
GIVEN: A user opens the application
WHEN: They follow the standard workflow
THEN: They should achieve their goal without errors
"""
# Implementationtest_user_can_select_template_by_double_clicking# Good - Tests behavior
assert window.selected_template == "Copter/QuadX"
assert window.close_window.called_once()
# Bad - Tests implementation
assert mock_method.call_count == 1Only mock what is absolutely necessary:
# Good - Minimal mocking
def test_template_selection(self, template_window) -> None:
template_window.tree.selection.return_value = ["item1"]
template_window._on_selection_change(mock_event)
assert template_window.selected_template == "expected_value"
# Bad - Over-mocking
def test_template_selection(self) -> None:
with patch("tkinter.Tk"), \
patch("module.Class1"), \
patch("module.Class2"), \
patch("module.method1"), \
patch("module.method2"):
# Test lost in mocking complexity# Use template_overview_window_setup fixture for complex UI mocking
def test_ui_behavior(self, template_overview_window_setup) -> None:
"""Test UI behavior without full window creation."""
# Use template_window fixture for component testing
def test_component_behavior(self, template_window) -> None:
"""Test component behavior with configured window."""# Use minimal mocking for business logic
def test_business_logic(self, mock_data_provider) -> None:
"""Test core logic with realistic data."""
# Mock only external dependencies
@patch("module.external_api_call")
def test_integration_behavior(self, mock_api) -> None:
"""Test integration points."""Tkinter is extremely buggy and unstable on macOS GitHub Action runners.
Without a physical display, forcing UI updates will cause Segmentation
Faults (AppKit/HIToolbox crashes) which instantly kill the MacOS Pytest runner.
To prevent this, please follow these rules:
.update(): It forces a full event loop evaluation and will crash macOS.
Always use .update_idletasks() instead.@pytest.fixture
def safe_window_fixture(tk_root) -> Generator[MyWindow, None, None]:
with (
# Prevent Tkinter DPI scaling calculations from crashing macOS
patch.object(tk.Toplevel, "winfo_fpixels", side_effect=tk.TclError("no display")),
# Block macOS C-level screen rendering universally
patch("tkinter.Misc.update"),
patch("tkinter.Misc.update_idletasks"),
patch("tkinter.Misc.wait_visibility"),
patch("tkinter.Misc.wait_window"),
):
window = MyWindow(tk_root)
# Follow Point 2
yield window
- GUI Tests (gui_*.py): Any test simulating physical interaction (e.g., PyAutoGUI) must
explicitly load the CI environment setup at the very top of the file:
from tests.conftest import gui_test_environment # noqa: F401 # pylint: disable=unused-import
pytestmark = pytest.mark.gui
## 📋 Test Categories
### Required Test Types
1. **User Workflow Tests** - Complete user journeys
2. **Component Behavior Tests** - Individual component functionality
3. **Error Handling Tests** - Graceful failure scenarios
4. **Integration Tests** - Component interaction validation
5. **Edge Case Tests** - Boundary conditions and unusual inputs
### Test Organization
Test files follow specific naming conventions to clearly indicate their purpose and scope:
```text
tests/
├── test_frontend_tkinter_component.py # BDD UI component unit tests
├── test_backend_logic.py # BDD Business logic unit tests
├── gui_*.py # pyautogui GUI-focused tests (prefixed with gui_)
├── integration_*.py # End-to-end integration tests (prefixed with integration_)
├── acceptance_*.py # Acceptance tests (prefixed with acceptance_)
├── unit_*.py # Low-level unit tests for coverage purposes (prefixed with unit_)
└── conftest.py # Shared fixturesclass TestTemplateSelection:
"""Test user template selection workflows."""
def test_user_can_select_template_by_double_clicking(self, template_window) -> None:
"""
User can select a vehicle template by double-clicking on the tree item.
GIVEN: A user views available vehicle templates
WHEN: They double-click on a specific template row
THEN: The template should be selected and stored
AND: The window should close automatically
"""
# Arrange: Configure template selection behavior
template_window.tree.identify_row.return_value = "template_item"
template_window.tree.item.return_value = {"text": "Copter/QuadX"}
# Act: User double-clicks on template
mock_event = MagicMock(y=100)
template_window._on_row_double_click(mock_event)
# Assert: Template selected and workflow completed
template_window.program_settings_provider.store_template_dir.assert_called_once_with("Copter/QuadX")
template_window.root.destroy.assert_called_once()
def test_user_sees_visual_feedback_during_selection(self, template_window) -> None:
"""
User receives immediate visual feedback when selecting templates.
GIVEN: A user is browsing available templates
WHEN: They click on a template row
THEN: The corresponding vehicle image should be displayed immediately
"""
# Arrange: Set up selection behavior
template_window.tree.selection.return_value = ["selected_item"]
template_window.tree.item.return_value = {"text": "Plane/FixedWing"}
with patch.object(template_window, "_display_vehicle_image") as mock_display:
# Act: User selects template
mock_event = MagicMock()
template_window._on_row_selection_change(mock_event)
template_window._update_selection() # Simulate callback
# Assert: Visual feedback provided
mock_display.assert_called_once_with("Plane/FixedWing")pytest tests/ -vpytest --cov=ardupilot_methodic_configurator --cov-report=term-missingruff formatruff check --fixmypypyrightpylint $(git ls-files '*.py')On Linux systems where the normal display is unavailable, run pytest through the project virtual environment and Xvfb. This is required by GUI-dependent fixtures such as PyAutoGUI:
# Run non-SITL tests with the local virtual environment and a virtual display
PATH="$PWD/.venv/bin:$PATH" xvfb-run -a python -m pytest tests/ -v -m "not sitl and not integration"# Run all tests with verbose output
pytest tests/ -v
# Run tests with coverage reporting
pytest tests/ --cov=ardupilot_methodic_configurator --cov-report=html
# Run specific test file
pytest tests/test_frontend_tkinter_template_overview.py -v
# Run tests matching pattern
pytest tests/ -k "test_user" -v
# Run tests with performance timing
pytest tests/ --durations=10# Run with detailed output
pytest tests/test_file.py::test_method -v -s
# Run with pdb debugging
pytest tests/test_file.py::test_method --pdb
# Run with custom markers
pytest tests/ -m "slow" -vRemember: Write tests that make the codebase more maintainable, not just achieve coverage metrics.
© ArduPilot, GPL-3.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 .github/skills/pytest-testing of ArduPilot/MethodicConfigurator.
Open the folder on GitHubat commit 1a6392c
Pytest Testing 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 |
|---|---|---|---|---|---|---|
| Pytest Testing this skillArduPilot/MethodicConfigurator | 163 | — | ~3.5k | Automated safety check: Pass | GPL-3.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 | |
| Test GuardamElnagdy/guard-skills | 1.3k | 2 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Fla Optimization Loopfla-org/flash-linear-attention | 5.8k | — | ~2.6k | Automated safety check: Pass | MIT | |
| Pytest Runnersaleor/saleor | 23k | — | ~251 | Automated safety check: Pass | BSD-3-Clause |
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.
amElnagdy/guard-skills
Reviews newly written or edited tests against nine rules that cut test bloat, such as mock-heavy checks and near-duplicate cases, before they are committed.
fla-org/flash-linear-attention
Disciplined, reproducible loop for making an FLA kernel faster (Triton, Gluon, TileLang, CuTe) without ever breaking or gaming correctness.
saleor/saleor
Run pytest tests with automatic virtual environment activation. Use this skill whenever running tests, executing pytest, or when asked to "run tests", "test…
oldrev/edgelinkd
Port a Node-RED node into EdgeLinkd the way this repo does it: implement the node in Rust under crates/core/src/runtime/nodes, mirror Node-RED's mocha spec as pytest tests under tests/, register the…
ArduPilot/MethodicConfigurator
Update existing GUI translations using AI assistance. An agent skill from ArduPilot/MethodicConfigurator.
ArduPilot/MethodicConfigurator
Add a new translation language to the application. An agent skill from ArduPilot/MethodicConfigurator.
ArduPilot/MethodicConfigurator
Validate and update ARCHITECTUREn.md files against actual source code implementation.
ArduPilot/MethodicConfigurator
Analyze the codebase structure and count lines of code by category using cloc.
ArduPilot/MethodicConfigurator
Add, delete, or re-order configuration steps in configurationsteps.json.
ArduPilot/MethodicConfigurator
Set up and run SITL integration tests for backendflightcontroller.py.
Works with
Categories
Write high-quality BDD pytest tests for the ArduPilot Methodic Configurator. Pytest Testing is an agent skill from ArduPilot/MethodicConfigurator. Write high-quality BDD pytest tests for the ArduPilot Methodic Configurator.
Pytest Testing fits situations like: writing new unit tests; creating test fixtures; applying Given-When-Then pattern; testing tkinter frontends.
Run `npx skills add ArduPilot/MethodicConfigurator --skill pytest-testing -a claude-code`. Or copy the skill folder (.github/skills/pytest-testing in ArduPilot/MethodicConfigurator) into .claude/skills/pytest-testing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ArduPilot/MethodicConfigurator --skill pytest-testing -a codex`. Or copy the skill folder (.github/skills/pytest-testing in ArduPilot/MethodicConfigurator) into .agents/skills/pytest-testing 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 ArduPilot/MethodicConfigurator --skill pytest-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pytest-testing, .gemini/skills/pytest-testing, .github/skills/pytest-testing and .opencode/skills/pytest-testing in your project.
Going by SKILL.md and its folder, Pytest Testing needs the command-line tools its instructions call (pytest, ruff and git). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Pytest Testing is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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 Pytest Testing: Adk Verify Snippets (google/adk-python, 22k stars), Hermetic Python Unit Tests (dimensionalOS/dimos, 4.6k stars), Test Guard (amElnagdy/guard-skills, 1.3k stars) and Fla Optimization Loop (fla-org/flash-linear-attention, 5.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ArduPilot (a GitHub organization) maintains it in ArduPilot/MethodicConfigurator, which has 163 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 6, 2026.
Source: ArduPilot/MethodicConfigurator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.