df-test-framework 4.5.0__tar.gz → 4.7.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.5.0 → df_test_framework-4.7.0}/CHANGELOG.md +37 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/CLAUDE.md +2 -2
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/PKG-INFO +5 -5
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/fixture_chain_pattern.md +6 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/test_data.md +10 -0
- df_test_framework-4.7.0/docs/guides/test_data_pipeline_design.md +389 -0
- df_test_framework-4.7.0/docs/releases/v4.6.0.md +173 -0
- df_test_framework-4.7.0/docs/releases/v4.6.1.md +204 -0
- df_test_framework-4.7.0/docs/releases/v4.7.0.md +128 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/pyproject.toml +10 -7
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/__init__.py +21 -2
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/bootstrap/runtime.py +124 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/async_database.py +11 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/init_cmd.py +2 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/fixture_chain_example.py +112 -1
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/__init__.py +7 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/__init__.py +41 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/_registry.py +20 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/context.py +46 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/dataset.py +237 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/loader.py +105 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/reporter.py +72 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/data/pipeline/resolver.py +75 -0
- df_test_framework-4.7.0/src/df_test_framework/testing/plugins/data_pipeline.py +150 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/bootstrap/test_runtime.py +137 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/conftest.py +3 -0
- df_test_framework-4.7.0/tests/testing/data/pipeline/test_pipeline.py +378 -0
- df_test_framework-4.7.0/tests/testing/data/pipeline/test_pipeline_plugin.py +242 -0
- df_test_framework-4.7.0/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/uv.lock +552 -509
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.editorconfig +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.env.example +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.gitattributes +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.gitignore +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.gitleaks.toml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.gitleaksignore +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/.python-version +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/AGENTS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/README_PYPI.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/FAQ.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/api-reference/testing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.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.5.0 → df_test_framework-4.7.0}/docs/archive/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.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.5.0 → df_test_framework-4.7.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.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.5.0 → df_test_framework-4.7.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/development/local-development.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/decorators_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/fixtures_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/helpers_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/sanitize_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/service_client_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/storage.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/guides/web-ui-testing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/migration/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.2.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.2.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.2.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.3.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.3.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.4.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.4.1.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.4.2.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.4.3.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.4.4.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/releases/v4.5.0.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/examples/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/default_http_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_clients.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/schema.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/helpers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/helpers/hash.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/helpers/signature.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/plugins/builtin/reporting/oms_reporter_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/debugging/console.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/decorators/api_class.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/decorators/service_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/decorators/ui_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/auth.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/core.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/http_recorder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/fixtures/ui.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/README.md +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_context.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_events.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/core/test_types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/sanitize/test_service.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_helpers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.5.0/tests/testing/debugging → df_test_framework-4.7.0/tests/testing/data/pipeline}/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.5.0/tests/testing/decorators → df_test_framework-4.7.0/tests/testing/debugging}/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/decorators/test_service_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/decorators/test_ui_client.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_http_recorder.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.5.0 → df_test_framework-4.7.0}/verify_fixes.py +0 -0
|
@@ -5,6 +5,43 @@
|
|
|
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.7.0] - 2026-05-19
|
|
9
|
+
|
|
10
|
+
### ✨ 新增
|
|
11
|
+
|
|
12
|
+
- **`RuntimeContext.metadata` 字段**:`dict[str, Any]` 类型,默认空字典;用于携带跨进程/跨插件的平台业务上下文(`tenant_id`、`execution_id` 等),避免将业务键值编码到 scope 字符串中
|
|
13
|
+
- **`RuntimeContext.with_metadata(**kwargs)`**:返回 metadata 已合并的新 RuntimeContext(不可变,新键覆盖同名旧键);`with_scope()` / `with_overrides()` 自动传播 metadata
|
|
14
|
+
- **`RuntimeContext.register_async_database(name, connection_string, **kwargs)`**:按名称注册多个 AsyncDatabase 连接池(`SingletonProvider` 延迟创建),支持多数据库场景(如 OMS DbStepExecutor 按 URL 缓存);同名重复注册自动 shutdown 旧实例
|
|
15
|
+
- **`RuntimeContext.get_async_database(name=None)`**:按名称获取已注册的 AsyncDatabase 实例;`name=None` 时返回由 `settings.db` 配置的默认实例
|
|
16
|
+
- **`RuntimeBuilder.with_metadata(metadata)`**:构建时注入初始 metadata
|
|
17
|
+
|
|
18
|
+
## [4.6.1] - 2026-05-18
|
|
19
|
+
|
|
20
|
+
### ✨ 新增
|
|
21
|
+
|
|
22
|
+
- **`CaseContext.skip` / `.xfail`**:YAML stage 元数据支持 `skip: "原因"` / `xfail: "原因"`(或 `true`),自动转换为对应 pytest mark,无需在 conftest 手写
|
|
23
|
+
- **`CaseContext.seed`(YAML 级别)**:`tests.{stage}.seed: 42` 设置 case 级别随机种子;CLI `--seed` 全局覆盖优先级更高
|
|
24
|
+
- **`--case-file` CLI 选项**:按数据文件路径过滤(部分匹配),多数据集项目可精准指定只跑某个文件的 case
|
|
25
|
+
- **pytest 插件自动 Allure**:`pytest_runtest_setup` 钩子自动调用 `CaseReporter.attach_to_allure()`,写标题/标签/附件,测试函数无需手动调用
|
|
26
|
+
- **pytest 插件自动 seed**:有 seed 的 case 自动 `random.seed()` + `Faker.seed()`(Faker 不可用时静默跳过)
|
|
27
|
+
- **`pytest_collection_modifyitems`**:自动清除因空参数过滤产生的 `NotSetType` 占位用例,避免空壳测试出现在报告
|
|
28
|
+
- **复现命令补充 `--seed`**:失败用例有 seed 时复现命令自动附带 `--seed=N`
|
|
29
|
+
- **`DataAssetResolver` 路径安全**:`resolve()` / `resolve_file()` 禁止绝对路径和 `../` 路径逃逸,违规时 `raise ValueError`
|
|
30
|
+
- **脚手架 `models/cases/`**:`df-test init` 自动创建 `src/{project}/models/cases/__init__.py`,作为场景领域模型的标准目录
|
|
31
|
+
|
|
32
|
+
## [4.6.0] - 2026-05-18
|
|
33
|
+
|
|
34
|
+
### ✨ 新增
|
|
35
|
+
|
|
36
|
+
- **测试数据管线**:从 YAML/JSON 到 pytest 参数化的完整基础设施(`testing/data/pipeline/`)
|
|
37
|
+
- `case_dataset(path, model, root_key, id_field)` — 工厂函数,延迟加载 case 文件,支持 dict-of-dicts(key=case_id)和 list-of-dicts 两种 YAML 格式
|
|
38
|
+
- `CaseContext[T]` — 泛型 case 上下文冻结 dataclass,承载 domain data + stage/title/tags/marks/timeout/seed/source_path/raw
|
|
39
|
+
- `CaseDataset[T].parametrize(metafunc, fixture_name, stage)` — pytest_generate_tests 一行注入,读取 CLI 过滤选项
|
|
40
|
+
- `CaseDataset[T].all(stage)` — 不经参数化直接返回 CaseContext 列表,适合脚本/单元测试场景
|
|
41
|
+
- `DataAssetResolver` — 自动发现项目根(pyproject.toml + tests/),统一解析 `tests/data/fixtures/` 与 `tests/data/files/`
|
|
42
|
+
- `CaseReporter.attach_to_allure(ctx)` — 写 Allure 动态标题、case_id/stage 标签、tags,附 case 元信息 JSON 附件
|
|
43
|
+
- **pytest 插件 `df_test_framework_data_pipeline`**:全局注册 `--case`、`--case-stage`、`--case-tag`、`--seed` CLI 过滤选项;测试失败时自动在报告 section 输出最小复现命令
|
|
44
|
+
|
|
8
45
|
## [4.5.0] - 2026-05-12
|
|
9
46
|
|
|
10
47
|
### ✨ 新增
|
|
@@ -8,8 +8,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
8
8
|
|
|
9
9
|
**DF Test Framework** - 现代化 Python 测试自动化框架
|
|
10
10
|
|
|
11
|
-
- **版本**: v4.
|
|
12
|
-
- **更新时间**: 2026-
|
|
11
|
+
- **版本**: v4.7.0
|
|
12
|
+
- **更新时间**: 2026-05-19
|
|
13
13
|
- **Python**: 3.12+
|
|
14
14
|
- **核心技术栈**: pytest + httpx + Playwright + Pydantic v2 + SQLAlchemy 2.0 + Pluggy
|
|
15
15
|
- **架构**: 五层架构 + 横切关注点(能力层驱动设计)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: df-test-framework
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.7.0
|
|
4
4
|
Summary: 基于交互模式的现代化测试自动化框架,支持多种测试场景
|
|
5
5
|
Project-URL: Homepage, https://github.com/yourorg/df-test-framework
|
|
6
6
|
Project-URL: Repository, https://github.com/yourorg/df-test-framework
|
|
@@ -22,7 +22,7 @@ Requires-Python: >=3.12
|
|
|
22
22
|
Requires-Dist: allure-pytest>=2.13.0
|
|
23
23
|
Requires-Dist: assertpy>=1.1
|
|
24
24
|
Requires-Dist: faker>=38.2.0
|
|
25
|
-
Requires-Dist: filelock>=3.
|
|
25
|
+
Requires-Dist: filelock>=3.29.0
|
|
26
26
|
Requires-Dist: freezegun>=1.5.0
|
|
27
27
|
Requires-Dist: h2>=4.3.0
|
|
28
28
|
Requires-Dist: hpack>=4.1.0
|
|
@@ -40,15 +40,15 @@ Requires-Dist: pymysql>=1.1.0
|
|
|
40
40
|
Requires-Dist: pypinyin>=0.53.0
|
|
41
41
|
Requires-Dist: pytest-asyncio>=1.3.0
|
|
42
42
|
Requires-Dist: pytest-timeout>=2.2.0
|
|
43
|
-
Requires-Dist: pytest
|
|
43
|
+
Requires-Dist: pytest>=9.0.3
|
|
44
44
|
Requires-Dist: python-dotenv>=1.0.0
|
|
45
45
|
Requires-Dist: pyyaml>=6.0.0
|
|
46
46
|
Requires-Dist: questionary>=2.0.0
|
|
47
47
|
Requires-Dist: redis>=5.0.0
|
|
48
|
-
Requires-Dist: requests>=2.
|
|
48
|
+
Requires-Dist: requests>=2.34.2
|
|
49
49
|
Requires-Dist: sqlalchemy>=2.0.0
|
|
50
50
|
Requires-Dist: structlog>=25.4.0
|
|
51
|
-
Requires-Dist: urllib3>=2.
|
|
51
|
+
Requires-Dist: urllib3>=2.7.0
|
|
52
52
|
Provides-Extra: all
|
|
53
53
|
Requires-Dist: aiomysql>=0.2.0; extra == 'all'
|
|
54
54
|
Requires-Dist: aiosqlite>=0.20.0; extra == 'all'
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# 测试数据管线设计指南
|
|
2
|
+
|
|
3
|
+
> 最后更新: 2026-05-15
|
|
4
|
+
> 适用范围: 参数化、数据驱动、测试造数、前置准备、清理和报告
|
|
5
|
+
|
|
6
|
+
本文记录 df-test-framework 后续在测试数据方向的标准设计。它不是替代
|
|
7
|
+
`test_data.md` 或 `fixture_chain_pattern.md`,而是把二者串成一条完整的数据管线:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
静态场景数据 -> Case Model -> 参数矩阵 -> 前置准备 -> 测试执行 -> 断言 -> 清理 -> 报告
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 一句话结论
|
|
14
|
+
|
|
15
|
+
框架应该提供“测试数据管线基础设施”,业务项目负责“领域数据和领域造数逻辑”。
|
|
16
|
+
|
|
17
|
+
框架负责:
|
|
18
|
+
|
|
19
|
+
- 数据文件定位和加载。
|
|
20
|
+
- Case 元信息、参数化、过滤和 pytest id。
|
|
21
|
+
- 文件资产路径解析。
|
|
22
|
+
- 随机 seed 管理。
|
|
23
|
+
- 前置准备协议。
|
|
24
|
+
- cleanup 挂钩。
|
|
25
|
+
- Allure / 日志中的 case 元信息记录。
|
|
26
|
+
- 脚手架模板和规范文档。
|
|
27
|
+
|
|
28
|
+
业务项目负责:
|
|
29
|
+
|
|
30
|
+
- 领域模型,例如订单、合同、会签、客户、产品。
|
|
31
|
+
- 领域 YAML / JSON / CSV 数据。
|
|
32
|
+
- 领域 API / UI Actions。
|
|
33
|
+
- 领域造数步骤,例如创建客户、生成合同、提交审批。
|
|
34
|
+
- 领域断言,例如 DB 字段、页面结果、业务状态。
|
|
35
|
+
|
|
36
|
+
## 业界模式
|
|
37
|
+
|
|
38
|
+
主流自动化测试框架大致都分为同一组能力:
|
|
39
|
+
|
|
40
|
+
| 关注点 | 业界常见做法 | 框架对应方向 |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
| 参数化 | pytest `parametrize` / `pytest_generate_tests`,JUnit `ParameterizedTest`,TestNG `DataProvider` | `parametrize_cases()` |
|
|
43
|
+
| 昂贵前置 | fixture 间接参数化,setup fixture | `Provisioner` 协议 |
|
|
44
|
+
| 动态造数 | factory / builder / seed data | `Factory` / `DataGenerator` / 项目 factory |
|
|
45
|
+
| 清理 | teardown、transaction rollback、cleanup manager | `cleanup` / `uow` / `data_preparer` |
|
|
46
|
+
| UI 登录态 | storage state、role based context、worker auth state | `AuthSetup` / `ui_client(storage_state=...)` |
|
|
47
|
+
| 外部依赖 | Testcontainers、临时 DB、隔离服务 | 后续可选增强 |
|
|
48
|
+
|
|
49
|
+
参考资料:
|
|
50
|
+
|
|
51
|
+
- pytest 参数化: <https://docs.pytest.org/en/stable/how-to/parametrize.html>
|
|
52
|
+
- pytest indirect parametrization: <https://docs.pytest.org/en/stable/example/parametrize.html>
|
|
53
|
+
- Playwright 认证态复用: <https://playwright.dev/docs/auth>
|
|
54
|
+
- factory_boy: <https://factory-boy.readthedocs.io/>
|
|
55
|
+
- Testcontainers: <https://docs.docker.com/testcontainers/>
|
|
56
|
+
|
|
57
|
+
## 数据分类
|
|
58
|
+
|
|
59
|
+
测试数据不要混成一个“大 data 目录”。标准分为五类:
|
|
60
|
+
|
|
61
|
+
| 类型 | 推荐位置 | 说明 |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| 场景主数据 | `tests/data/fixtures/{domain}/` | YAML / JSON / CSV,表达业务场景和预期 |
|
|
64
|
+
| 文件资产 | `tests/data/files/{domain}/` | 上传、导入、下载比对文件 |
|
|
65
|
+
| 环境配置 | `config/` | 地址、开关、环境差异 |
|
|
66
|
+
| 敏感值 | `config/secrets/` 或环境变量 | 密码、token、cookie、私钥 |
|
|
67
|
+
| 动态造数 | `src/{project}/fixtures/*_chain.py` | 运行期通过 API / DB / UI 准备数据 |
|
|
68
|
+
|
|
69
|
+
重要边界:
|
|
70
|
+
|
|
71
|
+
- CI 主输入优先是文本数据文件,不依赖二进制 Excel。
|
|
72
|
+
- Excel 可以作为业务维护视图,但需要先转换为 YAML / JSON 再进入测试。
|
|
73
|
+
- Apifox / OpenAPI 导出是请求模板来源,不是业务场景列表。
|
|
74
|
+
- Actions / API Flow 不在 import 阶段读取数据文件。
|
|
75
|
+
- 绝对路径不进入 case 数据,文件资产必须由框架或项目 resolver 解析。
|
|
76
|
+
|
|
77
|
+
## 标准数据流
|
|
78
|
+
|
|
79
|
+
```mermaid
|
|
80
|
+
flowchart TD
|
|
81
|
+
A["tests/data/fixtures/{domain}/*.yaml"] --> B["CaseLoader"]
|
|
82
|
+
B --> C["Case Model / Schema"]
|
|
83
|
+
C --> D["CaseContext"]
|
|
84
|
+
D --> E["parametrize_cases / pytest_generate_tests"]
|
|
85
|
+
E --> F["test function"]
|
|
86
|
+
F --> G["Provisioner / fixture chain"]
|
|
87
|
+
G --> H["API / UI / DB 准备"]
|
|
88
|
+
H --> I["Actions / API Flow"]
|
|
89
|
+
I --> J["assertions"]
|
|
90
|
+
J --> K["cleanup / uow rollback"]
|
|
91
|
+
D --> L["Allure case metadata"]
|
|
92
|
+
G --> L
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
运行期要遵守两个阶段:
|
|
96
|
+
|
|
97
|
+
1. 收集阶段只做轻量工作:读取数据、校验 schema、生成 pytest 参数。
|
|
98
|
+
2. 执行阶段才做昂贵前置:API 造数、DB 写入、UI 操作、外部服务调用。
|
|
99
|
+
|
|
100
|
+
这与 pytest 的 indirect parametrization 思路一致:昂贵 setup 应放在 fixture 执行期,
|
|
101
|
+
而不是 collection 期。
|
|
102
|
+
|
|
103
|
+
## 推荐对象模型
|
|
104
|
+
|
|
105
|
+
框架后续可以提供通用对象,业务项目只补领域模型。
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from dataclasses import dataclass, field
|
|
109
|
+
from pathlib import Path
|
|
110
|
+
from typing import Any, Generic, TypeVar
|
|
111
|
+
|
|
112
|
+
T = TypeVar("T")
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@dataclass(frozen=True)
|
|
116
|
+
class CaseContext(Generic[T]):
|
|
117
|
+
"""测试场景上下文。"""
|
|
118
|
+
|
|
119
|
+
case_id: str
|
|
120
|
+
data: T
|
|
121
|
+
source_path: Path
|
|
122
|
+
stage: str | None = None
|
|
123
|
+
title: str | None = None
|
|
124
|
+
tags: tuple[str, ...] = ()
|
|
125
|
+
marks: tuple[str, ...] = ()
|
|
126
|
+
seed: int | None = None
|
|
127
|
+
raw: dict[str, Any] = field(default_factory=dict)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
业务项目仍然定义自己的领域模型:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from dataclasses import dataclass
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@dataclass(frozen=True)
|
|
137
|
+
class OrderCase:
|
|
138
|
+
case_id: str
|
|
139
|
+
customer_name: str
|
|
140
|
+
products: tuple[str, ...]
|
|
141
|
+
expected_status: str
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 参数化标准
|
|
145
|
+
|
|
146
|
+
推荐测试入口只消费一个 case 对象或 context 对象:
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
def test_create_order(order_case: CaseContext[OrderCase], order_actions):
|
|
150
|
+
result = order_actions.create(order_case.data)
|
|
151
|
+
assert result.status == order_case.data.expected_status
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
参数化层应该统一处理:
|
|
155
|
+
|
|
156
|
+
- pytest id:默认 `stage-case_id` 或 `case_id`。
|
|
157
|
+
- `marks`:从数据映射为 pytest mark。
|
|
158
|
+
- `skip` / `xfail`:从数据或 CLI 过滤策略进入 pytest 参数。
|
|
159
|
+
- `tags`:用于 `--case-tag` 过滤。
|
|
160
|
+
- `stage`:用于同一 case 在不同阶段复用。
|
|
161
|
+
- `seed`:用于可复现随机。
|
|
162
|
+
|
|
163
|
+
未来框架 API 可以长这样:
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
from df_test_framework.testing.data.pipeline import case_dataset
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
direct_cases = case_dataset(
|
|
170
|
+
path="countersign/direct_cases.yaml",
|
|
171
|
+
model=DirectCountersignInput,
|
|
172
|
+
root_key="cases",
|
|
173
|
+
id_field="case_id",
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def pytest_generate_tests(metafunc):
|
|
178
|
+
direct_cases.parametrize(
|
|
179
|
+
metafunc,
|
|
180
|
+
fixture_name="direct_case",
|
|
181
|
+
stage="approving",
|
|
182
|
+
)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
更进一步可以提供装饰器:
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
@data_cases(
|
|
189
|
+
path="countersign/direct_cases.yaml",
|
|
190
|
+
model=DirectCountersignInput,
|
|
191
|
+
stages=("approving", "archive"),
|
|
192
|
+
)
|
|
193
|
+
def test_direct_countersign(case):
|
|
194
|
+
...
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
装饰器方案体验更好,但 pytest hook 方案更透明。框架应优先落透明的底层 API,
|
|
198
|
+
再考虑装饰器糖。
|
|
199
|
+
|
|
200
|
+
## 前置准备标准
|
|
201
|
+
|
|
202
|
+
前置准备分三层:
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
step_* 单个原子业务动作
|
|
206
|
+
provision_* 组合一段业务链路
|
|
207
|
+
fixture pytest 暴露入口
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
标准写法:
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
from dataclasses import dataclass
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
@dataclass(frozen=True)
|
|
217
|
+
class CustomerData:
|
|
218
|
+
customer_id: str
|
|
219
|
+
customer_name: str
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def step_create_customer(customer_api, case, cleanup) -> CustomerData:
|
|
223
|
+
response = customer_api.create(name=case.customer_name)
|
|
224
|
+
customer_id = response["data"]["id"]
|
|
225
|
+
cleanup.add("customers", customer_id)
|
|
226
|
+
return CustomerData(customer_id=customer_id, customer_name=case.customer_name)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def provision_order_case(order_case, customer_api, cleanup) -> PreparedOrderCase:
|
|
230
|
+
customer = step_create_customer(customer_api, order_case, cleanup)
|
|
231
|
+
return PreparedOrderCase(case=order_case, customer=customer)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
规则:
|
|
235
|
+
|
|
236
|
+
- `step_*` 函数公开签名,不加下划线。
|
|
237
|
+
- `step_*` 成功创建数据后立刻注册 cleanup。
|
|
238
|
+
- 返回 frozen dataclass,不返回裸 dict。
|
|
239
|
+
- 能通过 API 造数就不通过 UI 造数。
|
|
240
|
+
- DB 直写只用于基础数据或无 API 的场景,并优先走 `uow` / `prepare_data`。
|
|
241
|
+
- UI 前置优先使用 `storage_state`,复杂 UI 状态才考虑 fixture chain。
|
|
242
|
+
|
|
243
|
+
## 框架能力设计
|
|
244
|
+
|
|
245
|
+
### CaseLoader
|
|
246
|
+
|
|
247
|
+
职责:
|
|
248
|
+
|
|
249
|
+
- 基于项目根目录解析 `tests/data/fixtures`。
|
|
250
|
+
- 支持 YAML / JSON / CSV。
|
|
251
|
+
- 支持 `root_key`、`id_field`、`include`、`exclude`。
|
|
252
|
+
- 支持 schema/model 校验。
|
|
253
|
+
- 报错时包含文件路径、case_id、字段路径。
|
|
254
|
+
|
|
255
|
+
### CaseContext
|
|
256
|
+
|
|
257
|
+
职责:
|
|
258
|
+
|
|
259
|
+
- 统一承载 case 元信息。
|
|
260
|
+
- 给 Allure、日志、过滤器、fixture chain 使用。
|
|
261
|
+
- 支持原始数据 `raw`,便于排查数据转换问题。
|
|
262
|
+
|
|
263
|
+
### CaseMatrix / parametrize_cases
|
|
264
|
+
|
|
265
|
+
职责:
|
|
266
|
+
|
|
267
|
+
- 生成 pytest 参数。
|
|
268
|
+
- 处理 `marks`、`ids`、`skip`、`xfail`。
|
|
269
|
+
- 支持 `stage` 和 `tag` 过滤。
|
|
270
|
+
- 支持 CLI 参数:`--case`、`--case-tag`、`--case-stage`、`--case-file`、`--seed`。
|
|
271
|
+
|
|
272
|
+
### DataAssetResolver
|
|
273
|
+
|
|
274
|
+
职责:
|
|
275
|
+
|
|
276
|
+
- 解析 `tests/data/files/{domain}` 下的相对路径。
|
|
277
|
+
- 禁止 case 数据使用本机绝对路径。
|
|
278
|
+
- 报告缺失文件。
|
|
279
|
+
- 支持调试时输出实际解析路径。
|
|
280
|
+
|
|
281
|
+
### Provisioner 协议
|
|
282
|
+
|
|
283
|
+
职责:
|
|
284
|
+
|
|
285
|
+
- 标准化运行期前置准备。
|
|
286
|
+
- 将 `CaseContext[T]` 转成 `PreparedCase[T]`。
|
|
287
|
+
- 自动接入 cleanup 和 Allure step。
|
|
288
|
+
- 将前置准备失败归因到 case,而不是普通 fixture error。
|
|
289
|
+
|
|
290
|
+
### CaseReporter
|
|
291
|
+
|
|
292
|
+
职责:
|
|
293
|
+
|
|
294
|
+
- 在 Allure 附件中记录 case_id、title、stage、tags、source_path、seed。
|
|
295
|
+
- 记录脱敏后的关键输入。
|
|
296
|
+
- 失败时输出数据来源和复现命令。
|
|
297
|
+
|
|
298
|
+
## 不建议进入框架的内容
|
|
299
|
+
|
|
300
|
+
这些必须留在业务项目:
|
|
301
|
+
|
|
302
|
+
- 业务实体字段。
|
|
303
|
+
- 业务 API 调用顺序。
|
|
304
|
+
- 业务 DB 表结构。
|
|
305
|
+
- Apifox 某个请求名或中文接口名。
|
|
306
|
+
- 某个系统的登录账号、角色、流程节点。
|
|
307
|
+
- Excel 模板列定义。
|
|
308
|
+
|
|
309
|
+
框架可以提供模板和协议,但不内置任何业务假设。
|
|
310
|
+
|
|
311
|
+
## 落地路线
|
|
312
|
+
|
|
313
|
+
### 阶段 1:文档和脚手架
|
|
314
|
+
|
|
315
|
+
- 补充本文档。
|
|
316
|
+
- 在项目模板中生成 `tests/data/fixtures/.gitkeep`、`tests/data/files/.gitkeep`。
|
|
317
|
+
- 在 fixture chain 模板中补充 CaseContext 风格示例。
|
|
318
|
+
|
|
319
|
+
### 阶段 2:最小 API
|
|
320
|
+
|
|
321
|
+
新增包:
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
src/df_test_framework/testing/data/pipeline/
|
|
325
|
+
__init__.py
|
|
326
|
+
context.py
|
|
327
|
+
dataset.py
|
|
328
|
+
resolver.py
|
|
329
|
+
parametrize.py
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
最小能力:
|
|
333
|
+
|
|
334
|
+
- `CaseContext`
|
|
335
|
+
- `DataAssetResolver`
|
|
336
|
+
- `case_dataset()`
|
|
337
|
+
- `CaseDataset.parametrize()`
|
|
338
|
+
|
|
339
|
+
### 阶段 3:CLI 过滤
|
|
340
|
+
|
|
341
|
+
- 增加 `--case`、`--case-tag`、`--case-stage`、`--seed`。
|
|
342
|
+
- 支持逗号分隔和多次传参。
|
|
343
|
+
- 支持失败时输出复现命令。
|
|
344
|
+
|
|
345
|
+
### 阶段 4:报告和诊断
|
|
346
|
+
|
|
347
|
+
- 自动写入 Allure case metadata。
|
|
348
|
+
- 支持脱敏后的 case 输入附件。
|
|
349
|
+
- 支持数据源路径和 seed 记录。
|
|
350
|
+
|
|
351
|
+
### 阶段 5:高级能力
|
|
352
|
+
|
|
353
|
+
- Pydantic / JSON Schema 集成。
|
|
354
|
+
- Excel 导入导出模板工具。
|
|
355
|
+
- Testcontainers / 临时依赖环境的可选集成。
|
|
356
|
+
- 数据依赖图可视化。
|
|
357
|
+
|
|
358
|
+
## 与现有能力的关系
|
|
359
|
+
|
|
360
|
+
| 现有能力 | 保留 | 新管线如何使用 |
|
|
361
|
+
| --- | --- | --- |
|
|
362
|
+
| `YAMLLoader` / `JSONLoader` / `CSVLoader` | 保留 | 作为底层 loader |
|
|
363
|
+
| `DataGenerator` | 保留 | 生成动态字段和 seed 数据 |
|
|
364
|
+
| `Factory` / `ModelFactory` | 保留 | 构建领域对象默认值 |
|
|
365
|
+
| `cleanup` | 保留 | 前置准备成功后注册清理 |
|
|
366
|
+
| `uow` / `prepare_data` | 保留 | DB 前置准备和事务管理 |
|
|
367
|
+
| `fixture_chain_pattern` | 保留 | 作为 Provisioner 的项目侧范式 |
|
|
368
|
+
| `AuthSetup` / `ui_client` | 保留 | UI 登录态和多角色入口 |
|
|
369
|
+
|
|
370
|
+
## 反模式
|
|
371
|
+
|
|
372
|
+
- 测试函数里直接读取 YAML / Excel。
|
|
373
|
+
- Actions 在 import 阶段读取数据文件。
|
|
374
|
+
- 用 Excel 作为 CI 唯一主数据源。
|
|
375
|
+
- 在 case 数据里写本地绝对路径。
|
|
376
|
+
- 动态随机没有 seed。
|
|
377
|
+
- 造数成功但 cleanup 留给测试函数手动注册。
|
|
378
|
+
- 在 `pytest_generate_tests` 中执行 API / DB / UI 前置。
|
|
379
|
+
- 业务项目为了参数化复制多个几乎一样的测试函数。
|
|
380
|
+
|
|
381
|
+
## 设计原则
|
|
382
|
+
|
|
383
|
+
1. 收集期轻,执行期重。
|
|
384
|
+
2. 数据表达业务意图,代码表达业务动作。
|
|
385
|
+
3. 主数据文本化,二进制文件只做资产。
|
|
386
|
+
4. 随机必须可复现。
|
|
387
|
+
5. 造数和清理是一个原子操作。
|
|
388
|
+
6. 框架提供协议和通用工具,业务项目保留领域判断。
|
|
389
|
+
7. 先用透明 API 落地,再补装饰器语法糖。
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# v4.6.0 发布说明
|
|
2
|
+
|
|
3
|
+
**发布日期**: 2026-05-18
|
|
4
|
+
**版本类型**: MINOR — 新增独立功能模块(测试数据管线)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
v4.6.0 引入**测试数据管线**(`testing/data/pipeline/`),提供从 YAML/JSON 到 pytest 参数化的完整基础设施。消费方项目可用声明式 YAML 文件管理 case 数据,通过一行 `parametrize()` 注入多场景测试,并享受 CLI 过滤、Allure 自动上报、失败复现命令等能力。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 新增功能
|
|
15
|
+
|
|
16
|
+
### 1. `case_dataset()` — 数据集工厂
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
from df_test_framework.testing.data.pipeline import case_dataset, CaseContext
|
|
20
|
+
|
|
21
|
+
my_cases = case_dataset(
|
|
22
|
+
path="countersign/direct_cases.yaml", # 相对 tests/data/fixtures/
|
|
23
|
+
model=DirectCountersignInput, # dataclass 领域模型,None 时保留 dict
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- 延迟加载:模块导入时不读文件,首次 `parametrize` / `all()` 调用时才加载
|
|
28
|
+
- 支持两种 YAML 格式:
|
|
29
|
+
- **dict-of-dicts**(推荐):`cases: {case_001: {fields..., tests: {stage: {meta}}}}`
|
|
30
|
+
- **list-of-dicts**:`cases: [{case_id: case_001, fields..., tests: {...}}]`
|
|
31
|
+
- `root_key` 默认 `"cases"`,可传 `None` 使用文件根节点
|
|
32
|
+
- `id_field` 仅 list 格式需要指定(默认 `"case_id"`)
|
|
33
|
+
- 相对路径基于 `tests/data/fixtures/`,也可传 `base_dir` 自定义
|
|
34
|
+
|
|
35
|
+
### 2. `CaseContext[T]` — 泛型 case 上下文
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
@dataclass(frozen=True)
|
|
39
|
+
class CaseContext[T]:
|
|
40
|
+
case_id: str
|
|
41
|
+
data: T # 领域模型实例(或 dict)
|
|
42
|
+
stage: str | None # 测试阶段名
|
|
43
|
+
title: str | None # Allure 标题
|
|
44
|
+
tags: tuple[str, ...] # 标签(用于 --case-tag 过滤)
|
|
45
|
+
marks: tuple[str, ...] # pytest marks
|
|
46
|
+
timeout: int | None # 超时秒数
|
|
47
|
+
seed: int | None # 随机种子
|
|
48
|
+
source_path: Path | None # 数据文件路径
|
|
49
|
+
raw: dict # 原始 YAML dict
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def id(self) -> str: ... # pytest 参数 id:stage-case_id 或 case_id
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. `CaseDataset.parametrize()` — pytest 参数化注入
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
# conftest.py 或测试文件顶层
|
|
59
|
+
def pytest_generate_tests(metafunc):
|
|
60
|
+
my_cases.parametrize(metafunc, "approving_case", stage="approving")
|
|
61
|
+
my_cases.parametrize(metafunc, "archive_case", stage="archive")
|
|
62
|
+
|
|
63
|
+
def test_approving(approving_case: CaseContext[DirectCountersignInput]):
|
|
64
|
+
case = approving_case.data
|
|
65
|
+
allure.dynamic.title(approving_case.title)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- `stage=None` 时不按阶段过滤,所有 case 均参与
|
|
69
|
+
- 自动读取 `--case` / `--case-stage` / `--case-tag` CLI 过滤选项
|
|
70
|
+
- CLI 指定的 stage 与当前 stage 不符时,该 fixture 产出空集(避免误跳)
|
|
71
|
+
|
|
72
|
+
### 4. CLI 过滤选项(全局 pytest 插件)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pytest --case=case_001 # 按 case_id 过滤(可多次传入或逗号分隔)
|
|
76
|
+
pytest --case case_001 --case case_002
|
|
77
|
+
pytest --case-stage=approving # 按阶段过滤
|
|
78
|
+
pytest --case-tag=smoke,regression # 按标签过滤
|
|
79
|
+
pytest --seed=42 # 固定随机种子
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
失败时报告自动追加复现命令:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
数据管线: 复现命令: pytest --case=case_001 --case-stage=approving 'tests/test_countersign.py'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 5. `CaseReporter.attach_to_allure()` — Allure 集成
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
def test_approving(approving_case: CaseContext[DirectCountersignInput]):
|
|
92
|
+
CaseReporter.attach_to_allure(approving_case) # 一行搞定
|
|
93
|
+
# 效果:
|
|
94
|
+
# - allure.dynamic.title(approving_case.title)
|
|
95
|
+
# - allure.dynamic.label("case_id", ...)
|
|
96
|
+
# - allure.dynamic.label("stage", ...)
|
|
97
|
+
# - allure.dynamic.tag(*approving_case.tags)
|
|
98
|
+
# - 附件 case_meta.json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
allure 不可用时静默跳过,不影响测试运行。
|
|
102
|
+
|
|
103
|
+
### 6. `DataAssetResolver` — 资产路径解析
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from df_test_framework.testing.data.pipeline import DataAssetResolver
|
|
107
|
+
|
|
108
|
+
resolver = DataAssetResolver() # 自动发现项目根
|
|
109
|
+
path = resolver.resolve("countersign/direct.yaml") # tests/data/fixtures/...
|
|
110
|
+
file = resolver.resolve_file("uploads/sample.pdf") # tests/data/files/...
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## YAML 标准格式
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
cases:
|
|
119
|
+
case_001:
|
|
120
|
+
customer_name: 张三
|
|
121
|
+
amount: 1000.00
|
|
122
|
+
tests:
|
|
123
|
+
approving:
|
|
124
|
+
title: "审批-正常流程"
|
|
125
|
+
timeout: 60
|
|
126
|
+
marks: [smoke]
|
|
127
|
+
tags: [regression, api]
|
|
128
|
+
archive:
|
|
129
|
+
title: "归档-正常"
|
|
130
|
+
timeout: 30
|
|
131
|
+
case_002:
|
|
132
|
+
customer_name: 李四
|
|
133
|
+
amount: 0.01
|
|
134
|
+
tests:
|
|
135
|
+
approving:
|
|
136
|
+
title: "审批-最小金额边界"
|
|
137
|
+
marks: [edge_case]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 迁移指南
|
|
143
|
+
|
|
144
|
+
无破坏性变更,全量向后兼容。现有数据驱动测试无需修改。
|
|
145
|
+
|
|
146
|
+
如需迁移现有手动参数化测试:
|
|
147
|
+
|
|
148
|
+
1. 将 case 数据移至 `tests/data/fixtures/<domain>/cases.yaml`
|
|
149
|
+
2. 创建领域模型 dataclass(可选)
|
|
150
|
+
3. 用 `case_dataset()` 替换 `@pytest.mark.parametrize` 的数据列表
|
|
151
|
+
4. 在 `pytest_generate_tests` 调用 `.parametrize()`
|
|
152
|
+
5. 测试函数参数换成 `CaseContext[Model]`,`allure.dynamic.title()` 换成 `CaseReporter.attach_to_allure(ctx)`
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 文件变更
|
|
157
|
+
|
|
158
|
+
| 文件 | 变更 |
|
|
159
|
+
|------|------|
|
|
160
|
+
| `src/df_test_framework/testing/data/pipeline/context.py` | 新增 `CaseContext[T]` |
|
|
161
|
+
| `src/df_test_framework/testing/data/pipeline/dataset.py` | 新增 `CaseDataset[T]`, `case_dataset()` |
|
|
162
|
+
| `src/df_test_framework/testing/data/pipeline/loader.py` | 新增 `load_cases()`, `_build_model()` |
|
|
163
|
+
| `src/df_test_framework/testing/data/pipeline/resolver.py` | 新增 `DataAssetResolver` |
|
|
164
|
+
| `src/df_test_framework/testing/data/pipeline/reporter.py` | 新增 `CaseReporter` |
|
|
165
|
+
| `src/df_test_framework/testing/data/pipeline/__init__.py` | 新增模块入口 |
|
|
166
|
+
| `src/df_test_framework/testing/plugins/data_pipeline.py` | 新增 pytest 插件 |
|
|
167
|
+
| `src/df_test_framework/testing/data/__init__.py` | 导出管线 API |
|
|
168
|
+
| `pyproject.toml` | 注册 pytest11 入口点 |
|
|
169
|
+
| `tests/testing/data/pipeline/test_pipeline.py` | 22 项单元测试 |
|
|
170
|
+
| `docs/guides/test_data_pipeline_design.md` | 设计文档 |
|
|
171
|
+
| `docs/guides/test_data.md` | 更新阅读路径 |
|
|
172
|
+
| `docs/guides/fixture_chain_pattern.md` | 添加管线引用 |
|
|
173
|
+
| `cli/templates/project/fixture_chain_example.py` | 添加集成示例模板 |
|