pyplaykit 1.0.0__tar.gz → 1.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/PKG-INFO +131 -8
  2. pyplaykit-1.0.0/pyplaykit.egg-info/PKG-INFO → pyplaykit-1.5.0/README.md +121 -34
  3. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit/__init__.py +31 -2
  4. pyplaykit-1.0.0/README.md → pyplaykit-1.5.0/pyplaykit.egg-info/PKG-INFO +157 -1
  5. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit.egg-info/SOURCES.txt +5 -0
  6. pyplaykit-1.5.0/pyplaykit.egg-info/requires.txt +14 -0
  7. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyproject.toml +10 -7
  8. pyplaykit-1.5.0/utils/__init__.py +5 -0
  9. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/api_client.py +9 -1
  10. pyplaykit-1.5.0/utils/data_comparison_report.py +487 -0
  11. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/data_loader.py +42 -1
  12. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/data_source.py +54 -6
  13. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_client.py +78 -0
  14. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/db2.py +7 -0
  15. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/mysql.py +7 -0
  16. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/oracle.py +7 -0
  17. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/snowflake.py +7 -0
  18. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/sqlite.py +8 -0
  19. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/sqlserver.py +7 -0
  20. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_validation_helper.py +229 -0
  21. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/environment_validator.py +16 -3
  22. pyplaykit-1.5.0/utils/graphql_client.py +257 -0
  23. pyplaykit-1.5.0/utils/soap_client.py +260 -0
  24. pyplaykit-1.5.0/utils/transformation_validator.py +639 -0
  25. pyplaykit-1.5.0/utils/ui_db_validator.py +442 -0
  26. pyplaykit-1.0.0/pyplaykit.egg-info/requires.txt +0 -11
  27. pyplaykit-1.0.0/utils/__init__.py +0 -0
  28. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/MANIFEST.in +0 -0
  29. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/components/__init__.py +0 -0
  30. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/components/base_component.py +0 -0
  31. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/components/data_table.py +0 -0
  32. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/components/form_field.py +0 -0
  33. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/components/modal.py +0 -0
  34. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/config/config.yaml +0 -0
  35. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/config/environments.yaml +0 -0
  36. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/config/projects/customs_modernization.yaml +0 -0
  37. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/config/projects/dispatcho.yaml +0 -0
  38. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/config/projects/timelyquote.yaml +0 -0
  39. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/core/__init__.py +0 -0
  40. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/core/base_page.py +0 -0
  41. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/core/base_test.py +0 -0
  42. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/core/browser_factory.py +0 -0
  43. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/core/playwright_manager.py +0 -0
  44. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/dist_pkg/__init__.py +0 -0
  45. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/dist_pkg/distribution.py +0 -0
  46. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/integrations/__init__.py +0 -0
  47. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/integrations/adapters.py +0 -0
  48. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/orchestration/__init__.py +0 -0
  49. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/orchestration/enforcer.py +0 -0
  50. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/orchestration/planner.py +0 -0
  51. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/__init__.py +0 -0
  52. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/dashboard_page.py +0 -0
  53. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/login_page.py +0 -0
  54. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/orangehrm_login_page.py +0 -0
  55. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/saucedemo_inventory_page.py +0 -0
  56. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pages/saucedemo_login_page.py +0 -0
  57. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/__init__.py +0 -0
  58. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/api_plugin.py +0 -0
  59. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/base.py +0 -0
  60. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/data_plugin.py +0 -0
  61. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/registry.py +0 -0
  62. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/plugins/security_plugin.py +0 -0
  63. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit/cli.py +0 -0
  64. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit/plugin.py +0 -0
  65. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit.egg-info/dependency_links.txt +0 -0
  66. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit.egg-info/entry_points.txt +0 -0
  67. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/pyplaykit.egg-info/top_level.txt +0 -0
  68. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/resilience/__init__.py +0 -0
  69. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/resilience/locator_recovery.py +0 -0
  70. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/setup.cfg +0 -0
  71. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/api/ecom/auth_payloads.json +0 -0
  72. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/api/ecom/product_payloads.json +0 -0
  73. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/api_test_data.json +0 -0
  74. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/data_validation_test_data.json +0 -0
  75. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/login_test_data.json +0 -0
  76. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/orangehrm_login_data.json +0 -0
  77. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/test_data/ui_test_data.json +0 -0
  78. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/api_test_helper.py +0 -0
  79. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/assertion_helper.py +0 -0
  80. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/auth_manager.py +0 -0
  81. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/data_validator.py +0 -0
  82. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_drivers/__init__.py +0 -0
  83. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_factory.py +0 -0
  84. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_fixtures.py +0 -0
  85. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/db_pool.py +0 -0
  86. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/file_reader.py +0 -0
  87. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/logger.py +0 -0
  88. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/observability.py +0 -0
  89. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/response_validator.py +0 -0
  90. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/screenshot_helper.py +0 -0
  91. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/tdm.py +0 -0
  92. {pyplaykit-1.0.0 → pyplaykit-1.5.0}/utils/yaml_config_reader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyplaykit
3
- Version: 1.0.0
3
+ Version: 1.5.0
4
4
  Summary: Enterprise Python + Playwright automation framework
5
5
  Author-email: Shan Konduru <shankonduru@gmail.com>
6
6
  License: MIT
@@ -20,16 +20,19 @@ Classifier: Operating System :: OS Independent
20
20
  Requires-Python: >=3.11
21
21
  Description-Content-Type: text/markdown
22
22
  Requires-Dist: playwright==1.54.0
23
- Requires-Dist: pytest==8.4.1
24
- Requires-Dist: pytest-cov==6.2.1
25
- Requires-Dist: pytest-xdist==3.6.1
26
- Requires-Dist: pytest-rerunfailures==15.1
27
- Requires-Dist: pytest-html==4.1.1
28
- Requires-Dist: allure-pytest==2.13.5
23
+ Requires-Dist: pytest==9.1.1
24
+ Requires-Dist: pytest-cov==7.1.0
25
+ Requires-Dist: pytest-xdist==3.8.0
26
+ Requires-Dist: pytest-rerunfailures==16.4
27
+ Requires-Dist: pytest-html==4.2.0
28
+ Requires-Dist: allure-pytest==2.16.0
29
29
  Requires-Dist: PyYAML==6.0.2
30
30
  Requires-Dist: python-dotenv>=1.0.0
31
31
  Requires-Dist: httpx>=0.27.0
32
32
  Requires-Dist: jmespath>=1.0.0
33
+ Requires-Dist: xlrd>=2.0.1
34
+ Requires-Dist: zeep>=4.2.1
35
+ Requires-Dist: gql[httpx]>=3.5.0
33
36
 
34
37
  # PyPlayKit - Enterprise Test Automation Framework
35
38
 
@@ -45,10 +48,12 @@ PyPlayKit is a **multi-project enterprise test automation framework** built with
45
48
  - 🏢 **Multi-Project Support**: Separate test organization for multiple applications
46
49
  - 👥 **Scalable**: Designed for 50-100 QE engineers working simultaneously
47
50
  - 🎯 **Zero Merge Conflicts**: Project-first organization eliminates conflicts
51
+ - 📊 **Data Comparison**: File-to-File, File-to-DB, DB-to-File validation (Excel, CSV, JSON)
52
+ - 📈 **Interactive HTML Reports**: Filterable validation reports with KPIs ⭐ **NEW**
48
53
  - 📚 **Comprehensive Documentation**: 8,700+ lines across 15+ guides
49
54
  - 🔧 **Extensible**: Plugin architecture with orchestration support
50
55
  - 🔍 **Self-Healing**: Locator recovery with fallback chains
51
- - 📊 **Observable**: Comprehensive metrics and reporting
56
+ - 🔭 **Observable**: Comprehensive metrics and reporting
52
57
 
53
58
  ---
54
59
 
@@ -437,6 +442,118 @@ pytest tests/projects/timelyquote/functional/ui/quotes/test_create_quote.py -v
437
442
 
438
443
  ---
439
444
 
445
+ ## Data Comparison Patterns
446
+
447
+ PyPlayKit provides comprehensive data comparison capabilities using the built-in `DataValidator` utility.
448
+
449
+ ### Prerequisites for Data Comparison
450
+
451
+ ```bash
452
+ # Install data comparison dependencies
453
+ pip install pandas openpyxl
454
+
455
+ # Or use the examples requirements file
456
+ pip install -r examples/requirements.txt
457
+ ```
458
+
459
+ ### Supported Comparison Types
460
+
461
+ | Comparison Type | Use Case | Example |
462
+ |----------------|----------|---------|
463
+ | **File-to-File** | Compare Excel, CSV, JSON files | Validate data export/import |
464
+ | **File-to-Database** | Verify data loads into database | ETL validation |
465
+ | **Database-to-File** | Validate database exports | Report generation testing |
466
+
467
+ ### Quick Example: Excel-to-Excel Comparison
468
+
469
+ ```python
470
+ import pytest
471
+ import pandas as pd
472
+ from pathlib import Path
473
+ from pyplaykit import DataValidator
474
+
475
+ @pytest.mark.data
476
+ def test_compare_excel_files(logger):
477
+ # Read both files
478
+ df1 = pd.read_excel("report_baseline.xlsx")
479
+ df2 = pd.read_excel("report_current.xlsx")
480
+
481
+ records1 = df1.to_dict('records')
482
+ records2 = df2.to_dict('records')
483
+
484
+ # Compare row by row
485
+ for idx, (r1, r2) in enumerate(zip(records1, records2)):
486
+ DataValidator.assert_records_equal(r1, r2)
487
+
488
+ logger.info("✓ Files match!")
489
+ ```
490
+
491
+ ### DataValidator Methods
492
+
493
+ | Method | Purpose |
494
+ |--------|---------|
495
+ | `assert_records_equal()` | Compare two dictionaries exactly |
496
+ | `assert_floats_equal()` | Compare numeric values with tolerance |
497
+ | `assert_strings_equal_normalized()` | Compare strings with normalization |
498
+ | `assert_collection_contains_record()` | Check if record exists in collection |
499
+ | `assert_datetimes_equal()` | Compare datetime values |
500
+
501
+ ### Runnable Examples
502
+
503
+ See **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** for 8 complete examples:
504
+
505
+ ```bash
506
+ # Run all data comparison examples
507
+ pytest examples/data_comparison_examples.py -v -s
508
+
509
+ # Run specific example
510
+ pytest examples/data_comparison_examples.py::test_excel_to_excel_basic -v -s
511
+ ```
512
+
513
+ ### Interactive HTML Reports ⭐ **NEW**
514
+
515
+ Generate filterable, searchable HTML validation reports:
516
+
517
+ ```python
518
+ from utils.data_comparison_report import DataComparisonReport
519
+
520
+ # Initialize report
521
+ report = DataComparisonReport()
522
+ report.set_comparison_type("FILE_TO_FILE (Excel)")
523
+ report.set_source("baseline.xlsx", 100)
524
+ report.set_target("current.xlsx", 100)
525
+
526
+ # Add mismatch
527
+ report.add_mismatch(
528
+ mismatch_type="VALUE_MISMATCH",
529
+ row_index=5,
530
+ mismatching_fields=["Price"],
531
+ source_value=99.99,
532
+ target_value=100.00,
533
+ reason="Price increased by $0.01"
534
+ )
535
+
536
+ # Generate interactive HTML report
537
+ report.generate_report("reports/data_validation/report.html")
538
+ ```
539
+
540
+ **Report Features:**
541
+ - 📊 KPI dashboard with pass/fail rates
542
+ - 🔍 Column-level filtering and search
543
+ - 📋 Row-by-row mismatch details
544
+ - 🎨 Color-coded status indicators
545
+ - 📱 Mobile-responsive design
546
+
547
+ See **[examples/data_comparison_with_html_report.py](examples/data_comparison_with_html_report.py)** for complete examples.
548
+
549
+ ### Full Documentation
550
+
551
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md#step-8--data-comparison-patterns)** - Complete patterns guide
552
+ - **[examples/README.md](examples/README.md)** - Examples documentation
553
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation
554
+
555
+ ---
556
+
440
557
  ## Unit Testing and Coverage
441
558
 
442
559
  ```bash
@@ -506,6 +623,7 @@ Each project config includes:
506
623
  - **[QUICK_START_QE.md](QUICK_START_QE.md)** - Get started in 10 minutes
507
624
  - **[TEST_LOCATION_CHEATSHEET.md](TEST_LOCATION_CHEATSHEET.md)** - One-page reference
508
625
  - **[COMMANDS_FOR_YOUR_PROJECTS.md](COMMANDS_FOR_YOUR_PROJECTS.md)** - Command reference
626
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md)** - Pip install guide with data comparison patterns
509
627
 
510
628
  ### Implementation
511
629
  - **[YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md](YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md)** - Step-by-step guide
@@ -517,6 +635,11 @@ Each project config includes:
517
635
  - **[docs/TEST_ORGANIZATION.md](docs/TEST_ORGANIZATION.md)** - Organization strategy
518
636
  - **[docs/QE_VISUAL_GUIDE.md](docs/QE_VISUAL_GUIDE.md)** - Visual guide with diagrams
519
637
 
638
+ ### Data Comparison & Validation
639
+ - **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** - Runnable examples for Excel, CSV, DB comparison
640
+ - **[examples/README.md](examples/README.md)** - Examples documentation
641
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation patterns
642
+
520
643
  ### Project Guides
521
644
  - **[tests/projects/timelyquote/README.md](tests/projects/timelyquote/README.md)** - TimelyQuote guide
522
645
  - **[tests/projects/dispatcho/README.md](tests/projects/dispatcho/README.md)** - Dispatcho guide
@@ -1,36 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: pyplaykit
3
- Version: 1.0.0
4
- Summary: Enterprise Python + Playwright automation framework
5
- Author-email: Shan Konduru <shankonduru@gmail.com>
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/ShanKonduru/pyplaykit
8
- Project-URL: Repository, https://github.com/ShanKonduru/pyplaykit
9
- Project-URL: Bug Tracker, https://github.com/ShanKonduru/pyplaykit/issues
10
- Keywords: playwright,pytest,automation,framework,enterprise,testing,page-object-model
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3 :: Only
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Framework :: Pytest
16
- Classifier: Topic :: Software Development :: Testing
17
- Classifier: Intended Audience :: Developers
18
- Classifier: License :: OSI Approved :: MIT License
19
- Classifier: Operating System :: OS Independent
20
- Requires-Python: >=3.11
21
- Description-Content-Type: text/markdown
22
- Requires-Dist: playwright==1.54.0
23
- Requires-Dist: pytest==8.4.1
24
- Requires-Dist: pytest-cov==6.2.1
25
- Requires-Dist: pytest-xdist==3.6.1
26
- Requires-Dist: pytest-rerunfailures==15.1
27
- Requires-Dist: pytest-html==4.1.1
28
- Requires-Dist: allure-pytest==2.13.5
29
- Requires-Dist: PyYAML==6.0.2
30
- Requires-Dist: python-dotenv>=1.0.0
31
- Requires-Dist: httpx>=0.27.0
32
- Requires-Dist: jmespath>=1.0.0
33
-
34
1
  # PyPlayKit - Enterprise Test Automation Framework
35
2
 
36
3
  **Tagline**: A modular, scalable, and CI/CD-ready Python + Playwright framework for enterprise automation supporting multiple projects and 50+ QE engineers.
@@ -45,10 +12,12 @@ PyPlayKit is a **multi-project enterprise test automation framework** built with
45
12
  - 🏢 **Multi-Project Support**: Separate test organization for multiple applications
46
13
  - 👥 **Scalable**: Designed for 50-100 QE engineers working simultaneously
47
14
  - 🎯 **Zero Merge Conflicts**: Project-first organization eliminates conflicts
15
+ - 📊 **Data Comparison**: File-to-File, File-to-DB, DB-to-File validation (Excel, CSV, JSON)
16
+ - 📈 **Interactive HTML Reports**: Filterable validation reports with KPIs ⭐ **NEW**
48
17
  - 📚 **Comprehensive Documentation**: 8,700+ lines across 15+ guides
49
18
  - 🔧 **Extensible**: Plugin architecture with orchestration support
50
19
  - 🔍 **Self-Healing**: Locator recovery with fallback chains
51
- - 📊 **Observable**: Comprehensive metrics and reporting
20
+ - 🔭 **Observable**: Comprehensive metrics and reporting
52
21
 
53
22
  ---
54
23
 
@@ -437,6 +406,118 @@ pytest tests/projects/timelyquote/functional/ui/quotes/test_create_quote.py -v
437
406
 
438
407
  ---
439
408
 
409
+ ## Data Comparison Patterns
410
+
411
+ PyPlayKit provides comprehensive data comparison capabilities using the built-in `DataValidator` utility.
412
+
413
+ ### Prerequisites for Data Comparison
414
+
415
+ ```bash
416
+ # Install data comparison dependencies
417
+ pip install pandas openpyxl
418
+
419
+ # Or use the examples requirements file
420
+ pip install -r examples/requirements.txt
421
+ ```
422
+
423
+ ### Supported Comparison Types
424
+
425
+ | Comparison Type | Use Case | Example |
426
+ |----------------|----------|---------|
427
+ | **File-to-File** | Compare Excel, CSV, JSON files | Validate data export/import |
428
+ | **File-to-Database** | Verify data loads into database | ETL validation |
429
+ | **Database-to-File** | Validate database exports | Report generation testing |
430
+
431
+ ### Quick Example: Excel-to-Excel Comparison
432
+
433
+ ```python
434
+ import pytest
435
+ import pandas as pd
436
+ from pathlib import Path
437
+ from pyplaykit import DataValidator
438
+
439
+ @pytest.mark.data
440
+ def test_compare_excel_files(logger):
441
+ # Read both files
442
+ df1 = pd.read_excel("report_baseline.xlsx")
443
+ df2 = pd.read_excel("report_current.xlsx")
444
+
445
+ records1 = df1.to_dict('records')
446
+ records2 = df2.to_dict('records')
447
+
448
+ # Compare row by row
449
+ for idx, (r1, r2) in enumerate(zip(records1, records2)):
450
+ DataValidator.assert_records_equal(r1, r2)
451
+
452
+ logger.info("✓ Files match!")
453
+ ```
454
+
455
+ ### DataValidator Methods
456
+
457
+ | Method | Purpose |
458
+ |--------|---------|
459
+ | `assert_records_equal()` | Compare two dictionaries exactly |
460
+ | `assert_floats_equal()` | Compare numeric values with tolerance |
461
+ | `assert_strings_equal_normalized()` | Compare strings with normalization |
462
+ | `assert_collection_contains_record()` | Check if record exists in collection |
463
+ | `assert_datetimes_equal()` | Compare datetime values |
464
+
465
+ ### Runnable Examples
466
+
467
+ See **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** for 8 complete examples:
468
+
469
+ ```bash
470
+ # Run all data comparison examples
471
+ pytest examples/data_comparison_examples.py -v -s
472
+
473
+ # Run specific example
474
+ pytest examples/data_comparison_examples.py::test_excel_to_excel_basic -v -s
475
+ ```
476
+
477
+ ### Interactive HTML Reports ⭐ **NEW**
478
+
479
+ Generate filterable, searchable HTML validation reports:
480
+
481
+ ```python
482
+ from utils.data_comparison_report import DataComparisonReport
483
+
484
+ # Initialize report
485
+ report = DataComparisonReport()
486
+ report.set_comparison_type("FILE_TO_FILE (Excel)")
487
+ report.set_source("baseline.xlsx", 100)
488
+ report.set_target("current.xlsx", 100)
489
+
490
+ # Add mismatch
491
+ report.add_mismatch(
492
+ mismatch_type="VALUE_MISMATCH",
493
+ row_index=5,
494
+ mismatching_fields=["Price"],
495
+ source_value=99.99,
496
+ target_value=100.00,
497
+ reason="Price increased by $0.01"
498
+ )
499
+
500
+ # Generate interactive HTML report
501
+ report.generate_report("reports/data_validation/report.html")
502
+ ```
503
+
504
+ **Report Features:**
505
+ - 📊 KPI dashboard with pass/fail rates
506
+ - 🔍 Column-level filtering and search
507
+ - 📋 Row-by-row mismatch details
508
+ - 🎨 Color-coded status indicators
509
+ - 📱 Mobile-responsive design
510
+
511
+ See **[examples/data_comparison_with_html_report.py](examples/data_comparison_with_html_report.py)** for complete examples.
512
+
513
+ ### Full Documentation
514
+
515
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md#step-8--data-comparison-patterns)** - Complete patterns guide
516
+ - **[examples/README.md](examples/README.md)** - Examples documentation
517
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation
518
+
519
+ ---
520
+
440
521
  ## Unit Testing and Coverage
441
522
 
442
523
  ```bash
@@ -506,6 +587,7 @@ Each project config includes:
506
587
  - **[QUICK_START_QE.md](QUICK_START_QE.md)** - Get started in 10 minutes
507
588
  - **[TEST_LOCATION_CHEATSHEET.md](TEST_LOCATION_CHEATSHEET.md)** - One-page reference
508
589
  - **[COMMANDS_FOR_YOUR_PROJECTS.md](COMMANDS_FOR_YOUR_PROJECTS.md)** - Command reference
590
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md)** - Pip install guide with data comparison patterns
509
591
 
510
592
  ### Implementation
511
593
  - **[YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md](YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md)** - Step-by-step guide
@@ -517,6 +599,11 @@ Each project config includes:
517
599
  - **[docs/TEST_ORGANIZATION.md](docs/TEST_ORGANIZATION.md)** - Organization strategy
518
600
  - **[docs/QE_VISUAL_GUIDE.md](docs/QE_VISUAL_GUIDE.md)** - Visual guide with diagrams
519
601
 
602
+ ### Data Comparison & Validation
603
+ - **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** - Runnable examples for Excel, CSV, DB comparison
604
+ - **[examples/README.md](examples/README.md)** - Examples documentation
605
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation patterns
606
+
520
607
  ### Project Guides
521
608
  - **[tests/projects/timelyquote/README.md](tests/projects/timelyquote/README.md)** - TimelyQuote guide
522
609
  - **[tests/projects/dispatcho/README.md](tests/projects/dispatcho/README.md)** - Dispatcho guide
@@ -13,27 +13,56 @@ from core.base_page import BasePage
13
13
  from utils.api_client import ApiClient, ApiResponse
14
14
  from utils.auth_manager import AuthTokenManager
15
15
  from utils.data_validator import DataValidator
16
+ from utils.ui_db_validator import UIDbValidator
17
+ from utils.graphql_client import GraphQLClient, GraphQLResponse, GraphQLValidator
18
+ from utils.soap_client import SoapClient, SoapResponse, SoapValidator
16
19
  from utils.db_client import BaseDbClient, DbClient
20
+ from utils.transformation_validator import (
21
+ ColumnSpec,
22
+ PairRule,
23
+ RowRule,
24
+ RuleValidator,
25
+ TransformationValidator,
26
+ Violation,
27
+ )
17
28
  from utils.db_fixtures import DbCleaner, DbSeeder, DbTransaction
29
+ from utils.data_source import ChunkedDbDataSource
18
30
  from utils.logger import get_logger
19
31
  from utils.response_validator import ResponseValidator
20
32
 
21
- __version__ = "1.0.0"
33
+ __version__ = "1.3.0"
22
34
 
23
35
  __all__ = [
24
- # HTTP / API
36
+ # HTTP / API — REST
25
37
  "ApiClient",
26
38
  "ApiResponse",
27
39
  "AuthTokenManager",
28
40
  "ResponseValidator",
41
+ # HTTP / API — GraphQL
42
+ "GraphQLClient",
43
+ "GraphQLResponse",
44
+ "GraphQLValidator",
45
+ # HTTP / API — SOAP
46
+ "SoapClient",
47
+ "SoapResponse",
48
+ "SoapValidator",
29
49
  # Data validation
30
50
  "DataValidator",
51
+ "UIDbValidator",
52
+ # Transformation + rule-based validation
53
+ "ColumnSpec",
54
+ "TransformationValidator",
55
+ "RowRule",
56
+ "PairRule",
57
+ "RuleValidator",
58
+ "Violation",
31
59
  # Database
32
60
  "BaseDbClient",
33
61
  "DbClient",
34
62
  "DbTransaction",
35
63
  "DbSeeder",
36
64
  "DbCleaner",
65
+ "ChunkedDbDataSource",
37
66
  # UI
38
67
  "BasePage",
39
68
  "BaseComponent",
@@ -1,3 +1,39 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyplaykit
3
+ Version: 1.5.0
4
+ Summary: Enterprise Python + Playwright automation framework
5
+ Author-email: Shan Konduru <shankonduru@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/ShanKonduru/pyplaykit
8
+ Project-URL: Repository, https://github.com/ShanKonduru/pyplaykit
9
+ Project-URL: Bug Tracker, https://github.com/ShanKonduru/pyplaykit/issues
10
+ Keywords: playwright,pytest,automation,framework,enterprise,testing,page-object-model
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3 :: Only
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Framework :: Pytest
16
+ Classifier: Topic :: Software Development :: Testing
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Operating System :: OS Independent
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: playwright==1.54.0
23
+ Requires-Dist: pytest==9.1.1
24
+ Requires-Dist: pytest-cov==7.1.0
25
+ Requires-Dist: pytest-xdist==3.8.0
26
+ Requires-Dist: pytest-rerunfailures==16.4
27
+ Requires-Dist: pytest-html==4.2.0
28
+ Requires-Dist: allure-pytest==2.16.0
29
+ Requires-Dist: PyYAML==6.0.2
30
+ Requires-Dist: python-dotenv>=1.0.0
31
+ Requires-Dist: httpx>=0.27.0
32
+ Requires-Dist: jmespath>=1.0.0
33
+ Requires-Dist: xlrd>=2.0.1
34
+ Requires-Dist: zeep>=4.2.1
35
+ Requires-Dist: gql[httpx]>=3.5.0
36
+
1
37
  # PyPlayKit - Enterprise Test Automation Framework
2
38
 
3
39
  **Tagline**: A modular, scalable, and CI/CD-ready Python + Playwright framework for enterprise automation supporting multiple projects and 50+ QE engineers.
@@ -12,10 +48,12 @@ PyPlayKit is a **multi-project enterprise test automation framework** built with
12
48
  - 🏢 **Multi-Project Support**: Separate test organization for multiple applications
13
49
  - 👥 **Scalable**: Designed for 50-100 QE engineers working simultaneously
14
50
  - 🎯 **Zero Merge Conflicts**: Project-first organization eliminates conflicts
51
+ - 📊 **Data Comparison**: File-to-File, File-to-DB, DB-to-File validation (Excel, CSV, JSON)
52
+ - 📈 **Interactive HTML Reports**: Filterable validation reports with KPIs ⭐ **NEW**
15
53
  - 📚 **Comprehensive Documentation**: 8,700+ lines across 15+ guides
16
54
  - 🔧 **Extensible**: Plugin architecture with orchestration support
17
55
  - 🔍 **Self-Healing**: Locator recovery with fallback chains
18
- - 📊 **Observable**: Comprehensive metrics and reporting
56
+ - 🔭 **Observable**: Comprehensive metrics and reporting
19
57
 
20
58
  ---
21
59
 
@@ -404,6 +442,118 @@ pytest tests/projects/timelyquote/functional/ui/quotes/test_create_quote.py -v
404
442
 
405
443
  ---
406
444
 
445
+ ## Data Comparison Patterns
446
+
447
+ PyPlayKit provides comprehensive data comparison capabilities using the built-in `DataValidator` utility.
448
+
449
+ ### Prerequisites for Data Comparison
450
+
451
+ ```bash
452
+ # Install data comparison dependencies
453
+ pip install pandas openpyxl
454
+
455
+ # Or use the examples requirements file
456
+ pip install -r examples/requirements.txt
457
+ ```
458
+
459
+ ### Supported Comparison Types
460
+
461
+ | Comparison Type | Use Case | Example |
462
+ |----------------|----------|---------|
463
+ | **File-to-File** | Compare Excel, CSV, JSON files | Validate data export/import |
464
+ | **File-to-Database** | Verify data loads into database | ETL validation |
465
+ | **Database-to-File** | Validate database exports | Report generation testing |
466
+
467
+ ### Quick Example: Excel-to-Excel Comparison
468
+
469
+ ```python
470
+ import pytest
471
+ import pandas as pd
472
+ from pathlib import Path
473
+ from pyplaykit import DataValidator
474
+
475
+ @pytest.mark.data
476
+ def test_compare_excel_files(logger):
477
+ # Read both files
478
+ df1 = pd.read_excel("report_baseline.xlsx")
479
+ df2 = pd.read_excel("report_current.xlsx")
480
+
481
+ records1 = df1.to_dict('records')
482
+ records2 = df2.to_dict('records')
483
+
484
+ # Compare row by row
485
+ for idx, (r1, r2) in enumerate(zip(records1, records2)):
486
+ DataValidator.assert_records_equal(r1, r2)
487
+
488
+ logger.info("✓ Files match!")
489
+ ```
490
+
491
+ ### DataValidator Methods
492
+
493
+ | Method | Purpose |
494
+ |--------|---------|
495
+ | `assert_records_equal()` | Compare two dictionaries exactly |
496
+ | `assert_floats_equal()` | Compare numeric values with tolerance |
497
+ | `assert_strings_equal_normalized()` | Compare strings with normalization |
498
+ | `assert_collection_contains_record()` | Check if record exists in collection |
499
+ | `assert_datetimes_equal()` | Compare datetime values |
500
+
501
+ ### Runnable Examples
502
+
503
+ See **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** for 8 complete examples:
504
+
505
+ ```bash
506
+ # Run all data comparison examples
507
+ pytest examples/data_comparison_examples.py -v -s
508
+
509
+ # Run specific example
510
+ pytest examples/data_comparison_examples.py::test_excel_to_excel_basic -v -s
511
+ ```
512
+
513
+ ### Interactive HTML Reports ⭐ **NEW**
514
+
515
+ Generate filterable, searchable HTML validation reports:
516
+
517
+ ```python
518
+ from utils.data_comparison_report import DataComparisonReport
519
+
520
+ # Initialize report
521
+ report = DataComparisonReport()
522
+ report.set_comparison_type("FILE_TO_FILE (Excel)")
523
+ report.set_source("baseline.xlsx", 100)
524
+ report.set_target("current.xlsx", 100)
525
+
526
+ # Add mismatch
527
+ report.add_mismatch(
528
+ mismatch_type="VALUE_MISMATCH",
529
+ row_index=5,
530
+ mismatching_fields=["Price"],
531
+ source_value=99.99,
532
+ target_value=100.00,
533
+ reason="Price increased by $0.01"
534
+ )
535
+
536
+ # Generate interactive HTML report
537
+ report.generate_report("reports/data_validation/report.html")
538
+ ```
539
+
540
+ **Report Features:**
541
+ - 📊 KPI dashboard with pass/fail rates
542
+ - 🔍 Column-level filtering and search
543
+ - 📋 Row-by-row mismatch details
544
+ - 🎨 Color-coded status indicators
545
+ - 📱 Mobile-responsive design
546
+
547
+ See **[examples/data_comparison_with_html_report.py](examples/data_comparison_with_html_report.py)** for complete examples.
548
+
549
+ ### Full Documentation
550
+
551
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md#step-8--data-comparison-patterns)** - Complete patterns guide
552
+ - **[examples/README.md](examples/README.md)** - Examples documentation
553
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation
554
+
555
+ ---
556
+
407
557
  ## Unit Testing and Coverage
408
558
 
409
559
  ```bash
@@ -473,6 +623,7 @@ Each project config includes:
473
623
  - **[QUICK_START_QE.md](QUICK_START_QE.md)** - Get started in 10 minutes
474
624
  - **[TEST_LOCATION_CHEATSHEET.md](TEST_LOCATION_CHEATSHEET.md)** - One-page reference
475
625
  - **[COMMANDS_FOR_YOUR_PROJECTS.md](COMMANDS_FOR_YOUR_PROJECTS.md)** - Command reference
626
+ - **[docs/PIP_INSTALL_GUIDE.md](docs/PIP_INSTALL_GUIDE.md)** - Pip install guide with data comparison patterns
476
627
 
477
628
  ### Implementation
478
629
  - **[YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md](YOUR_PROJECTS_IMPLEMENTATION_GUIDE.md)** - Step-by-step guide
@@ -484,6 +635,11 @@ Each project config includes:
484
635
  - **[docs/TEST_ORGANIZATION.md](docs/TEST_ORGANIZATION.md)** - Organization strategy
485
636
  - **[docs/QE_VISUAL_GUIDE.md](docs/QE_VISUAL_GUIDE.md)** - Visual guide with diagrams
486
637
 
638
+ ### Data Comparison & Validation
639
+ - **[examples/data_comparison_examples.py](examples/data_comparison_examples.py)** - Runnable examples for Excel, CSV, DB comparison
640
+ - **[examples/README.md](examples/README.md)** - Examples documentation
641
+ - **[docs/DATA_VALIDATION_GUIDE.md](docs/DATA_VALIDATION_GUIDE.md)** - Advanced validation patterns
642
+
487
643
  ### Project Guides
488
644
  - **[tests/projects/timelyquote/README.md](tests/projects/timelyquote/README.md)** - TimelyQuote guide
489
645
  - **[tests/projects/dispatcho/README.md](tests/projects/dispatcho/README.md)** - Dispatcho guide
@@ -58,6 +58,7 @@ utils/api_client.py
58
58
  utils/api_test_helper.py
59
59
  utils/assertion_helper.py
60
60
  utils/auth_manager.py
61
+ utils/data_comparison_report.py
61
62
  utils/data_loader.py
62
63
  utils/data_source.py
63
64
  utils/data_validator.py
@@ -68,11 +69,15 @@ utils/db_pool.py
68
69
  utils/db_validation_helper.py
69
70
  utils/environment_validator.py
70
71
  utils/file_reader.py
72
+ utils/graphql_client.py
71
73
  utils/logger.py
72
74
  utils/observability.py
73
75
  utils/response_validator.py
74
76
  utils/screenshot_helper.py
77
+ utils/soap_client.py
75
78
  utils/tdm.py
79
+ utils/transformation_validator.py
80
+ utils/ui_db_validator.py
76
81
  utils/yaml_config_reader.py
77
82
  utils/db_drivers/__init__.py
78
83
  utils/db_drivers/db2.py
@@ -0,0 +1,14 @@
1
+ playwright==1.54.0
2
+ pytest==9.1.1
3
+ pytest-cov==7.1.0
4
+ pytest-xdist==3.8.0
5
+ pytest-rerunfailures==16.4
6
+ pytest-html==4.2.0
7
+ allure-pytest==2.16.0
8
+ PyYAML==6.0.2
9
+ python-dotenv>=1.0.0
10
+ httpx>=0.27.0
11
+ jmespath>=1.0.0
12
+ xlrd>=2.0.1
13
+ zeep>=4.2.1
14
+ gql[httpx]>=3.5.0