Skip to content

A pytest plugin for QAStudio.dev test management platform. Automatically report test results, link test cases, capture screenshots and traces, with support for Playwright integration.

License

Notifications You must be signed in to change notification settings

QAStudio-Dev/playwright-reporter-python

Repository files navigation

QAStudio pytest Plugin

A pytest plugin that integrates with QAStudio.dev test management platform.

Features

  • 🔄 Automatic test result reporting to QAStudio.dev
  • 📊 Real-time test run tracking
  • 🏷️ Test case linking via markers or test IDs
  • 📸 Screenshot and attachment support
  • 🔧 Configurable via pytest.ini, command line, or environment variables
  • 🎯 Batch result submission for performance
  • 🛡️ Silent mode - won't fail tests if API is unavailable
  • 📝 Error code snippets with context around failure points
  • 📍 Precise error location tracking (file, line, column)
  • 📤 Console output capture (stdout/stderr)
  • 🔍 Enhanced debugging context for test failures

Installation

pip install qastudio-pytest

Quick Start

1. Configure via pytest.ini

[pytest]
qastudio_api_url = https://qastudio.dev/api
qastudio_api_key = your-api-key
qastudio_project_id = your-project-id
qastudio_environment = CI

2. Configure via Environment Variables

export QASTUDIO_API_URL=https://qastudio.dev/api
export QASTUDIO_API_KEY=your-api-key
export QASTUDIO_PROJECT_ID=your-project-id
export QASTUDIO_ENVIRONMENT=CI

3. Configure via Command Line

pytest --qastudio-api-url=https://qastudio.dev/api \
       --qastudio-api-key=your-api-key \
       --qastudio-project-id=your-project-id

Usage

Linking Tests to QAStudio Test Cases

Method 1: Using pytest markers

import pytest

@pytest.mark.qastudio_id("QA-123")
def test_login():
    assert user.login("user", "pass")

Method 2: Using test ID in test name

def test_QA123_login():
    """Test case QA-123"""
    assert user.login("user", "pass")

Method 3: Using docstring

def test_login():
    """
    Test user login functionality

    QAStudio ID: QA-123
    """
    assert user.login("user", "pass")

Adding Custom Metadata

import pytest

@pytest.mark.qastudio_id("QA-456")
@pytest.mark.qastudio_priority("high")
@pytest.mark.qastudio_tags("smoke", "authentication")
def test_important_feature():
    assert True

Configuration Options

Option Environment Variable Description Default
qastudio_api_url QASTUDIO_API_URL QAStudio.dev API URL https://qastudio.dev/api
qastudio_api_key QASTUDIO_API_KEY API authentication key Required
qastudio_project_id QASTUDIO_PROJECT_ID Project ID Required
qastudio_environment QASTUDIO_ENVIRONMENT Environment name default
qastudio_test_run_name QASTUDIO_TEST_RUN_NAME Custom test run name Auto-generated
qastudio_test_run_id QASTUDIO_TEST_RUN_ID Existing test run ID None
qastudio_create_test_run QASTUDIO_CREATE_TEST_RUN Create new test run true
qastudio_batch_size QASTUDIO_BATCH_SIZE Results batch size 10
qastudio_silent QASTUDIO_SILENT Fail silently on API errors true
qastudio_verbose QASTUDIO_VERBOSE Enable verbose logging false
qastudio_include_error_snippet QASTUDIO_INCLUDE_ERROR_SNIPPET Include error code snippet true
qastudio_include_error_location QASTUDIO_INCLUDE_ERROR_LOCATION Include precise error location true
qastudio_include_test_steps QASTUDIO_INCLUDE_TEST_STEPS Include test execution steps true
qastudio_include_console_output QASTUDIO_INCLUDE_CONSOLE_OUTPUT Include console output false

Error Context and Debugging

The plugin automatically captures rich debugging context for failed tests:

Error Code Snippets

When a test fails, the plugin captures the relevant code snippet showing where the error occurred:

def test_calculation():
    result = calculate(5, 0)  # This line will be captured in the error snippet
    assert result == 10

Disable with:

[pytest]
qastudio_include_error_snippet = false

Error Location

Precise error location information (file path, line number) is automatically captured:

{
  "errorLocation": {
    "file": "tests/test_example.py",
    "line": 42,
    "column": 0
  }
}

Disable with:

[pytest]
qastudio_include_error_location = false

Console Output

Capture stdout and stderr from test execution (disabled by default to avoid sensitive data):

[pytest]
qastudio_include_console_output = true

Or via command line:

pytest --qastudio-include-console-output

Advanced Usage

Using with pytest-xdist (Parallel Testing)

pytest -n auto --qastudio-api-key=your-api-key

The plugin handles parallel test execution automatically.

CI/CD Integration

GitHub Actions

- name: Run Tests
  run: |
    pytest --junitxml=report.xml
  env:
    QASTUDIO_API_KEY: ${{ secrets.QASTUDIO_API_KEY }}
    QASTUDIO_PROJECT_ID: ${{ secrets.QASTUDIO_PROJECT_ID }}
    QASTUDIO_ENVIRONMENT: CI

GitLab CI

test:
  script:
    - pytest
  variables:
    QASTUDIO_API_KEY: $QASTUDIO_API_KEY
    QASTUDIO_PROJECT_ID: $QASTUDIO_PROJECT_ID
    QASTUDIO_ENVIRONMENT: CI

Examples

Playwright Example

A complete Playwright test framework example is available in examples/playwright_tests/:

# Navigate to example directory
cd examples/playwright_tests

# Install dependencies
pip install -r requirements.txt
playwright install chromium

# Run the tests
./run_tests.sh

# Or run directly with pytest
pytest -v

The example demonstrates:

  • ✅ Testing the QAStudio.dev website
  • ✅ Automatic screenshot capture
  • ✅ Playwright trace recording (.zip files)
  • ✅ Integration with qastudio-pytest reporter
  • ✅ Test case linking with @pytest.mark.qastudio_id()

See examples/playwright_tests/README.md for detailed documentation.

Development

# Clone repository
git clone https://github.com/QAStudio-Dev/playwright-reporter-python.git
cd playwright-reporter-python

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e .[dev]

# Run tests
pytest tests/

# Run linting
black src/ tests/
flake8 src/ tests/
mypy src/

# Build package
python -m build

License

This project is licensed under the GNU Affero General Public License v3.0 or later (AGPLv3+) - see LICENSE file for details.

Support

About

A pytest plugin for QAStudio.dev test management platform. Automatically report test results, link test cases, capture screenshots and traces, with support for Playwright integration.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages