Skip to main content

PyPlayKit - Enterprise Test Automation Framework

Tagline: A modular, scalable, and CI/CD-ready Python + Playwright framework for enterprise automation supporting multiple projects and 50+ QE engineers.


Overview

PyPlayKit is a multi-project enterprise test automation framework built with Python, Playwright, and Pytest. It supports multiple independent projects with UI, API, Database, and Integration testing capabilities.

Key Features:

  • ๐Ÿข Multi-Project Support: Separate test organization for multiple applications
  • ๐Ÿ‘ฅ Scalable: Designed for 50-100 QE engineers working simultaneously
  • ๐ŸŽฏ Zero Merge Conflicts: Project-first organization eliminates conflicts
  • ๐Ÿ“Š Data Comparison: File-to-File, File-to-DB, DB-to-File validation (Excel, CSV, JSON)
  • ๐Ÿ“ˆ Interactive HTML Reports: Filterable validation reports with KPIs โญ NEW
  • ๐Ÿ“š Comprehensive Documentation: 8,700+ lines across 15+ guides
  • ๐Ÿ”ง Extensible: Plugin architecture with orchestration support
  • ๐Ÿ” Self-Healing: Locator recovery with fallback chains
  • ๐Ÿ”ญ Observable: Comprehensive metrics and reporting

Quick Start

Prerequisites

  • Python 3.11 or higher
  • pip

Setup (5 minutes)

# Windows PowerShell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
playwright install
pip install -r requirements-dev.txt

Set Environment Variables

# Required for tests
$env:PYPLAYKIT_TEST_USERNAME="standard_user"
$env:PYPLAYKIT_TEST_PASSWORD="secret_sauce"

Run Tests

# Run all smoke tests
pytest -m smoke

# Run specific project tests
pytest tests/projects/project_1/
pytest tests/projects/project_2/
pytest tests/projects/project_3/

# Run by marker
pytest -m project_1
pytest -m project_2
pytest -m project_3

Architecture

Multi-Project Structure

PyPlayKit supports multiple independent projects with separate test suites:

tests/
โ”œโ”€โ”€ projects/                              # Multi-project organization
โ”‚   โ”œโ”€โ”€ project_1/                      # Project 1: Quote management
โ”‚   โ”‚   โ”œโ”€โ”€ functional/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ui/                       # UI tests
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api/                      # API tests
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ database/                 # Database tests
โ”‚   โ”‚   โ””โ”€โ”€ integration/                  # Integration tests
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ project_2/                        # Project 2: Dispatch & logistics
โ”‚   โ”‚   โ”œโ”€โ”€ functional/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ui/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ database/
โ”‚   โ”‚   โ””โ”€โ”€ integration/
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ project_3/            # Project 3: Customs management
โ”‚       โ”œโ”€โ”€ functional/
โ”‚       โ”‚   โ”œโ”€โ”€ ui/
โ”‚       โ”‚   โ”œโ”€โ”€ api/
โ”‚       โ”‚   โ””โ”€โ”€ database/
โ”‚       โ””โ”€โ”€ integration/
โ”‚
โ””โ”€โ”€ unit/                                  # Framework unit tests

Layered Architecture

  1. Test Layer (tests/) - Multi-project organization with Pytest
  2. Page Object Layer (pages/) - Encapsulated locators per project
  3. Core Engine Layer (core/) - Playwright lifecycle and browser management
  4. Utilities Layer (utils/) - Logging, data loading, assertions, API clients
  5. Configuration Layer (config/) - Framework + project-specific configs
  6. Plugin Layer (plugins/) - Extensible plugin architecture
  7. Orchestration Layer (orchestration/) - Dependency-aware execution
  8. Resilience Layer (resilience/) - Self-healing locator resolution
  9. Integration Layer (integrations/) - Jira and test management adapters

Project Structure

pyplaykit/
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ config.yaml                       # Framework configuration
โ”‚   โ”œโ”€โ”€ environments.yaml                 # Global environments
โ”‚   โ””โ”€โ”€ projects/                         # Project-specific configs
โ”‚       โ”œโ”€โ”€ project_1.yaml
โ”‚       โ”œโ”€โ”€ project_2.yaml
โ”‚       โ””โ”€โ”€ project_3.yaml
โ”‚
โ”œโ”€โ”€ core/
โ”‚   โ”œโ”€โ”€ base_page.py
โ”‚   โ”œโ”€โ”€ base_test.py
โ”‚   โ”œโ”€โ”€ browser_factory.py
โ”‚   โ””โ”€โ”€ playwright_manager.py
โ”‚
โ”œโ”€โ”€ integrations/
โ”‚   โ””โ”€โ”€ adapters.py
โ”‚
โ”œโ”€โ”€ orchestration/
โ”‚   โ””โ”€โ”€ planner.py
โ”‚
โ”œโ”€โ”€ plugins/
โ”‚   โ”œโ”€โ”€ base.py
โ”‚   โ”œโ”€โ”€ registry.py
โ”‚   โ”œโ”€โ”€ api_plugin.py
โ”‚   โ”œโ”€โ”€ data_plugin.py
โ”‚   โ””โ”€โ”€ security_plugin.py
โ”‚
โ”œโ”€โ”€ resilience/
โ”‚   โ””โ”€โ”€ locator_recovery.py
โ”‚
โ”œโ”€โ”€ pages/                                # Page objects per project
โ”‚   โ”œโ”€โ”€ project_1/
โ”‚   โ”œโ”€โ”€ project_2/
โ”‚   โ””โ”€โ”€ project_3/
โ”‚
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ projects/                         # All project tests
โ”‚   โ”‚   โ”œโ”€โ”€ project_1/
โ”‚   โ”‚   โ”œโ”€โ”€ project_2/
โ”‚   โ”‚   โ””โ”€โ”€ project_3/
โ”‚   โ””โ”€โ”€ unit/                             # Framework unit tests
โ”‚
โ”œโ”€โ”€ utils/
โ”‚   โ”œโ”€โ”€ logger.py
โ”‚   โ”œโ”€โ”€ data_loader.py
โ”‚   โ”œโ”€โ”€ assertion_helper.py
โ”‚   โ”œโ”€โ”€ api_client.py
โ”‚   โ”œโ”€โ”€ response_validator.py
โ”‚   โ”œโ”€โ”€ data_validator.py
โ”‚   โ”œโ”€โ”€ config_reader.py
โ”‚   โ”œโ”€โ”€ observability.py
โ”‚   โ”œโ”€โ”€ environment_validator.py
โ”‚   โ””โ”€โ”€ tdm.py
โ”‚
โ”œโ”€โ”€ test_data/                            # Test data per project
โ”‚   โ”œโ”€โ”€ project_1/
โ”‚   โ”œโ”€โ”€ project_2/
โ”‚   โ””โ”€โ”€ project_3/
โ”‚
โ”œโ”€โ”€ reports/                              # Test reports and artifacts
โ”‚
โ”œโ”€โ”€ conftest.py                           # Pytest configuration
โ”œโ”€โ”€ pytest.ini                            # Pytest settings
โ”œโ”€โ”€ pyproject.toml                        # Package metadata
โ”œโ”€โ”€ requirements.txt                      # Dependencies
โ””โ”€โ”€ README.md                             # This file

Current Projects

1. project_1

Description: Quote management and generation system
Tests: tests/projects/project_1/
Config: config/projects/project_1.yaml
Marker: @pytest.mark.project_1

Run tests:

pytest tests/projects/project_1/
pytest -m project_1

2. project_2

Description: Dispatch and logistics management system
Tests: tests/projects/project_2/
Config: config/projects/project_2.yaml
Marker: @pytest.mark.project_2

Run tests:

pytest tests/projects/project_2/
pytest -m project_2

3. Customs Modernization

Description: Customs management system modernization
Tests: tests/projects/project_3/
Config: config/projects/project_3.yaml
Marker: @pytest.mark.project_3

Run tests:

pytest tests/projects/project_3/
pytest -m project_3

Running Tests

By Project

# project_1
pytest tests/projects/project_1/
pytest tests/projects/project_1/ -m smoke

# project_2
pytest tests/projects/project_2/
pytest tests/projects/project_2/ -m smoke

# Customs Modernization
pytest tests/projects/project_3/
pytest tests/projects/project_3/ -m smoke

By Test Type

# UI tests only
pytest tests/projects/project_1/functional/ui/

# API tests only
pytest tests/projects/project_2/functional/api/

# Database tests only
pytest tests/projects/project_3/functional/database/

# Integration tests only
pytest tests/projects/project_1/integration/

By Marker

# Project markers
pytest -m project_1
pytest -m project_2
pytest -m project_3

# Test type markers
pytest -m api
pytest -m ui
pytest -m database
pytest -m integration

# Combined markers
pytest -m "project_1 and smoke"
pytest -m "project_2 and api"

All Projects

# Run smoke tests for all projects
pytest tests/projects/ -m smoke

# Run all tests for all projects
pytest tests/projects/

# Run specific test type across all projects
pytest tests/projects/ -m api
pytest tests/projects/ -m ui

With Options

# Different environment
pytest tests/projects/project_1/ --pyplaykit-env qa
pytest tests/projects/project_2/ --pyplaykit-env uat

# Different browser
pytest tests/projects/project_1/ --pyplaykit-browser firefox --pyplaykit-headed

# Parallel execution
pytest tests/projects/project_1/ -n 4

# With readiness checks
pytest tests/projects/project_1/ --pyplaykit-readiness-check

Available pytest CLI Options

Registered in conftest.py:

  • --pyplaykit-env โ€” target environment (dev, qa, uat, prod)
  • --pyplaykit-browser โ€” browser (chromium, firefox, webkit)
  • --pyplaykit-headed โ€” disable headless mode
  • --pyplaykit-base-url โ€” override base URL
  • --pyplaykit-readiness-check โ€” enable environment readiness checks

Test Markers

Defined in pytest.ini:

Suite Markers

  • @pytest.mark.smoke - Critical path tests
  • @pytest.mark.sanity - Quick validation tests
  • @pytest.mark.regression - Full regression suite

Project Markers

  • @pytest.mark.project_1 - project_1 tests
  • @pytest.mark.project_2 - project_2 tests
  • @pytest.mark.project_3 - Customs Modernization tests

Test Type Markers

  • @pytest.mark.ui - UI functional tests
  • @pytest.mark.api - API functional tests
  • @pytest.mark.database - Database validation tests
  • @pytest.mark.integration - Integration tests

Feature Markers

  • @pytest.mark.login - Login functionality
  • @pytest.mark.quotes - Quote management
  • @pytest.mark.logistics - Logistics/dispatch
  • @pytest.mark.customs_mgmt - Customs management

Adding Tests

Where to Add Your Tests

Test Type Location Example
project_1 UI tests/projects/project_1/functional/ui/<feature>/ test_create_quote.py
project_1 API tests/projects/project_1/functional/api/<domain>/ test_quotes_api.py
project_2 UI tests/projects/project_2/functional/ui/<feature>/ test_dispatch_dashboard.py
project_2 API tests/projects/project_2/functional/api/<domain>/ test_orders_api.py
Customs UI tests/projects/project_3/functional/ui/<feature>/ test_declarations.py
Customs API tests/projects/project_3/functional/api/<domain>/ test_customs_api.py
Database tests tests/projects/<project>/functional/database/<category>/ test_data_integrity.py
Integration tests tests/projects/<project>/integration/ test_workflow_e2e.py

Example: Adding a New Test

1. Create page object (for UI tests):

# pages/project_1/quote_creation_page.py
from core.base_page import BasePage

class QuoteCreationPage(BasePage):
    CUSTOMER_SELECT = "#customer"
    SAVE_BUTTON = "#save"
    
    def create_quote(self, customer: str):
        self.click(self.CUSTOMER_SELECT)
        self.click(f"option:has-text('{customer}')")
        self.click(self.SAVE_BUTTON)

2. Create test:

# tests/projects/project_1/functional/ui/quotes/test_create_quote.py
import pytest
from pages.project_1.quote_creation_page import QuoteCreationPage

@pytest.mark.project_1
@pytest.mark.smoke
@pytest.mark.quotes
def test_create_quote_with_valid_customer(page, runtime_options):
    quote_page = QuoteCreationPage(page, runtime_options["resilience_policy"])
    quote_page.navigate(runtime_options["base_url"] + "/quotes/new")
    quote_page.create_quote("ACME Corp")
    assert quote_page.is_quote_saved()

3. Run your test:

pytest tests/projects/project_1/functional/ui/quotes/test_create_quote.py -v

Data Comparison Patterns

PyPlayKit provides comprehensive data comparison capabilities using the built-in DataValidator utility.

Prerequisites for Data Comparison

# Option 1: Install with optional dependencies
pip install pyplaykit[data-comparison]

# Option 2: Install dependencies separately
pip install pandas openpyxl

# Option 3: Use the examples requirements file
pip install -r demo/requirements.txt

Note: Data comparison features require pandas and openpyxl. The framework will work without them for UI/API/Database testing.

Supported Comparison Types

Comparison Type Use Case Example
File-to-File Compare Excel, CSV, JSON files Validate data export/import
File-to-Database Verify data loads into database ETL validation
Database-to-File Validate database exports Report generation testing

Quick Example: Excel-to-Excel Comparison

Simple One-Line API (Recommended for QE Engineers):

import pytest
from utils.data_comparison_utils import compare_excel_files

@pytest.mark.data
def test_compare_excel_files(logger):
    # ONE function call - framework handles everything!
    result = compare_excel_files(
        source_file="report_baseline.xlsx",
        target_file="report_current.xlsx",
        float_tolerance=0.01
    )
    
    # Check results
    logger.info(f"{result.summary}")
    logger.info(f"HTML Report: {result.report_path}")
    
    if not result.passed:
        pytest.fail(f"Validation failed! {result.failed_count} discrepancies found.")

Manual Validation (For custom logic):

import pytest
import pandas as pd
from pyplaykit import DataValidator

@pytest.mark.data
def test_compare_with_custom_logic(logger):
    df1 = pd.read_excel("baseline.xlsx")
    df2 = pd.read_excel("current.xlsx")
    
    records1 = df1.to_dict('records')
    records2 = df2.to_dict('records')
    
    for idx, (r1, r2) in enumerate(zip(records1, records2)):
        DataValidator.assert_records_equal(r1, r2)
    
    logger.info("โœ“ Files match!")

DataValidator Methods

Method Purpose
assert_records_equal() Compare two dictionaries exactly
assert_floats_equal() Compare numeric values with tolerance
assert_strings_equal_normalized() Compare strings with normalization
assert_collection_contains_record() Check if record exists in collection
assert_datetimes_equal() Compare datetime values

Runnable Examples

See demo/functional/database/data_comparison_examples.py for 8 complete examples:

# Run all data comparison examples
pytest demo/functional/database/data_comparison_examples.py -v -s

# Run specific example
pytest demo/functional/database/data_comparison_examples.py::test_excel_to_excel_basic -v -s

Interactive HTML Reports โญ NEW

Option 1: Automatic Report Generation (Recommended):

from utils.data_comparison_utils import compare_excel_files

# Framework automatically tracks ALL mismatches and generates HTML report
result = compare_excel_files(
    source_file="baseline.xlsx",
    target_file="current.xlsx",
    float_tolerance=0.01
)

# Result includes:
print(f"Passed: {result.passed}")
print(f"Matched: {result.passed_count}")
print(f"Failed: {result.failed_count}")
print(f"Total Mismatches: {result.total_mismatches}")
print(f"Report: {result.report_path}")

Available Functions:

File-to-File:

  • compare_excel_files() - Excel to Excel
  • compare_csv_files() - CSV to CSV

File-to-Database:

  • compare_excel_to_db() - Excel to Database
  • compare_csv_to_db() - CSV to Database

Database-to-File:

  • compare_db_to_excel() - Database to Excel
  • compare_db_to_csv() - Database to CSV

Database-to-Database:

  • compare_db_to_db() - Database to Database

Advanced:

  • compare_dataframes() - DataFrame to DataFrame (custom sources)

Option 2: Manual Report Building (Advanced):

from utils.data_comparison_report import DataComparisonReport

# For custom comparison logic
report = DataComparisonReport()
report.set_comparison_type("FILE_TO_FILE (Excel)")
report.set_source("baseline.xlsx", 100)
report.set_target("current.xlsx", 100)

# Your custom comparison logic here...
# report.add_mismatch(...) for each discrepancy

report.generate_report("reports/validation.html")

Report Features:

  • ๐Ÿ“Š KPI dashboard with pass/fail rates
  • ๐Ÿ” Column-level filtering and search
  • ๐Ÿ“‹ Row-by-row mismatch details
  • ๐ŸŽจ Color-coded status indicators
  • ๐Ÿ“ฑ Mobile-responsive design
  • โšก Zero manual mismatch tracking required!

Examples:

Full Documentation


Unit Testing and Coverage

# Windows
scripts\run_unit_tests_with_coverage.bat

# Linux/macOS
bash scripts/run_unit_tests_with_coverage.sh

# View coverage report
# Open reports/coverage-html/index.html in browser

Coverage target: 95% (configured in pytest.ini)


Security Scanning

# Windows
scripts\run_security_reports.bat

# Linux/macOS
bash scripts/run_security_reports.sh

# View reports
# Open reports/security_reports/html/security_consolidated_report.html

Building Internal Package

# Windows
scripts\build_internal_package.bat

# Linux/macOS
bash scripts/build_internal_package.sh

Configuration

Framework Configuration

  • config/config.yaml - Framework defaults
  • config/environments.yaml - Global environment settings

Project Configuration

  • config/projects/project_1.yaml - project_1 settings
  • config/projects/project_2.yaml - project_2 settings
  • config/projects/project_3.yaml - Customs settings

Each project config includes:

  • Environment-specific URLs
  • API endpoints
  • Test users
  • Feature flags

Documentation for QE Engineers

Quick Start

Implementation

Architecture

Data Comparison & Validation

Project Guides


Key Features

Multi-Project Support

  • Separate test suites per project
  • Independent configurations
  • Project-specific page objects and test data
  • No merge conflicts between projects

Scalability

  • Designed for 50-100 QE engineers
  • Clear ownership boundaries
  • Parallel development across projects
  • Independent CI/CD pipelines

Test Types

  • UI Testing: Playwright-based with page objects
  • API Testing: REST API validation with response validators
  • Database Testing: Data integrity and migration validation
  • Integration Testing: Cross-layer consistency validation

Observability

  • Session-level metrics and KPIs
  • Automatic failure classification
  • Flaky test detection
  • Multi-persona reports (engineering, QA, leadership)

Resilience

  • Self-healing locators with fallback chains
  • DOM retry mechanisms
  • Confidence scoring
  • Optional audit logging

Plugin Architecture

  • Extensible hook system
  • Built-in plugins: API, Data, Security
  • Config-gated activation
  • Session and test-level hooks

Wave Implementation Status

Wave 1 โœ… Complete:

  • Observability tracker
  • Environment readiness checks
  • Session-level reporting

Wave 2 โœ… Complete:

  • Test data management utilities
  • Multi-level persona reports
  • Integration adapters (file and API)

Wave 3 โœ… Complete:

  • Plugin architecture with registry
  • Orchestration planner with dependency graphs

Wave 4 โœ… Complete:

  • Self-healing locators with fallback chains
  • Distribution packaging baseline
  • Multi-project organization structure

Wave 5 โœ… Complete:

  • MCP server for AI interoperability (11 read-only tools, 3 categories)
  • CLI layer โ€” every MCP tool as a pyplaykit-mcp <subcommand> shell command
  • CLI version management with PyPI upgrade detection
  • Multi-project init as default layout; upgrade-to-multi migration command
  • Version resolution from installed package metadata
  • Allure environment capture fix for Windows/Python 3.14

Wave 5+ โœ… Complete:

  • Renamed examples/ โ†’ demo/ with layered functional/{ui,api,database}/ structure
  • HTML comparison report path logged to console after every comparison run
  • Dockerized SRCโ†’TGT PostgreSQL comparison demo (demo/functional/database/postgres_src_tgt/)
  • CSV / XLS / XLSX file-comparison demo with multi-sheet behavior documentation (demo/functional/database/file_comparison/)

Reports and Artifacts

Test Reports

  • HTML report: reports/report.html
  • JUnit XML: reports/junit.xml
  • Coverage: reports/coverage-html/index.html

Observability

  • Summary: reports/observability/summary.json
  • KPI summary: reports/observability/kpi_summary.json
  • Engineering report: reports/observability/engineering_report.json
  • QA report: reports/observability/qa_functional_report.json
  • Leadership report: reports/observability/leadership_kpi_report.json

Viewing observability as an HTML report: the reports above are JSON. To turn them into a single, self-contained, styled HTML report with a generation date/time stamp, run the observability-report CLI command after a pytest run:

# Default: reads reports/observability/, writes a timestamped HTML file there
pyplaykit observability-report

# Point at a different reports directory
pyplaykit observability-report --reports-dir path/to/observability

# Choose an explicit output file
pyplaykit observability-report --output reports/observability/latest.html

# Generate and open in the default web browser
pyplaykit observability-report --open

The report includes a brand header with the generation timestamp and an overall PASSED / ATTENTION-NEEDED status pill, KPI cards (total, passed, failed, skipped, pass rate, flaky count, durations, automation coverage), leadership KPI metrics, a failed-tests table with failure classification, and a flaky-tests list. It requires that a pytest run has already written summary.json. See docs/CLI_REFERENCE.md for full option details.

Integration Exports

  • Jira export: reports/integrations/jira_export.json
  • Test management: reports/integrations/test_management_export.json

Resilience

  • Audit log: reports/resilience/recovery_audit.jsonl

Failure Artifacts

  • Screenshots: reports/screenshots/
  • Videos: reports/videos/
  • Logs: reports/framework.log

Environment Variables

Framework

export PYPLAYKIT_TEST_USERNAME="standard_user"
export PYPLAYKIT_TEST_PASSWORD="secret_sauce"

project_1

export project_1_USERNAME="user"
export project_1_PASSWORD="pass"
export project_1_ADMIN_USERNAME="admin"
export project_1_ADMIN_PASSWORD="admin_pass"

project_2

export project_2_DISPATCHER_USERNAME="dispatcher"
export project_2_DISPATCHER_PASSWORD="pass"
export project_2_DRIVER_USERNAME="driver"
export project_2_DRIVER_PASSWORD="pass"
export project_2_ADMIN_USERNAME="admin"
export project_2_ADMIN_PASSWORD="admin_pass"

Customs Modernization

export CUSTOMS_USERNAME="customs_user"
export CUSTOMS_PASSWORD="pass"
export CUSTOMS_ADMIN_USERNAME="admin"
export CUSTOMS_ADMIN_PASSWORD="admin_pass"
export CUSTOMS_OFFICER_USERNAME="officer"
export CUSTOMS_OFFICER_PASSWORD="officer_pass"

CI/CD Integration

GitHub Actions Example

name: Multi-Project Tests

on: [push, pull_request]

jobs:
  project_1-smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          playwright install
      - name: Run project_1 Smoke Tests
        run: pytest tests/projects/project_1/ -m smoke -n 4

  project_2-smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          playwright install
      - name: Run project_2 Smoke Tests
        run: pytest tests/projects/project_2/ -m smoke -n 4

  customs-smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          playwright install
      - name: Run Customs Smoke Tests
        run: pytest tests/projects/project_3/ -m smoke -n 4

Team Organization

Recommended Structure (60 QE Engineers)

project_1 Team (20 QE)

  • UI Team (10): tests/projects/project_1/functional/ui/
  • API Team (6): tests/projects/project_1/functional/api/
  • Integration Team (4): tests/projects/project_1/integration/

project_2 Team (20 QE)

  • UI Team (10): tests/projects/project_2/functional/ui/
  • API Team (6): tests/projects/project_2/functional/api/
  • Integration Team (4): tests/projects/project_2/integration/

Customs Modernization Team (20 QE)

  • UI Team (8): tests/projects/project_3/functional/ui/
  • API Team (5): tests/projects/project_3/functional/api/
  • Database/Migration Team (5): tests/projects/project_3/functional/database/
  • Integration Team (2): tests/projects/project_3/integration/

Contributing

See CONTRIBUTING.md for comprehensive guidelines on:

  • Test development patterns
  • Page object creation
  • Test data management
  • Code quality standards
  • Common patterns and examples

Troubleshooting

Tests not discovered?

pytest tests/projects/<project>/ --collect-only

Import errors?

# Activate virtual environment
.\.venv\Scripts\Activate.ps1  # Windows
source .venv/bin/activate      # Linux/Mac

Configuration issues?

pytest --markers | grep -E "project_1|project_2|customs"

Support


License

[Your License Here]


Authors

  • Framework Team
  • QA Engineering Teams

PyPlayKit - Enterprise Test Automation at Scale ๐Ÿš€

Download files

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

Source Distribution

pyplaykit-1.19.2.tar.gz (482.9 kB view details)

Uploaded Source

Built Distribution

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

pyplaykit-1.19.2-py3-none-any.whl (192.8 kB view details)

Uploaded Python 3

File details

Details for the file pyplaykit-1.19.2.tar.gz.

File metadata

  • Download URL: pyplaykit-1.19.2.tar.gz
  • Upload date:
  • Size: 482.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyplaykit-1.19.2.tar.gz
Algorithm Hash digest
SHA256 a9ed1b3615db96c5268460daeb470447f8115714a3a8ebd5da959bed9a03aa6f
MD5 746134ffdd255c6acb4376e471d588df
BLAKE2b-256 27dc407498519e3337f0204e86ef954fefe9757e3cc3d5303c4f402d44a1cce9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyplaykit-1.19.2.tar.gz:

Publisher: publish-pypi.yml on ShanKonduru/pyplaykit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyplaykit-1.19.2-py3-none-any.whl.

File metadata

  • Download URL: pyplaykit-1.19.2-py3-none-any.whl
  • Upload date:
  • Size: 192.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyplaykit-1.19.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a9ff6ef89011d6eb462b7bf4f86e4706b0433803ce1b9fa3d6a8d42cbab34c35
MD5 520c4531d129788828167f516c96ba60
BLAKE2b-256 753145f1b6757ae2d2d25a89c55dd736664bf269f3ac73958a638e382e33e43c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyplaykit-1.19.2-py3-none-any.whl:

Publisher: publish-pypi.yml on ShanKonduru/pyplaykit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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