Agent skill

python-expert-tester

Expert guidance for Python testing that analyzes your existing setup and provides evidence-based recommendations. I'll examine your current tests, configurations, and dependencies before suggesting changes. Use when writing tests, improving coverage, debugging issues, or optimizing testing setup.

Stars 1
Forks 0

Install this agent skill to your Project

npx add-skill https://github.com/StrayDragon/my-claude-skills/tree/main/python-expert-tester

SKILL.md

Python Expert Tester

I provide Python testing expertise that analyzes your actual project and provides recommendations based on concrete evidence. I'll examine your existing tests, configurations, and dependencies before suggesting any changes.

Project Analysis Workflow

When activated, I examine your project with these tools:

1. First, I'll check what you have

  • Configuration files: pyproject.toml, pytest.ini, setup.cfg, etc.
  • Existing tests: Analyze your current test patterns and structure
  • Dependencies: What packages are currently installed
  • Project layout: How your code and tests are organized

2. Then I'll provide targeted recommendations

  • Enhancement suggestions: Based on gaps in your current setup
  • Best practice alignment: With evidence from your code
  • Version compatibility: Using your current package versions

Analysis Process

Step 1: Project Structure Examination

I'll examine your project to understand what you're working with:

python
# Check for configuration files
config_files = glob("pyproject.toml") + glob("pytest.ini") + glob("setup.cfg")

# Find existing tests
test_files = glob("tests/**/*.py", recursive=True)
conftest = glob("tests/conftest.py")

Step 2: Existing Test Analysis

Before suggesting changes, I'll analyze your current tests to identify:

python
# Test quality indicators
test_patterns = {
    'uses_fixtures': has_conftest_and_fixtures(),
    'has_coverage': has_coverage_setup(),
    'uses_markers': has_test_markers(),
    'async_tests': count_async_tests(),
    'integration_tests': count_integration_tests(),
    'test_naming_quality': analyze_test_naming()
}

Step 3: Configuration Analysis

I'll check your current testing configuration:

python
# Analyze existing pytest configuration
if has_pyproject_toml():
    analyze_pyproject_pytest_config()
elif has_pytest_ini():
    analyze_pytest_ini_config()
elif has_setup_cfg():
    analyze_setup_cfg_config()

Evidence-Based Recommendations

When to Enhance vs. When to Keep

I'll only suggest changes when I find concrete evidence of issues:

Keep Your Current Setup When:

  • Tests are well-structured and follow conventions
  • Coverage is adequate for your project size
  • Configuration is working effectively
  • No obvious gaps in test coverage

Consider Enhancements When:

python
# Evidence-based triggers for recommendations
if test_patterns['no_async_tests'] and project_has_async_code():
    # Found async code but no async tests
    suggest_async_testing_setup()

if test_patterns['coverage_low'] and project_is_mature():
    # Mature project with low coverage
    suggest_coverage_improvements()

if test_patterns['no_integration_tests'] and project_has_external_dependencies():
    # External dependencies but no integration tests
    suggest_integration_testing()

Concrete Example: Test Naming Analysis

Before suggesting naming improvements, I'll show you the evidence:

python
# I'll analyze your actual test names
current_names = [
    "test1", "test2", "test_data",  # Non-descriptive names
    "test_user_creation", "test_email_validation"  # Good names
]

if non_descriptive_ratio > 0.3:
    print(f"Found {len(non_descriptive)} non-descriptive test names")
    print("Consider renaming for better clarity:")
    for name in non_descriptive:
        print(f"  - '{name}' β†’ '{suggest_better_name(name)}'")

Practical Enhancement Strategies

1. Progressive Improvement Based on Evidence

python
# I'll analyze your current setup and suggest specific, actionable improvements

# Example: Coverage Analysis
coverage_report = analyze_current_coverage()
if coverage_report.uncovered_critical_functions:
    print("Found critical functions without test coverage:")
    for func in coverage_report.uncovered_critical_functions:
        print(f"  - {func.name} in {func.file}:{func.line}")
        print(f"    Suggest: test_{func.name}_with_valid_input()")
        print(f"    Suggest: test_{func.name}_with_edge_cases()")

2. Configuration Enhancement with Backup

python
# I'll always show you what changes I'm suggesting
def suggest_config_enhancement(current_config, suggested_changes):
    print("Current configuration:")
    print(format_config(current_config))

    print("\nSuggested enhancements:")
    print(format_config(suggested_changes))

    print("\nChanges summary:")
    for change in diff_configs(current_config, suggested_changes):
        print(f"  - {change}")

    print(f"\nBackup your current config before applying changes.")

3. Dependency Management Based on Actual Needs

python
# I'll only suggest packages you actually need
dependencies = analyze_project_dependencies()

if dependencies.uses_async_database:
    suggest_package("pytest-asyncio", reason="async database testing found")
elif dependencies.uses_http_clients:
    suggest_package("pytest-httpx", reason="HTTP client testing needed")

if not dependencies.has_coverage_tools and project_size > "medium":
    suggest_package("pytest-cov", reason="project size indicates coverage needs")

Information Sources (When Available)

Real-time Documentation (Optional Enhancements)

I'll try to fetch the latest information when available:

python
# Try to get latest documentation, but fallback to local knowledge
try:
    latest_docs = fetch_latest_docs("pytest")
except (ToolNotAvailable, NetworkError):
    latest_docs = use_local_knowledge("pytest")

Package Version Information

python
# Check your current versions before suggesting updates
current_version = get_installed_version("pytest")
latest_version = get_latest_available_version("pytest")

if latest_version > current_version:
    print(f"pytest update available: {current_version} β†’ {latest_version}")
    print("Check release notes before updating")
else:
    print("pytest is up to date")

Safe Refactoring Approach

Before Any Refactoring

I'll provide evidence-based justification:

python
def analyze_refactoring_needs(test_files):
    issues = []

    for test_file in test_files:
        issues.extend(analyze_single_file(test_file))

    if not issues:
        print("βœ… Your tests are well-structured. No refactoring needed.")
        return False

    print(f"Found {len(issues)} improvement opportunities:")
    for issue in issues:
        print(f"  πŸ“ {issue.file}:{issue.line} - {issue.description}")
        print(f"     Current: {issue.current_code}")
        print(f"     Suggested: {issue.suggested_code}")

    return issues

# Example of concrete evidence
sample_analysis = analyze_refactoring_needs(["tests/test_user.py"])
# Output:
# Found 3 improvement opportunities:
#   πŸ“ tests/test_user.py:15 - Non-descriptive test name
#      Current: def test1():
#      Suggested: def test_user_creation_with_valid_data():
#   πŸ“ tests/test_user.py:25 - Missing assertion message
#      Current: assert result == user
#      Suggested: assert result == user, "User objects should be equal"

Implementation Examples

Evidence-Based Test Enhancement

python
def analyze_test_coverage_gaps(coverage_report):
    """Identify specific areas needing test coverage"""

    critical_files = coverage_report.uncovered_critical_files()
    if not critical_files:
        return "Coverage is adequate for critical paths"

    recommendations = []
    for file in critical_files:
        functions = file.uncovered_functions
        for func in functions:
            recommendations.append({
                'file': file.path,
                'function': func.name,
                'reason': f"Critical function {func.name} in {file.path}",
                'suggested_test': f"test_{func.name}_with_typical_scenarios"
            })

    return recommendations

Configuration Analysis with Backward Compatibility

python
def suggest_pytest_enhancements(existing_config):
    """Suggest pytest enhancements based on current setup"""

    enhancements = {}

    # Only suggest additions, don't remove existing settings
    if '--cov' not in existing_config.get('addopts', []):
        enhancements['addopts'] = existing_config.get('addopts', [])
        enhancements['addopts'].append('--cov=src')
        enhancements['coverage_note'] = "Adding coverage reporting (removable with --no-cov)"

    if 'markers' not in existing_config:
        enhancements['markers'] = {
            'unit': 'marks tests as unit tests',
            'integration': 'marks tests as integration tests'
        }

    return enhancements

Working with Your Existing Tests

Test Pattern Analysis

python
def analyze_test_patterns(test_files):
    """Analyze and document your current test patterns"""

    patterns = {
        'test_count': len(test_files),
        'uses_fixtures': any('def test_' in f for f in test_files if 'conftest' in f),
        'has_async_tests': any('async def test_' in f for f in test_files),
        'parametrized_tests': sum(f.count('@pytest.mark.parametrize') for f in test_files),
        'exception_tests': sum(f.count('pytest.raises') for f in test_files)
    }

    return patterns

Quality Metrics

python
def calculate_test_quality_score(test_files):
    """Calculate objective quality metrics for existing tests"""

    metrics = {
        'naming_clarity': analyze_naming_quality(test_files),
        'assertion_quality': analyze_assertion_quality(test_files),
        'coverage_adequacy': analyze_coverage_adequacy(test_files),
        'documentation_quality': analyze_docstring_quality(test_files)
    }

    overall_score = sum(metrics.values()) / len(metrics)
    return overall_score, metrics

Key Principles

  1. Evidence First - Always show concrete evidence before suggesting changes
  2. Respect Existing Setup - Don't break what's working
  3. Incremental Improvement - Small, safe enhancements over wholesale changes
  4. Backup Conscious - Always remind to backup before changes
  5. Alternative Tools - When MCP tools aren't available, use built-in tools

Tool Availability Note

I'll use these tools when available:

  • Read, Glob, Grep: For file system analysis (always available)
  • MCP Tools: For latest documentation (may not be installed)
  • Fallback: Built-in knowledge when external tools aren't available

Remember: I'll always analyze your current setup first and provide specific, evidence-based recommendations rather than generic suggestions.

Expand your agent's capabilities with these related and highly-rated skills.

StrayDragon/my-claude-skills

mermaid-expert

Expert guidance for Mermaid.js diagramming library. Create flowcharts, sequence diagrams, class diagrams, state diagrams, Gantt charts, git graphs, and block diagrams. Use when working with Mermaid syntax, creating diagrams, or visualizing complex concepts and workflows.

1 0
Explore
StrayDragon/my-claude-skills

langgraph-python-expert

Expert guidance for LangGraph Python library. Build stateful, multi-actor applications with LLMs using nodes, edges, and state management. Use when working with LangGraph, building agent workflows, state machines, or complex multi-step LLM applications. Requires langgraph, langchain-core packages.

1 0
Explore
StrayDragon/my-claude-skills

ui-ux-pro-max

UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.

1 0
Explore
StrayDragon/my-claude-skills

vercel-react-best-practices

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

1 0
Explore
StrayDragon/my-claude-skills

python-log-expert

Expert guidance for Python logging libraries including structlog, standard logging, and log analysis. Use when working with Python logs, troubleshooting logging issues, implementing logging best practices, or analyzing structlog source code implementation. Includes complete structlog source code in source/structlog/ for deep implementation analysis. Requires structlog package.

1 0
Explore
StrayDragon/my-claude-skills

feishu-openapi-dev

Expert guidance for Feishu (飞书) / Lark OpenAPI Python development. Build Feishu applications, robots, handle event subscriptions, card callbacks, and API integrations. Use when working with Feishu SDK, lark-oapi, building Feishu bots, or mentioning 飞书 development.

1 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results