Skip to main content

pytest plugin for QAStudio.dev test management platform

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qastudio_pytest-1.0.6.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qastudio_pytest-1.0.6-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file qastudio_pytest-1.0.6.tar.gz.

File metadata

  • Download URL: qastudio_pytest-1.0.6.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qastudio_pytest-1.0.6.tar.gz
Algorithm Hash digest
SHA256 f33fe7e855d2505d6ec8b40817fef461e5b411006d4f16c6e4503cf3a23a9d39
MD5 7c780b374caf466275246f599986042e
BLAKE2b-256 d3d41bf4720ef2241ae20772e599403aa9af22735f223f07ec651c5e802a7843

See more details on using hashes here.

File details

Details for the file qastudio_pytest-1.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for qastudio_pytest-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0a74a107c5fdb72664fc9a6d96281ae8c2c29163e1615033b78dd924e3b90e48
MD5 fabd8296527ffaebb12b0af3e892fdde
BLAKE2b-256 26d3dcc5f0f9e09dee4e0a71ebaf113baf56e55aa0c80a500fb31ad3e99de42a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page