df-test-framework 4.4.3__tar.gz → 4.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.
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/CHANGELOG.md +27 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/PKG-INFO +1 -1
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/testing.md +3 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/decorators_guide.md +30 -5
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/service_client_guide.md +51 -14
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/web-ui-testing.md +77 -7
- df_test_framework-4.5.0/docs/releases/v4.4.4.md +82 -0
- df_test_framework-4.5.0/docs/releases/v4.5.0.md +235 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/pyproject.toml +1 -1
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/__init__.py +20 -2
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +56 -21
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/init_cmd.py +7 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/__init__.py +4 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/__init__.py +4 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/conftest.py +4 -1
- df_test_framework-4.5.0/src/df_test_framework/cli/templates/project/default_http_client.py +26 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/full_conftest.py +11 -2
- df_test_framework-4.5.0/src/df_test_framework/cli/templates/project/ui_clients.py +16 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +5 -2
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/decorators/__init__.py +13 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/decorators/actions_class.py +51 -44
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/decorators/api_class.py +7 -1
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/decorators/service_client.py +37 -8
- df_test_framework-4.5.0/src/df_test_framework/testing/decorators/ui_client.py +455 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/auth.py +9 -3
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/ui.py +187 -150
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/decorators/test_actions_class.py +52 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/decorators/test_api_class.py +10 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/decorators/test_service_client.py +33 -4
- df_test_framework-4.5.0/tests/testing/decorators/test_ui_client.py +83 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_ui_fixtures.py +652 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/uv.lock +1 -1
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.editorconfig +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.env.example +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.gitattributes +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.gitignore +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.gitleaks.toml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.gitleaksignore +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/.python-version +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/AGENTS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/CLAUDE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/README_PYPI.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/FAQ.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/architecture//344/272/224/345/261/202/346/236/266/346/236/204/350/257/246/350/247/243.md" +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/BaseAPI/346/234/200/344/275/263/345/256/236/350/267/265/346/214/207/345/215/227.md" +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/v1//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251/346/265/213/350/257/225/346/241/206/346/236/266.md" +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/development/local-development.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/fixture_chain_pattern.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/fixtures_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/helpers_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/sanitize_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/storage.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/migration/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.2.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.2.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.2.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.3.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.3.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.4.0.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.4.1.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.4.2.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/releases/v4.4.3.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/examples/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/fixture_chain_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/schema.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/helpers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/helpers/hash.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/helpers/signature.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/plugins/builtin/reporting/oms_reporter_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/debugging/console.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/core.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/http_recorder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/README.md +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/conftest.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_context.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_events.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/core/test_types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/sanitize/test_service.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_helpers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_http_recorder.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.4.3 → df_test_framework-4.5.0}/verify_fixes.py +0 -0
|
@@ -5,6 +5,33 @@
|
|
|
5
5
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
|
|
6
6
|
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [4.5.0] - 2026-05-12
|
|
9
|
+
|
|
10
|
+
### ✨ 新增
|
|
11
|
+
|
|
12
|
+
- **`ui_client()` — 命名多前端客户端系统**:通过 `ui_client(name, base_url_config=..., storage_state=..., default=True)` 声明独立 UI Client(B 端后台、H5、WebView 等),每套 Client 拥有独立 `base_url`、`storage_state`、`viewport` 和完整 `page/context/browser_manager` fixture 组。`load_ui_client_fixtures(globals())` 自动生成全套命名 fixture 及默认别名
|
|
13
|
+
- **`service_client(default=True)` — 默认 HTTP Client 注册**:`@service_client` 新增 `default=True` 参数,注册的客户端自动提供 `http_client` alias fixture,`@api_class()` 可无感绑定默认客户端
|
|
14
|
+
- **`@api_class(http_client=...)` — 显式绑定 HTTP Client**:多服务项目通过 `@api_class(http_client="payment_http_client")` 指定非默认客户端,彻底消除多后端并行测试的 fixture 混淆
|
|
15
|
+
- **`@actions_class(ui_client=...)` — 显式绑定 UI Client**:多前端项目通过 `@actions_class(ui_client="h5_ui")` 将 Actions 绑定到具体前端,page/browser_manager 等依赖从绑定 Client 解析,不再静默回退全局 `page`
|
|
16
|
+
|
|
17
|
+
### ♻️ 重构
|
|
18
|
+
|
|
19
|
+
- **脚手架客户端目录统一**:`df-test init` 生成的默认 HTTP Client(`default_http_client.py`)和 UI Client(`ui_clients.py`)统一放入 `clients/` 目录;conftest 从 `{project}.clients` 加载服务客户端
|
|
20
|
+
|
|
21
|
+
### 🐛 修复
|
|
22
|
+
|
|
23
|
+
- **多 UI Client 同步混跑**:同步 `BrowserManager` 和 `AuthSetup` 共用进程内 Playwright 实例(引用计数管理),多 UI Client 场景下不再各自独立启动 Playwright,避免进程内多实例冲突
|
|
24
|
+
|
|
25
|
+
## [4.4.4] - 2026-04-23
|
|
26
|
+
|
|
27
|
+
### 🐛 修复
|
|
28
|
+
|
|
29
|
+
- **(P1) `async_context` / `async_page` decorator 错误**:这两个 fixture 原先标注的是 `@pytest.fixture`,在 pytest-asyncio >= 0.21 下异步生成器必须使用 `@pytest_asyncio.fixture`,导致运行时报错。同步修复 `async_goto`、`async_screenshot`、`async_app_actions` 的装饰器一致性问题
|
|
30
|
+
- **(P2) 异步截图 fire-and-forget 不可靠**:`pytest_runtest_makereport` hook 里用 `asyncio.create_task` 发起截图任务未 await,截图未完成就执行了 `page.close()`,导致异步测试失败时截图为空。截图逻辑已迁移至 `page`/`async_page` fixture teardown,在 `p.close()` 前同步/await 执行
|
|
31
|
+
- **(P2) 视频路径对异步 Page 调用同步 `video.path()`**:异步 Playwright Page 的 `video.path()` 返回 coroutine,直接调用会得到 coroutine 对象而不是路径字符串。修复方案:视频路径在 `page`/`async_page` teardown 里通过 `_UI_VIDEO_PATH_KEY` stash 传递给 `context` teardown,异步路径用 `await` 调用
|
|
32
|
+
- **(P3) 多 tab 截图/视频目标取 `pages[0]` 不准确**:多 tab 场景下失败通常发生在最后打开的页面(popup/新 tab),截图和视频目标统一改为 `context.pages[-1]`
|
|
33
|
+
- **(P3) 截图文件名含非法字符导致 Windows 路径错误**:pytest 参数化测试的 `item.name` 含 `[`、`/`、`:`、`*` 等字符,Windows 下产生非法路径。新增 `_sanitize_filename()` 对文件名做 sanitize,将非法字符替换为 `_`
|
|
34
|
+
|
|
8
35
|
## [4.4.3] - 2026-04-23
|
|
9
36
|
|
|
10
37
|
### ♻️ 重构
|
|
@@ -26,9 +26,11 @@ from df_test_framework.testing.decorators import (
|
|
|
26
26
|
api_class,
|
|
27
27
|
actions_class,
|
|
28
28
|
service_client, # v4.2.0 新增
|
|
29
|
+
ui_client, # UI Client 声明
|
|
29
30
|
load_api_fixtures,
|
|
30
31
|
load_actions_fixtures,
|
|
31
32
|
load_service_fixtures, # v4.2.0 新增
|
|
33
|
+
load_ui_client_fixtures,
|
|
32
34
|
get_service_registry, # v4.2.0 新增
|
|
33
35
|
)
|
|
34
36
|
|
|
@@ -1144,6 +1146,7 @@ def test_create_card(
|
|
|
1144
1146
|
name: str | None = None, # fixture 名称(默认从类名生成)
|
|
1145
1147
|
scope: str = "session", # pytest fixture scope
|
|
1146
1148
|
base_url_config: str | None = None, # settings 配置路径(dot notation)
|
|
1149
|
+
default: bool = False, # 是否额外注册默认 http_client
|
|
1147
1150
|
**dependencies: Any, # 额外依赖映射
|
|
1148
1151
|
)
|
|
1149
1152
|
```
|
|
@@ -14,9 +14,11 @@ DF Test Framework 提供了两类装饰器,帮助简化测试代码和增强
|
|
|
14
14
|
- **@api_class**: 自动将 BaseAPI 子类注册为 pytest fixture
|
|
15
15
|
- **@actions_class**: 自动将 AppActions 子类注册为 pytest fixture
|
|
16
16
|
- **@service_client**: 自动将独立服务客户端注册为 pytest fixture(v4.2.0)
|
|
17
|
+
- **ui_client()**: 声明命名 UI Client,支持默认前端与多前端绑定
|
|
17
18
|
- **load_api_fixtures()**: 自动加载所有 API fixtures
|
|
18
19
|
- **load_actions_fixtures()**: 自动加载所有 Actions fixtures
|
|
19
20
|
- **load_service_fixtures()**: 自动加载所有服务客户端 fixtures(v4.2.0)
|
|
21
|
+
- **load_ui_client_fixtures()**: 自动加载所有 UI Client fixtures
|
|
20
22
|
|
|
21
23
|
### 通用装饰器(Core Decorators)
|
|
22
24
|
|
|
@@ -140,6 +142,15 @@ class CustomAPI(BaseAPI):
|
|
|
140
142
|
self.settings = settings
|
|
141
143
|
```
|
|
142
144
|
|
|
145
|
+
多服务项目可以直接绑定非默认 HTTP Client:
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
@api_class("h5_order_api", http_client="h5_auth_client")
|
|
149
|
+
class H5OrderAPI(BaseAPI):
|
|
150
|
+
def __init__(self, http_client):
|
|
151
|
+
super().__init__(http_client)
|
|
152
|
+
```
|
|
153
|
+
|
|
143
154
|
### 自动加载 API Fixtures
|
|
144
155
|
|
|
145
156
|
在 `conftest.py` 中使用 `load_api_fixtures()` 自动加载所有 API:
|
|
@@ -189,6 +200,8 @@ def test_multiple_apis(user_api, order_api):
|
|
|
189
200
|
### 基本用法
|
|
190
201
|
|
|
191
202
|
`@actions_class` 装饰器自动将 AppActions 子类注册为 pytest fixture,用于 UI 测试。
|
|
203
|
+
项目必须先通过 `ui_client(..., default=True)` 声明默认 UI Client;多前端 Actions
|
|
204
|
+
通过 `@actions_class(ui_client="h5_ui")` 显式绑定。
|
|
192
205
|
|
|
193
206
|
```python
|
|
194
207
|
from df_test_framework import AppActions
|
|
@@ -237,13 +250,16 @@ class SharedActions(AppActions):
|
|
|
237
250
|
|
|
238
251
|
### 自动加载 Actions Fixtures
|
|
239
252
|
|
|
240
|
-
在 `conftest.py`
|
|
253
|
+
在 `conftest.py` 中先加载 UI Client,再使用 `load_actions_fixtures()` 自动加载所有 Actions:
|
|
241
254
|
|
|
242
255
|
```python
|
|
243
256
|
# conftest.py
|
|
244
|
-
from df_test_framework.testing.decorators import load_actions_fixtures
|
|
257
|
+
from df_test_framework.testing.decorators import load_actions_fixtures, load_ui_client_fixtures
|
|
258
|
+
|
|
259
|
+
import myproject.ui_clients # noqa: F401 触发 UI Client 注册
|
|
245
260
|
|
|
246
261
|
# 方式1: 自动发现模式(推荐)
|
|
262
|
+
load_ui_client_fixtures(globals())
|
|
247
263
|
load_actions_fixtures(globals(), actions_package="myproject.actions")
|
|
248
264
|
|
|
249
265
|
# 方式2: 手动导入模式
|
|
@@ -279,8 +295,8 @@ def test_order_flow(login_actions, order_actions):
|
|
|
279
295
|
| 基类 | `BaseAPI` | `AppActions` | 无要求 |
|
|
280
296
|
| 默认 scope | `session` | `function` | `session` |
|
|
281
297
|
| 配置字段 | `test.apis_package` | `test.actions_package` | `base_url_config` |
|
|
282
|
-
| 目录约定 | `apis/` | `actions/` | `
|
|
283
|
-
| 自动依赖 | `http_client` | `page
|
|
298
|
+
| 目录约定 | `apis/` | `actions/` | `clients/` |
|
|
299
|
+
| 自动依赖 | 默认 `http_client`,可用 `http_client=` 指定 | 默认 UI Client 的 `page`,可用 `ui_client=` 指定 | 按 `__init__` 签名推断 |
|
|
284
300
|
|
|
285
301
|
---
|
|
286
302
|
|
|
@@ -321,13 +337,22 @@ class MyClient:
|
|
|
321
337
|
self.redis = redis_client # 自动注入 redis_client fixture
|
|
322
338
|
```
|
|
323
339
|
|
|
340
|
+
多服务项目推荐声明默认 HTTP Client,`@api_class()` 会继续依赖 `http_client` 这个默认别名:
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
@service_client("admin_http_client", base_url_config="http.base_url", default=True, runtime="runtime")
|
|
344
|
+
class AdminHttpClient(HttpClient):
|
|
345
|
+
def __init__(self, base_url: str, runtime=None) -> None:
|
|
346
|
+
super().__init__(base_url=base_url, runtime=runtime)
|
|
347
|
+
```
|
|
348
|
+
|
|
324
349
|
### 自动加载
|
|
325
350
|
|
|
326
351
|
```python
|
|
327
352
|
# conftest.py
|
|
328
353
|
from df_test_framework.testing.decorators import load_service_fixtures
|
|
329
354
|
|
|
330
|
-
load_service_fixtures(globals(), services_package="my_project.
|
|
355
|
+
load_service_fixtures(globals(), services_package="my_project.clients")
|
|
331
356
|
```
|
|
332
357
|
|
|
333
358
|
### 在测试中使用
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
- 调用的服务有独立的 base_url(不同于主测试目标)
|
|
23
23
|
- 使用不同的认证方式(如独立的 API Key)
|
|
24
24
|
- 不需要继承 BaseAPI 的轻量客户端
|
|
25
|
+
- 多服务项目需要显式声明默认 `http_client`
|
|
25
26
|
|
|
26
27
|
---
|
|
27
28
|
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
携带 EventBus,是失败 section、console_debugger、Allure HTTP attachment 的工作前提。
|
|
34
35
|
|
|
35
36
|
```python
|
|
36
|
-
#
|
|
37
|
+
# clients/payment_client.py
|
|
37
38
|
from df_test_framework import HttpClient
|
|
38
39
|
from df_test_framework.testing.decorators import service_client
|
|
39
40
|
|
|
@@ -55,6 +56,40 @@ class PaymentClient(HttpClient):
|
|
|
55
56
|
return resp.json()
|
|
56
57
|
```
|
|
57
58
|
|
|
59
|
+
### 默认 HTTP Client
|
|
60
|
+
|
|
61
|
+
多服务项目应显式声明默认 HTTP Client。被标记为 `default=True` 的服务客户端会额外注册
|
|
62
|
+
`http_client` fixture,`@api_class()` 默认继续依赖这个显式默认客户端。
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
from df_test_framework import HttpClient
|
|
66
|
+
from df_test_framework.testing.decorators import service_client
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@service_client(
|
|
70
|
+
"admin_http_client",
|
|
71
|
+
base_url_config="http.base_url",
|
|
72
|
+
default=True,
|
|
73
|
+
runtime="runtime",
|
|
74
|
+
)
|
|
75
|
+
class AdminHttpClient(HttpClient):
|
|
76
|
+
def __init__(self, base_url: str, runtime=None) -> None:
|
|
77
|
+
super().__init__(
|
|
78
|
+
base_url=base_url,
|
|
79
|
+
config=runtime.settings.http if runtime else None,
|
|
80
|
+
runtime=runtime,
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
其他系统继续声明为独立客户端:
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
@service_client("h5_http_client", base_url_config="business.h5_base_url")
|
|
88
|
+
class H5HttpClient(HttpClient):
|
|
89
|
+
def __init__(self, base_url: str, runtime=None) -> None:
|
|
90
|
+
super().__init__(base_url=base_url, runtime=runtime)
|
|
91
|
+
```
|
|
92
|
+
|
|
58
93
|
> **v4.4.1 强制要求**:`HttpClient`/`AsyncHttpClient` 子类必须在 `__init__` 接受
|
|
59
94
|
> `runtime` 并透传给 `super().__init__`。否则 `load_service_fixtures()` 会触发
|
|
60
95
|
> `ServiceClientObservabilityWarning`,且该客户端的所有 HTTP 请求 **不会** 出现在
|
|
@@ -75,7 +110,7 @@ business:
|
|
|
75
110
|
# conftest.py
|
|
76
111
|
from df_test_framework.testing.decorators import load_service_fixtures
|
|
77
112
|
|
|
78
|
-
load_service_fixtures(globals(), services_package="my_project.
|
|
113
|
+
load_service_fixtures(globals(), services_package="my_project.clients")
|
|
79
114
|
```
|
|
80
115
|
|
|
81
116
|
### 4. 在测试中使用
|
|
@@ -330,17 +365,17 @@ class UserCenterClient: ...
|
|
|
330
365
|
# conftest.py
|
|
331
366
|
from df_test_framework.testing.decorators import load_service_fixtures
|
|
332
367
|
|
|
333
|
-
load_service_fixtures(globals(), services_package="my_project.
|
|
368
|
+
load_service_fixtures(globals(), services_package="my_project.clients")
|
|
334
369
|
```
|
|
335
370
|
|
|
336
|
-
自动导入 `my_project.
|
|
371
|
+
自动导入 `my_project.clients` 包下所有模块,触发 `@service_client` 装饰器注册。
|
|
337
372
|
|
|
338
373
|
### 方式2:手动导入
|
|
339
374
|
|
|
340
375
|
```python
|
|
341
376
|
# conftest.py
|
|
342
|
-
from my_project.
|
|
343
|
-
from my_project.
|
|
377
|
+
from my_project.clients.payment_client import PaymentClient # noqa: F401
|
|
378
|
+
from my_project.clients.sms_client import SmsClient # noqa: F401
|
|
344
379
|
from df_test_framework.testing.decorators import load_service_fixtures
|
|
345
380
|
|
|
346
381
|
load_service_fixtures(globals())
|
|
@@ -348,7 +383,9 @@ load_service_fixtures(globals())
|
|
|
348
383
|
|
|
349
384
|
### 与 load_api_fixtures 共存
|
|
350
385
|
|
|
351
|
-
可以同时使用 `load_api_fixtures` 和 `load_service_fixtures
|
|
386
|
+
可以同时使用 `load_api_fixtures` 和 `load_service_fixtures`。如果项目声明了
|
|
387
|
+
`@service_client(default=True)`,必须先加载服务客户端,再加载 API 类,确保
|
|
388
|
+
`@api_class()` 默认依赖的 `http_client` 指向项目显式默认客户端:
|
|
352
389
|
|
|
353
390
|
```python
|
|
354
391
|
# conftest.py
|
|
@@ -357,11 +394,11 @@ from df_test_framework.testing.decorators import (
|
|
|
357
394
|
load_service_fixtures,
|
|
358
395
|
)
|
|
359
396
|
|
|
360
|
-
#
|
|
361
|
-
|
|
397
|
+
# 独立服务客户端;default=True 会额外注册 http_client
|
|
398
|
+
load_service_fixtures(globals(), services_package="my_project.clients")
|
|
362
399
|
|
|
363
|
-
#
|
|
364
|
-
|
|
400
|
+
# BaseAPI 子类(共享显式默认 http_client)
|
|
401
|
+
load_api_fixtures(globals(), apis_package="my_project.apis")
|
|
365
402
|
```
|
|
366
403
|
|
|
367
404
|
---
|
|
@@ -372,7 +409,7 @@ load_service_fixtures(globals(), services_package="my_project.apis")
|
|
|
372
409
|
from df_test_framework import get_service_registry
|
|
373
410
|
|
|
374
411
|
registry = get_service_registry()
|
|
375
|
-
for name, (cls, scope, config, deps) in registry.items():
|
|
412
|
+
for name, (cls, scope, config, deps, is_default) in registry.items():
|
|
376
413
|
print(f"{name}: {cls.__name__} (scope={scope}, config={config})")
|
|
377
414
|
```
|
|
378
415
|
|
|
@@ -383,9 +420,9 @@ for name, (cls, scope, config, deps) in registry.items():
|
|
|
383
420
|
### 1. 按服务拆分文件
|
|
384
421
|
|
|
385
422
|
```
|
|
386
|
-
|
|
423
|
+
clients/
|
|
387
424
|
├── __init__.py
|
|
388
|
-
├──
|
|
425
|
+
├── admin_http_client.py # @service_client(default=True) — 默认 HTTP Client
|
|
389
426
|
├── payment_client.py # @service_client — 支付服务
|
|
390
427
|
├── sms_client.py # @service_client — 短信服务
|
|
391
428
|
└── user_center_client.py # @service_client — 用户中心
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
## 概述
|
|
7
7
|
|
|
8
|
-
本指南介绍如何使用 DF Test Framework 进行 Web UI 测试,基于 Playwright 实现,采用配置驱动 + @actions_class 装饰器 + 事件驱动架构。
|
|
8
|
+
本指南介绍如何使用 DF Test Framework 进行 Web UI 测试,基于 Playwright 实现,采用配置驱动 + UI Client + @actions_class 装饰器 + 事件驱动架构。
|
|
9
9
|
|
|
10
10
|
**框架提供两种模式**:
|
|
11
11
|
- **AppActions + BasePage**:同步模式(v3.0.0+),简单易用
|
|
@@ -22,6 +22,11 @@
|
|
|
22
22
|
> - ✅ 对齐 Playwright 官方最佳实践(pytest-playwright 插件模式)
|
|
23
23
|
> - ✅ storageState 下沉到 context 级别注入,更符合 Playwright 设计
|
|
24
24
|
>
|
|
25
|
+
> **vNext 多前端模型**:
|
|
26
|
+
> - ✅ `ui_client()` 将 B 端后台、H5、WebView 等前端声明为独立 UI Client
|
|
27
|
+
> - ✅ 每个 UI Client 拥有自己的 `base_url`、`storage_state`、`viewport`、`context/page`
|
|
28
|
+
> - ✅ `@actions_class(ui_client="h5_ui")` 显式绑定业务 Actions 到指定前端
|
|
29
|
+
>
|
|
25
30
|
> 本指南主要介绍**同步版本**(向后兼容)。异步版本使用方法请参考:
|
|
26
31
|
> - [v4.0.0 发布说明](../releases/v4.0.0.md) - 异步 UI 测试概述
|
|
27
32
|
> - [五层架构详解](../architecture/五层架构详解.md#layer-2-capabilities) - AsyncAppActions 详细说明
|
|
@@ -32,7 +37,7 @@
|
|
|
32
37
|
|
|
33
38
|
1. [快速开始](#1-快速开始)
|
|
34
39
|
2. [配置驱动模式](#2-配置驱动模式)
|
|
35
|
-
3. [
|
|
40
|
+
3. [UI Client 与认证状态](#3-ui-client-与认证状态)
|
|
36
41
|
4. [核心组件](#4-核心组件)
|
|
37
42
|
5. [@actions_class 装饰器](#5-actions_class-装饰器)
|
|
38
43
|
6. [三层架构模式](#6-三层架构模式)
|
|
@@ -139,12 +144,56 @@ WEB__BASE_URL=https://web.example.com # Web 地址
|
|
|
139
144
|
|
|
140
145
|
---
|
|
141
146
|
|
|
142
|
-
## 3.
|
|
147
|
+
## 3. UI Client 与认证状态
|
|
143
148
|
|
|
144
149
|
> **版本**: v4.0.3+(基础功能),v4.0.4+(pytest_config CLI 参数一致性)
|
|
145
150
|
|
|
146
151
|
绝大多数 UI 测试的前提是「用户已登录」。v4.0.3 原生支持 Playwright storageState,`page` 自动携带认证状态,测试零感知。
|
|
147
152
|
|
|
153
|
+
多前端项目应先声明 UI Client:
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
# src/my_project/clients/ui_clients.py
|
|
157
|
+
from df_test_framework import ui_client
|
|
158
|
+
|
|
159
|
+
ui_client(
|
|
160
|
+
"admin_ui",
|
|
161
|
+
base_url_config="web.base_url",
|
|
162
|
+
storage_state="admin_storage_state",
|
|
163
|
+
default=True,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
ui_client(
|
|
167
|
+
"h5_ui",
|
|
168
|
+
base_url_config="business.h5_web_base_url",
|
|
169
|
+
storage_state="h5_storage_state",
|
|
170
|
+
viewport={"width": 375, "height": 812},
|
|
171
|
+
)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
在 `conftest.py` 中加载:
|
|
175
|
+
|
|
176
|
+
```python
|
|
177
|
+
import my_project.clients.ui_clients # noqa: F401
|
|
178
|
+
from df_test_framework.testing.decorators import load_ui_client_fixtures
|
|
179
|
+
|
|
180
|
+
load_ui_client_fixtures(globals())
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
框架会生成:
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
admin_ui_page / admin_ui_context / admin_ui_browser_manager
|
|
187
|
+
h5_ui_page / h5_ui_context / h5_ui_browser_manager
|
|
188
|
+
admin_ui_async_page / h5_ui_async_page
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`default=True` 的客户端还会注册默认别名:`page`、`context`、`browser_manager`、`app_actions`
|
|
192
|
+
以及异步别名 `async_page`、`async_context`、`async_browser_manager`、`async_app_actions`。
|
|
193
|
+
|
|
194
|
+
> 标准约束:使用 `@actions_class()` 时,项目必须声明一个 `default=True` 的 UI Client;
|
|
195
|
+
> 多前端 Actions 使用 `@actions_class(ui_client="h5_ui")` 显式绑定。
|
|
196
|
+
|
|
148
197
|
### 3.1 设计思路
|
|
149
198
|
|
|
150
199
|
与 HTTP bearer_token 中间件类比:
|
|
@@ -158,7 +207,7 @@ WEB__BASE_URL=https://web.example.com # Web 地址
|
|
|
158
207
|
|
|
159
208
|
### 3.2 使用方式
|
|
160
209
|
|
|
161
|
-
在项目 `conftest.py`
|
|
210
|
+
在项目 `conftest.py` 中提供对应的 storage state fixture:
|
|
162
211
|
|
|
163
212
|
```python
|
|
164
213
|
# conftest.py
|
|
@@ -166,7 +215,7 @@ import pytest
|
|
|
166
215
|
from df_test_framework.testing import AuthSetup
|
|
167
216
|
|
|
168
217
|
@pytest.fixture(scope="session")
|
|
169
|
-
def
|
|
218
|
+
def admin_storage_state(tmp_path_factory, settings, request):
|
|
170
219
|
"""Session 级别认证状态 — 整个测试 session 只登录一次"""
|
|
171
220
|
with AuthSetup(settings, tmp_path_factory.mktemp("auth"), pytest_config=request.config) as auth:
|
|
172
221
|
auth.page.goto(f"{auth.base_url}/login")
|
|
@@ -188,6 +237,14 @@ def test_dashboard(page):
|
|
|
188
237
|
assert page.get_by_text("监控管理").is_visible()
|
|
189
238
|
```
|
|
190
239
|
|
|
240
|
+
Actions 可以显式绑定到非默认 UI Client:
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
@actions_class(ui_client="h5_ui")
|
|
244
|
+
class H5HomeActions(AppActions):
|
|
245
|
+
...
|
|
246
|
+
```
|
|
247
|
+
|
|
191
248
|
### 3.3 AuthSetup API
|
|
192
249
|
|
|
193
250
|
`AuthSetup` 是一个 context manager,管理临时浏览器的完整生命周期:
|
|
@@ -387,7 +444,9 @@ class LoginActions(AppActions):
|
|
|
387
444
|
|
|
388
445
|
```python
|
|
389
446
|
# conftest.py
|
|
390
|
-
from df_test_framework.testing.decorators import load_actions_fixtures
|
|
447
|
+
from df_test_framework.testing.decorators import load_actions_fixtures, load_ui_client_fixtures
|
|
448
|
+
|
|
449
|
+
import my_project.clients.ui_clients # noqa: F401 触发 UI Client 注册
|
|
391
450
|
|
|
392
451
|
def _get_actions_package() -> str:
|
|
393
452
|
"""获取 Actions 包路径(优先配置,否则默认值)"""
|
|
@@ -399,7 +458,8 @@ def _get_actions_package() -> str:
|
|
|
399
458
|
except Exception:
|
|
400
459
|
return default_package
|
|
401
460
|
|
|
402
|
-
#
|
|
461
|
+
# 先加载 UI Client,再加载所有 @actions_class 装饰的类
|
|
462
|
+
load_ui_client_fixtures(globals())
|
|
403
463
|
load_actions_fixtures(globals(), actions_package=_get_actions_package())
|
|
404
464
|
```
|
|
405
465
|
|
|
@@ -1068,6 +1128,10 @@ start reports/videos
|
|
|
1068
1128
|
open reports/videos
|
|
1069
1129
|
```
|
|
1070
1130
|
|
|
1131
|
+
#### 多 tab / popup 场景
|
|
1132
|
+
|
|
1133
|
+
测试中打开了多个标签页或弹窗时,失败视频取自**最后打开的页面**(`context.pages[-1]`),通常是实际发生错误的页面。
|
|
1134
|
+
|
|
1071
1135
|
### 10.3 截图
|
|
1072
1136
|
|
|
1073
1137
|
#### 自动截图配置
|
|
@@ -1079,6 +1143,12 @@ web:
|
|
|
1079
1143
|
screenshot_dir: reports/screenshots
|
|
1080
1144
|
```
|
|
1081
1145
|
|
|
1146
|
+
#### 多 tab / popup 场景与文件名安全
|
|
1147
|
+
|
|
1148
|
+
失败截图默认取自**最后打开的页面**(`context.pages[-1]`),覆盖 popup 和新标签页场景。
|
|
1149
|
+
|
|
1150
|
+
参数化测试的 `item.name` 含 `[`、`/`、`:` 等特殊字符时,框架自动将其替换为 `_`,截图文件名在 Windows/Linux 下均合法,无需手动处理。
|
|
1151
|
+
|
|
1082
1152
|
#### 手动截图
|
|
1083
1153
|
|
|
1084
1154
|
在测试代码中手动截图:
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# v4.4.4 发布说明
|
|
2
|
+
|
|
3
|
+
**发布日期**: 2026-04-23
|
|
4
|
+
**版本类型**: PATCH(UI 失败诊断 bug 修复,无 API 增减)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
本版本修复了 `testing/fixtures/ui.py` 中 UI 失败诊断子系统(截图 + 视频)的五个问题,涵盖异步可靠性、decorator 正确性、多 tab 目标选取、Windows 路径兼容性。**用户配置和调用方式完全不变**,升级后行为更可靠。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 变更详情
|
|
15
|
+
|
|
16
|
+
### P1 — `async_context` / `async_page` decorator 错误
|
|
17
|
+
|
|
18
|
+
pytest-asyncio >= 0.21 要求异步 fixture 生成器必须使用 `@pytest_asyncio.fixture`,而非 `@pytest.fixture`。
|
|
19
|
+
|
|
20
|
+
受影响 fixture(已全部修复):
|
|
21
|
+
|
|
22
|
+
| Fixture | 修复前 | 修复后 |
|
|
23
|
+
|---------|--------|--------|
|
|
24
|
+
| `async_context` | `@pytest.fixture` | `@pytest_asyncio.fixture` |
|
|
25
|
+
| `async_page` | `@pytest.fixture` | `@pytest_asyncio.fixture` |
|
|
26
|
+
| `async_goto` | `@pytest.fixture` | `@pytest_asyncio.fixture` |
|
|
27
|
+
| `async_screenshot` | `@pytest.fixture` | `@pytest_asyncio.fixture` |
|
|
28
|
+
| `async_app_actions` | `@pytest.fixture` | `@pytest_asyncio.fixture` |
|
|
29
|
+
|
|
30
|
+
### P2 — 异步截图 fire-and-forget 不可靠
|
|
31
|
+
|
|
32
|
+
**修复前**:`pytest_runtest_makereport` hook 里通过 `asyncio.create_task()` 发起截图,task 未被 await,`page.close()` 可能在截图完成前执行,导致异步测试失败时截图为空或 IO 错误。
|
|
33
|
+
|
|
34
|
+
**修复后**:`pytest_runtest_makereport` hook 职责缩减为只写 `item.stash[_UI_FAILED_KEY] = True`;截图逻辑迁移至 `page`/`async_page` fixture teardown,在 `p.close()` 之前执行(同步调用 / `await` 调用)。
|
|
35
|
+
|
|
36
|
+
### P2 — 异步 `video.path()` 返回 coroutine
|
|
37
|
+
|
|
38
|
+
**修复前**:`_get_video_path()` 对 async Page 直接调用同步 `page.video.path()`,得到 coroutine 对象而非路径字符串,视频处理逻辑静默失效。
|
|
39
|
+
|
|
40
|
+
**修复后**:视频路径在 `page`/`async_page` teardown(`p.close()` 前)通过 `await target.video.path()` 获取,写入 `item.stash[_UI_VIDEO_PATH_KEY]`;`context`/`async_context` teardown 在 `ctx.close()` 后读取 stash 完成视频文件处理。
|
|
41
|
+
|
|
42
|
+
### P3 — 多 tab 截图/视频目标使用 `pages[0]`
|
|
43
|
+
|
|
44
|
+
**修复前**:失败截图和视频路径从 `context.pages[0]` 取,多 tab 场景(popup、`page.open_new_tab()` 等)失败通常发生在最后打开的页面,取第一个页面会得到错误截图。
|
|
45
|
+
|
|
46
|
+
**修复后**:截图和视频路径目标统一使用 `context.pages[-1]`(最后打开的页面),回退为当前 `page`(如果 `context.pages` 为空)。
|
|
47
|
+
|
|
48
|
+
### P3 — 截图文件名含非法字符
|
|
49
|
+
|
|
50
|
+
**修复前**:pytest 参数化测试 `item.name` 形如 `test_login[admin-case1]`,含 `[`、`]`、`/`、`:` 等字符,Windows 文件系统不允许,导致截图保存失败并抛出 `OSError`。
|
|
51
|
+
|
|
52
|
+
**修复后**:新增内部函数 `_sanitize_filename(name)`,将 `/ \ : * ? " < > | [ ]` 替换为 `_`,截图文件名在所有平台均合法。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 架构说明
|
|
57
|
+
|
|
58
|
+
本次修复引入了两个模块级 stash key,作为 hook 和 fixture teardown 之间的通信通道:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
_UI_FAILED_KEY = pytest.StashKey[bool]() # hook → page/async_page teardown
|
|
62
|
+
_UI_VIDEO_PATH_KEY = pytest.StashKey[str]() # page/async_page teardown → context/async_context teardown
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
teardown 执行顺序(pytest 反向拆解):
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
page teardown → 截图 + 写 _UI_VIDEO_PATH_KEY → p.close()
|
|
69
|
+
context teardown → ctx.close() → 读 _UI_VIDEO_PATH_KEY → 处理视频文件
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 升级指南
|
|
75
|
+
|
|
76
|
+
无需任何改动,直接升级:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install df-test-framework==4.4.4
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
如果你的项目 conftest.py 里有手动实现截图或视频处理逻辑(v3.46.3 之前的遗留写法),建议移除,框架已完整覆盖。
|