df-test-framework 4.3.1__tar.gz → 4.4.3__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.3.1 → df_test_framework-4.4.3}/CHANGELOG.md +75 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/CLAUDE.md +18 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/PKG-INFO +1 -1
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/testing.md +20 -1
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/failure-diagnosis-hook-example.py +4 -2
- df_test_framework-4.4.3/docs/guides/fixture_chain_pattern.md +224 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/fixtures_guide.md +68 -2
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/local_debug_quickstart.md +20 -4
- df_test_framework-4.4.3/docs/guides/sanitize_guide.md +176 -0
- df_test_framework-4.4.3/docs/guides/service_client_guide.md +451 -0
- df_test_framework-4.4.3/docs/releases/v4.4.0.md +111 -0
- df_test_framework-4.4.3/docs/releases/v4.4.1.md +239 -0
- df_test_framework-4.4.3/docs/releases/v4.4.2.md +96 -0
- df_test_framework-4.4.3/docs/releases/v4.4.3.md +100 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/pyproject.toml +1 -1
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/__init__.py +12 -2
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +14 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +9 -1
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +28 -3
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -15
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/init_cmd.py +5 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/__init__.py +2 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/env_files.py +20 -21
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/__init__.py +2 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/conftest.py +13 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +1 -1
- df_test_framework-4.4.3/src/df_test_framework/cli/templates/project/fixture_chain_example.py +236 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/fixtures_init.py +8 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/full_conftest.py +13 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/readme.py +4 -2
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/schema.py +3 -13
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/bus.py +0 -5
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/config.py +3 -3
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/observability.py +7 -14
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/sanitize/__init__.py +9 -5
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/sanitize/service.py +46 -47
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +3 -19
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +3 -20
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/debugging/console.py +2 -28
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/__init__.py +3 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/service_client.py +79 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/cleanup.py +0 -2
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/core.py +0 -1
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/debugging.py +91 -43
- df_test_framework-4.4.3/src/df_test_framework/testing/fixtures/http_recorder.py +253 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/observer.py +13 -78
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/sanitize/test_service.py +36 -73
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_integrations.py +0 -2
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_interceptors.py +11 -30
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/debugging/test_console_debug_observer.py +22 -62
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/decorators/test_service_client.py +85 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_debugging.py +102 -0
- df_test_framework-4.4.3/tests/testing/fixtures/test_http_recorder.py +84 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/uv.lock +150 -149
- df_test_framework-4.3.1/docs/guides/sanitize_guide.md +0 -351
- df_test_framework-4.3.1/docs/guides/service_client_guide.md +0 -283
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.editorconfig +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.env.example +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.gitattributes +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.gitignore +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.gitleaks.toml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.gitleaksignore +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/.python-version +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/AGENTS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/README_PYPI.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/FAQ.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/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.3.1 → df_test_framework-4.4.3}/docs/archive/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/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.3.1 → df_test_framework-4.4.3}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/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.3.1 → df_test_framework-4.4.3}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/development/local-development.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/decorators_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/helpers_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/storage.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/guides/web-ui-testing.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/migration/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.2.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.2.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.2.2.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.3.0.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/releases/v4.3.1.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/examples/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/hash.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/signature.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/oms_reporter_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/api_class.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/auth.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/ui.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/README.md +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/conftest.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_context.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_events.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/core/test_types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_helpers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.3.1 → df_test_framework-4.4.3}/verify_fixes.py +0 -0
|
@@ -5,6 +5,81 @@
|
|
|
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.4.3] - 2026-04-23
|
|
9
|
+
|
|
10
|
+
### ♻️ 重构
|
|
11
|
+
|
|
12
|
+
- **脱敏收归事件源(EventPublisher)**:HTTP/gRPC/GraphQL 三个 EventPublisher 中间件统一在发布事件前完成脱敏,事件总线成为"干净数据总线"。ConsoleDebugObserver、AllureObserver(事件路径)、HttpRequestRecorder header 展示均移除冗余脱敏逻辑,直接消费已脱敏的事件数据
|
|
13
|
+
- **消除独立脱敏硬编码**:TracingInterceptor(HTTP)、GrpcTracingMiddleware、ObservabilityLogger 三处自持的 sensitive_keys/sensitive_headers 配置参数废除,统一委托给 `SanitizeService`,与全局 `SanitizeConfig` 保持一致
|
|
14
|
+
- **简化 SanitizeService API**:`sanitize_data(data, context)` 和 `sanitize_text(text, context)` 的 `context` 参数移除(per-context 开关无意义,脱敏应在源头一次完成);`is_context_enabled()` 方法移除;`SanitizeConfig` 移除 `console`/`allure` 子配置,仅保留有独立意义的 `logging` 子配置
|
|
15
|
+
- **HttpRequestRecorder failure section 保留安全兜底**:`_format_body` 作为最终展示边界,保留对 body 的脱敏处理,防止非事件路径注入的原始数据泄露
|
|
16
|
+
|
|
17
|
+
## [4.4.2] - 2026-04-20
|
|
18
|
+
|
|
19
|
+
### 🐛 修复
|
|
20
|
+
|
|
21
|
+
- **(P2) `_check_observability` 漏报**:装饰器声明了显式依赖(如 `token="..."`)时,auto-inject 整体跳过,即使 `__init__` 有 `runtime` 形参也不会被注入,但原逻辑判断 `runtime in params` 就不告警。修复后仅以 `dependencies` 是否含 `runtime` 为判据,两种漏报场景均能告警,且文案区分"缺形参"与"依赖未点名"两种修复路径
|
|
22
|
+
- **(P3) HTTP Context form body 明文泄露**:`_format_body` 对非 JSON 文本调用 `sanitize_message()` 时,该方法硬编码检查 `logging.enabled`,导致 `logging` 关闭而 `console` 开启时 form-urlencoded body 原样输出
|
|
23
|
+
|
|
24
|
+
### ♻️ 重构
|
|
25
|
+
|
|
26
|
+
- **统一脱敏 API**:将 `sanitize_dict(data, context="default")` 重命名为 `sanitize_data(data, context)`,`sanitize_message(text)` 重命名为 `sanitize_text(text, context)`;两个方法均要求显式传 `context`,消除硬编码上下文的历史问题。`sanitize_data` 同时支持顶层 `list`,allure observer 中的 list 元素循环可简化为一次调用
|
|
27
|
+
- 所有输出通道(HTTP Context、console_debugger、Allure、structlog)均已对齐新 API
|
|
28
|
+
|
|
29
|
+
### 📚 文档 & 模板
|
|
30
|
+
|
|
31
|
+
- 重写 `docs/guides/sanitize_guide.md`,以"三条统一入口 + context 归属表 + 业务补字段"为主线,删除旧版散碎写法和错误的调试建议
|
|
32
|
+
- 修正脚手架 `readme.py` 两处 `logging.sanitize: false`(无效路径)→ `sanitize.console.enabled: false`
|
|
33
|
+
- 更新 `env_files.py` base 注释,从 `enabled/strategy` 改为 `sensitive_keys` 业务扩展示例
|
|
34
|
+
|
|
35
|
+
## [4.4.1] - 2026-04-18
|
|
36
|
+
|
|
37
|
+
### 🐛 修复
|
|
38
|
+
|
|
39
|
+
- **(P1, 安全) `sanitize_header()` 不再绕过脱敏策略**: 早期实现把 Bearer 截断写死,忽略 `default_strategy` 配置,导致用户在生产环境设为 FULL/HASH 时仍会暴露明文。修复后 scheme-prefixed 短路仅在 `PARTIAL` 下生效,FULL/HASH 一律路由到 `sanitize_value` 得到 `******` 或 `sha256:xxx`
|
|
40
|
+
- **(P2) HTTP Context 阶段覆盖**: 之前仅 `call` 阶段失败时注入,setup / teardown 失败拿不到上下文
|
|
41
|
+
|
|
42
|
+
### 🔧 改进
|
|
43
|
+
|
|
44
|
+
- 🩺 **`HttpRequestRecorder` 组件** (`testing/fixtures/http_recorder.py`): 轻量 HTTP 请求/响应缓存器,订阅 EventBus,自动排除认证类 URL,按 `correlation_id` 关联 Start/End 事件。`_pending` 中已发出但响应事件未到达的请求在格式化时附加 `← no response (async)` 标记
|
|
45
|
+
- 🛟 **`_http_failure_section` autouse fixture** (`testing/fixtures/debugging.py`): 测试失败时自动把最近 3 次业务请求/响应作为 `HTTP Context` section 注入 pytest 报告。无需 `-s` / `--log-cli-level=DEBUG`,无需任何配置或显式声明,对所有测试生效;用例成功时不输出
|
|
46
|
+
- 🔐 **`SanitizeService.sanitize_header()` 公共 API** (`infrastructure/sanitize/service.py`): HTTP header 专用脱敏方法,统一 ConsoleDebugObserver、AllureObserver、HttpRequestRecorder 三处实现
|
|
47
|
+
- ✂️ **scheme-prefixed token 截断**: PARTIAL 策略下 `Authorization: Bearer eyJhbGciOi...KS8yo`(前 8 + ... + 后 5),覆盖 Bearer/Basic/Token/Digest/Mac/Hawk
|
|
48
|
+
- **`ConsoleDebugObserver` HTTP header 输出**: 改为直接调用 `sanitize_header()`,与 `HttpRequestRecorder.format_section()` 输出格式完全一致;非 HTTP 路径(gRPC metadata、MQ 消息)的通用 `_sanitize_value` 行为保持不变
|
|
49
|
+
- 🚧 **`ServiceClientObservabilityWarning`** (`testing/decorators/service_client.py`): `@service_client` 装饰的 `HttpClient`/`AsyncHttpClient` 子类未在 `__init__` 声明 `runtime` 参数时,注册期发出警告。提示用户:该客户端的 HTTP 请求会绕过 EventBus,失败 section / console_debugger / Allure attachment 都拿不到。CI 可通过 `filterwarnings = ["error::df_test_framework.testing.decorators.ServiceClientObservabilityWarning"]` 升级为错误
|
|
50
|
+
|
|
51
|
+
### 📚 文档
|
|
52
|
+
|
|
53
|
+
- 新增 [v4.4.1 发布说明](docs/releases/v4.4.1.md)
|
|
54
|
+
- 更新 `docs/guides/sanitize_guide.md` —— 新增 "HTTP Header 脱敏" 小节
|
|
55
|
+
- 更新 `docs/guides/fixtures_guide.md` —— 新增 "失败上下文 Fixture" 小节
|
|
56
|
+
- 更新 `docs/guides/local_debug_quickstart.md` —— 业务失败时无需 `-s` 即可看到 HTTP Context
|
|
57
|
+
- 更新 `docs/guides/service_client_guide.md` —— 所有 `HttpClient` 子类示例统一加 `runtime=None`;新增 "事件发布与可观测性(必读)" 章节
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## [4.4.0] - 2026-04-17
|
|
62
|
+
|
|
63
|
+
### ✨ 新增功能
|
|
64
|
+
|
|
65
|
+
- 📐 **长链路前置造数 Fixture 链范式** (`cli/templates/project/fixture_chain_example.py`): 新增可复制的两层结构骨架,解决 E2E 测试 ≥3 步业务前置在 ≥2 个文件复用时的"跨文件偷 import 私有函数"坏味道
|
|
66
|
+
- **底层 step 函数**:公开签名 + `cleanup.add(...)` 内嵌,独立可调用
|
|
67
|
+
- **组合 + Fixture 层**:`provision_*(...)` 顶层语义函数 + `business_prerequisite` 一站式 fixture + `account_created` / `resource_created` 细粒度 fixture
|
|
68
|
+
- **数据契约**:每层返回 `@dataclass(frozen=True)` + `@property` 便捷访问
|
|
69
|
+
- **加载机制**:通过 `tests/conftest.py` 的 `pytest_plugins = ["{project}.fixtures.example_chain"]` 加载
|
|
70
|
+
|
|
71
|
+
- 📦 **脚手架自动生成范式骨架**: `df-test init my-project --type api|full` 现会在 `src/{project}/fixtures/example_chain.py` 生成可改写的副本
|
|
72
|
+
|
|
73
|
+
- 📚 **新增范式指南** (`docs/guides/fixture_chain_pattern.md`): 涵盖问题陈述、决策标准(何时启用 / 不启用)、两层结构、线性 vs 分叉链路、Cleanup 集成、反模式清单,以及 **UI 测试的对应思考**(默认推荐 `storage_state` + Page Object,仅当 ≥3 个 page action 业务流程才升级到链范式)
|
|
74
|
+
|
|
75
|
+
### 🔧 改进
|
|
76
|
+
|
|
77
|
+
- **`conftest.py` / `full_conftest.py` 模板**: 新增注释化 `pytest_plugins` 块,引导用户启用业务领域 fixture 链
|
|
78
|
+
- **`fixtures_init.py` 模板**: 新增范式提示,避免在 `__init__.py` 里 `from .xxx_chain import *` 绕开 pytest fixture 注册的反模式
|
|
79
|
+
- **`enhanced_gitignore` 模板**: `config/secrets/` → `config/secrets/*`,配合 `!.gitkeep` 和 `!.env.local.example` 例外规则正确生效
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
8
83
|
## [4.3.1] - 2026-04-16
|
|
9
84
|
|
|
10
85
|
### 🔧 改进
|
|
@@ -127,6 +127,24 @@ def test_login(self): ...
|
|
|
127
127
|
|
|
128
128
|
## 版本发布
|
|
129
129
|
|
|
130
|
+
### 版本号选择规则(语义化版本)
|
|
131
|
+
|
|
132
|
+
**完整规范**: `docs/development/VERSION_CONTROL_RULES.md`
|
|
133
|
+
|
|
134
|
+
**MAJOR / MINOR / PATCH 决策三问**(在改 `pyproject.toml` 前先回答):
|
|
135
|
+
|
|
136
|
+
1. 这是**独立的功能模块**吗?(不是现有功能的延续/增强)
|
|
137
|
+
2. 值得**单独写一篇发布文档**吗?
|
|
138
|
+
3. 用户会**专门为它升级**吗?
|
|
139
|
+
|
|
140
|
+
- 三个都是 YES → **MINOR +1**(如新增 GraphQL 客户端、新增分布式追踪)
|
|
141
|
+
- 否则 → **PATCH +1**(bug 修复、性能优化、内部统一、辅助方法、现有主题的延续补强)
|
|
142
|
+
- 不兼容变更 / 移除 API / 升级最低 Python 版本 → **MAJOR +1**
|
|
143
|
+
|
|
144
|
+
**核心原则**:MINOR 要克制,相关功能合并发布;PATCH 要积极,bug 立即修。
|
|
145
|
+
|
|
146
|
+
### 发布步骤
|
|
147
|
+
|
|
130
148
|
发布新版本时,严格按以下顺序执行:
|
|
131
149
|
|
|
132
150
|
### Step 1: 更新文件
|
|
@@ -1161,7 +1161,7 @@ def test_create_card(
|
|
|
1161
1161
|
| 维度 | @api_class | @service_client |
|
|
1162
1162
|
|------|-----------|----------------|
|
|
1163
1163
|
| 基类要求 | 必须继承 `BaseAPI` | 无要求 |
|
|
1164
|
-
| HTTP 客户端 | 共享框架的 `http_client` |
|
|
1164
|
+
| HTTP 客户端 | 共享框架的 `http_client` | 推荐基于框架 `HttpClient` / `AsyncHttpClient` 自行封装 |
|
|
1165
1165
|
| base_url | 从框架配置统一获取 | 通过 `base_url_config` 注入 |
|
|
1166
1166
|
| 认证方式 | 框架中间件统一处理 | 各客户端自行实现 |
|
|
1167
1167
|
|
|
@@ -1171,6 +1171,25 @@ def test_create_card(
|
|
|
1171
1171
|
|
|
1172
1172
|
`settings`、`database`、`async_database`、`redis_client`、`async_redis_client`、`runtime`、`rabbitmq_client`、`kafka_client`、`rocketmq_client`
|
|
1173
1173
|
|
|
1174
|
+
### 推荐写法
|
|
1175
|
+
|
|
1176
|
+
当 fixture 本身就是“一个独立 HTTP 客户端”时,推荐直接继承框架 `HttpClient`:
|
|
1177
|
+
|
|
1178
|
+
```python
|
|
1179
|
+
from df_test_framework import HttpClient
|
|
1180
|
+
from df_test_framework.testing.decorators import service_client
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
@service_client("payment_client", base_url_config="business.payment_url")
|
|
1184
|
+
class PaymentClient(HttpClient):
|
|
1185
|
+
def __init__(self, base_url: str, runtime=None) -> None:
|
|
1186
|
+
super().__init__(base_url=base_url, max_retries=0, runtime=runtime)
|
|
1187
|
+
```
|
|
1188
|
+
|
|
1189
|
+
> **v4.4.1 起强制要求**:`HttpClient` / `AsyncHttpClient` 子类必须在 `__init__` 声明 `runtime=None` 并透传给 `super().__init__()`,否则该客户端发出的 HTTP 请求不会经过 EventBus,失败 section 的 `HTTP Context`、`console_debugger`、Allure HTTP attachment 都拿不到。注册期会发出 `ServiceClientObservabilityWarning`。详见 [service_client_guide.md → 事件发布与可观测性](../guides/service_client_guide.md)。
|
|
1190
|
+
|
|
1191
|
+
`@service_client` 仍兼容普通类和其他 HTTP 库,但那属于兼容场景,不是首选推荐。对于需要统一重试、中间件、事件发布和调试链路的项目,优先使用框架 `HttpClient` / `AsyncHttpClient`。
|
|
1192
|
+
|
|
1174
1193
|
---
|
|
1175
1194
|
|
|
1176
1195
|
## 🔗 相关文档
|
|
@@ -43,10 +43,11 @@ def pytest_runtest_makereport(item, call):
|
|
|
43
43
|
# 附加到 Allure 报告
|
|
44
44
|
try:
|
|
45
45
|
import allure
|
|
46
|
+
|
|
46
47
|
allure.attach.file(
|
|
47
48
|
str(screenshot_path),
|
|
48
49
|
name="失败截图",
|
|
49
|
-
attachment_type=allure.attachment_type.PNG
|
|
50
|
+
attachment_type=allure.attachment_type.PNG,
|
|
50
51
|
)
|
|
51
52
|
except ImportError:
|
|
52
53
|
pass # 未安装 allure-pytest,跳过
|
|
@@ -64,10 +65,11 @@ def pytest_runtest_makereport(item, call):
|
|
|
64
65
|
# 附加到 Allure 报告
|
|
65
66
|
try:
|
|
66
67
|
import allure
|
|
68
|
+
|
|
67
69
|
allure.attach.file(
|
|
68
70
|
str(video_path),
|
|
69
71
|
name="测试视频",
|
|
70
|
-
attachment_type=allure.attachment_type.WEBM
|
|
72
|
+
attachment_type=allure.attachment_type.WEBM,
|
|
71
73
|
)
|
|
72
74
|
except ImportError:
|
|
73
75
|
pass
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# 长链路前置造数:Fixture 链范式
|
|
2
|
+
|
|
3
|
+
> **最后更新**: 2026-04-17
|
|
4
|
+
> **适用版本**: v4.4.0+
|
|
5
|
+
> **配套模板**: `cli/templates/project/fixture_chain_example.py`(脚手架生成 `src/{project}/fixtures/example_chain.py`)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 目录
|
|
10
|
+
|
|
11
|
+
- [问题:为什么需要这个范式](#问题为什么需要这个范式)
|
|
12
|
+
- [何时启用 / 何时不启用](#何时启用--何时不启用)
|
|
13
|
+
- [两层结构](#两层结构)
|
|
14
|
+
- [完整示例](#完整示例)
|
|
15
|
+
- [线性链路 vs 分叉链路](#线性链路-vs-分叉链路)
|
|
16
|
+
- [Cleanup 集成](#cleanup-集成)
|
|
17
|
+
- [反模式](#反模式)
|
|
18
|
+
- [UI 测试的对应思考](#ui-测试的对应思考)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 问题:为什么需要这个范式
|
|
23
|
+
|
|
24
|
+
E2E 测试常常需要"建租户 → 建账号 → 建商品 → 建订单"这种 N 步业务前置。如果不抽取,会出现 3 类典型坏味道:
|
|
25
|
+
|
|
26
|
+
1. **跨文件偷 import 私有函数**
|
|
27
|
+
`from tests.api.test_order_e2e import _step1_create_supplier`
|
|
28
|
+
→ 修改测试 A 时悄悄改坏了测试 B;新成员不知道哪些 `_step` 是公共契约。
|
|
29
|
+
|
|
30
|
+
2. **每个 e2e 文件复制一份相同的 7 步**
|
|
31
|
+
→ 业务 schema 升级时要改 N 处;漏改一处 → 测试间断式失败。
|
|
32
|
+
|
|
33
|
+
3. **fixture 写在 conftest 里没有清晰边界**
|
|
34
|
+
→ conftest 越长越难读;fixture 之间的依赖关系隐式藏在闭包里。
|
|
35
|
+
|
|
36
|
+
**本范式的目标**:让"业务前置数据链"成为一等公民——**有显式的模块、有公开的契约、有明确的扩展点**。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 何时启用 / 何时不启用
|
|
41
|
+
|
|
42
|
+
| 启用 | 不启用 |
|
|
43
|
+
|------|--------|
|
|
44
|
+
| E2E 测试有 ≥3 步业务前置 | 单测试只用 1-2 步 → 直接 inline |
|
|
45
|
+
| 这套前置在 ≥2 个测试文件里复用 | 仅 1 个文件复用 → 抽到 module 顶部 helper |
|
|
46
|
+
| 之前为了复用偷 `from tests.xxx import _step_*` | 单元测试 / mock 化测试 |
|
|
47
|
+
| 业务链路有自然的"分叉点"(1 个账号 × 多个资源) | UI 测试以登录态为前置 → 优先 `storage_state` |
|
|
48
|
+
|
|
49
|
+
**判断口诀**:拿出代码统计——单文件 + ≤2 步 → 不抽;多文件 + ≥3 步 → 抽。中间地带(如 2 文件 + 2 步)多半也不值得抽,等第 3 个文件出现再说。
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 两层结构
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
┌──────────────────────────────────────────────────────────┐
|
|
57
|
+
│ 二、组合 + Fixture 层(pytest 入口) │
|
|
58
|
+
│ - business_prerequisite fixture(一站式,覆盖 80% 场景)│
|
|
59
|
+
│ - account_created / resource_created(细粒度,分叉用) │
|
|
60
|
+
│ - provision_*(...) 顶层语义函数(一次造完一段) │
|
|
61
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
62
|
+
│ 调用
|
|
63
|
+
┌────────────────────────▼─────────────────────────────────┐
|
|
64
|
+
│ 一、底层 step 函数(pure function) │
|
|
65
|
+
│ - step_create_account(...) │
|
|
66
|
+
│ - step_create_resource(...) │
|
|
67
|
+
│ - step_bind_resource_to_account(...) │
|
|
68
|
+
│ 签名公开、参数显式;cleanup.add(...) 内嵌 │
|
|
69
|
+
└──────────────────────────────────────────────────────────┘
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**核心约定**:
|
|
73
|
+
- **底层 step 函数公开签名**——`step_create_account(account_api, test_id, cleanup)`,不藏 `_` 前缀。
|
|
74
|
+
- **每层返回 `frozen=True` 的 dataclass**,不返回 `dict` / `tuple`,避免下游用魔法字符串取值。
|
|
75
|
+
- **dataclass 上加 `@property` 便捷访问**:`prerequisite.account_id` 比 `prerequisite.account.account_id` 更顺手。
|
|
76
|
+
- **`provision_*(...)` 是顶层语义函数**,把"造一段链路"封装为一行调用,给分叉用例循环时用。
|
|
77
|
+
- **fixture 分两档**:一站式(`business_prerequisite`)+ 细粒度(`account_created`),不要只提供一站式。
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 完整示例
|
|
82
|
+
|
|
83
|
+
完整骨架见 `cli/templates/project/fixture_chain_example.py`。脚手架 `df-test init my-project --type api` 会在 `src/my_project/fixtures/example_chain.py` 生成可改写的副本。
|
|
84
|
+
|
|
85
|
+
启用步骤(5 步):
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
# 1. 把模板里的 Account / Resource / Workflow 等占位实体替换为真实业务名词
|
|
89
|
+
# 2. 把 step_* 内的 API 调用替换为真实业务调用
|
|
90
|
+
# 3. 保留 cleanup.add(...) 内嵌写法(cleanup 与 step 同生命周期,调试时不易遗漏)
|
|
91
|
+
# 4. 在 tests/conftest.py 添加:
|
|
92
|
+
pytest_plugins = ["my_project.fixtures.example_chain"]
|
|
93
|
+
|
|
94
|
+
# 5. E2E 测试直接消费 fixture:
|
|
95
|
+
def test_main_flow(business_prerequisite):
|
|
96
|
+
assert business_prerequisite.account_id > 0
|
|
97
|
+
assert business_prerequisite.resource_id > 0
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 线性链路 vs 分叉链路
|
|
103
|
+
|
|
104
|
+
### 场景 A:线性 1×1×1(80% 用例)
|
|
105
|
+
|
|
106
|
+
`business_prerequisite` 一站式 fixture 直接覆盖:
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
def test_full_order_flow(order_prerequisite):
|
|
110
|
+
"""完整下单链路:1 账号 + 1 商品 + 1 订单"""
|
|
111
|
+
place_order(order_prerequisite.account_id, order_prerequisite.resource_id)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 场景 B:分叉 1 账号 × N 资源(如回调三态测试)
|
|
115
|
+
|
|
116
|
+
不要为分叉造一个新 fixture——**直接消费细粒度 fixture + 在测试里循环调用 `provision_*`**:
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
def test_callback_three_states(account_created, resource_api, binding_api,
|
|
120
|
+
business_test_id, cleanup):
|
|
121
|
+
"""1 账号 × 3 通道(成功/失败/处理中)"""
|
|
122
|
+
channels = {
|
|
123
|
+
ch_type: provision_resource(
|
|
124
|
+
resource_api, binding_api, account_created, business_test_id,
|
|
125
|
+
cleanup, resource_type=ch_type,
|
|
126
|
+
)
|
|
127
|
+
for ch_type in ("success", "fail", "processing")
|
|
128
|
+
}
|
|
129
|
+
for ch_type, ch in channels.items():
|
|
130
|
+
trigger_callback(account_created.account_id, ch.resource_id, state=ch_type)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**关键设计**:
|
|
134
|
+
- `step_create_resource(..., resource_type="default")` 用 keyword-only 参数支持分叉。
|
|
135
|
+
- `provision_resource(...)` 把"建+绑"打包成一次调用,循环时不必重复 step 序列。
|
|
136
|
+
- 共用 `account_created` fixture,N 个资源真正复用 1 个账号。
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Cleanup 集成
|
|
141
|
+
|
|
142
|
+
**约定**:`cleanup.add(key, id)` 必须**内嵌在 `step_*` 函数内**,不要让调用方手动注册。
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
def step_create_account(account_api, test_id, cleanup) -> AccountData:
|
|
146
|
+
with step("步骤1: 新建账号"):
|
|
147
|
+
response = account_api.create(name=f"acct_{test_id}")
|
|
148
|
+
cleanup.add("account", response.id) # ⭐ 内嵌,不依赖调用方
|
|
149
|
+
return AccountData(account_id=response.id, ...)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**理由**:
|
|
153
|
+
- 造数 = 造 + 注册清理是一对原子操作,分开写迟早漏。
|
|
154
|
+
- 调试时把 step 函数单独 import 也能正常清理。
|
|
155
|
+
- `cleanup` fixture 是配置驱动的(`CLEANUP__MAPPINGS__*`),重复注册同一 ID 是幂等的。
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 反模式
|
|
160
|
+
|
|
161
|
+
| ❌ 不要这样 | ✅ 改成这样 |
|
|
162
|
+
|------------|------------|
|
|
163
|
+
| `from tests.api.test_x import _step1, _step2` | 抽到 `src/{project}/fixtures/xxx_chain.py` |
|
|
164
|
+
| `step` 函数返回 `dict` 或 `tuple` | 返回 `@dataclass(frozen=True)` |
|
|
165
|
+
| `cleanup.add` 写在测试里 | 写在 `step_*` 函数里 |
|
|
166
|
+
| 只提供一站式 `business_prerequisite` | 同时暴露 `account_created` 等细粒度 fixture |
|
|
167
|
+
| 分叉用例新建一个 `branched_prerequisite` fixture | 复用 `account_created` + 循环调用 `provision_*` |
|
|
168
|
+
| step 函数加 `_` 前缀 | 公开签名、放进 `__all__` |
|
|
169
|
+
| 在 `fixtures/__init__.py` 里 `from .xxx_chain import *` | 通过 `pytest_plugins = [...]` 加载 |
|
|
170
|
+
|
|
171
|
+
最后一条特别重要:**fixture 模块要通过 `pytest_plugins` 加载,不要在 `__init__.py` 里 import**。后者会绕开 pytest 的 fixture 注册机制,触发 collection 期的奇怪错误。
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## UI 测试的对应思考
|
|
176
|
+
|
|
177
|
+
UI 测试的"前置"和 API 测试形态不同,**默认不需要本范式**:
|
|
178
|
+
|
|
179
|
+
### 默认方案:`storage_state` + Page Object
|
|
180
|
+
|
|
181
|
+
> v4.0.3+ 框架原生支持 `storage_state`,详见 `docs/guides/auth_session_guide.md`。
|
|
182
|
+
|
|
183
|
+
90% 的 UI 测试前置就是"已登录用户",框架的 `AuthSetup` 已经把这一步做掉了:
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
# tests/conftest.py
|
|
187
|
+
@pytest.fixture(scope="session")
|
|
188
|
+
def storage_state(auth_setup):
|
|
189
|
+
return auth_setup.create_state(login_func=lambda page: ...)
|
|
190
|
+
|
|
191
|
+
# 测试里直接用 page,已是登录态
|
|
192
|
+
def test_dashboard(page):
|
|
193
|
+
page.goto("/dashboard")
|
|
194
|
+
expect(page.get_by_text("Welcome")).to_be_visible()
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
这比 API 链路简单得多:UI 状态可以"序列化到磁盘 + 跨 session 复用",而 API 业务数据通常需要每次新建(避免数据污染)。
|
|
198
|
+
|
|
199
|
+
### 何时 UI 也用 Fixture 链范式
|
|
200
|
+
|
|
201
|
+
仅当 **UI 业务流程 ≥3 个 page action 且在 ≥2 个测试文件里复用** 时才考虑。例如:
|
|
202
|
+
|
|
203
|
+
- 配置向导:登录 → 选模板 → 填表单 → 预览 → 发布(5 步)
|
|
204
|
+
- 商家入驻:登录 → 填资质 → 上传证件 → 提交审核 → 等待通过(5 步)
|
|
205
|
+
|
|
206
|
+
UI 范式的对应映射:
|
|
207
|
+
|
|
208
|
+
| API 范式 | UI 范式 |
|
|
209
|
+
|---------|---------|
|
|
210
|
+
| `step_create_xxx(api, ...)` | `step_xxx_action(page, ...)` |
|
|
211
|
+
| `provision_*(...)` | `provision_ui_state(...)` |
|
|
212
|
+
| `cleanup.add("table", id)` | 通常无需清理(storage_state 已隔离)|
|
|
213
|
+
| 返回 `@dataclass(frozen=True)` | 返回 `@dataclass(frozen=True)`,记录 page state |
|
|
214
|
+
| 通过 `pytest_plugins` 加载 | 通过 `pytest_plugins` 加载 |
|
|
215
|
+
|
|
216
|
+
**警惕**:UI 链通常比 API 慢一个数量级(每步要等渲染),如果能用 API 造数 + UI 验证的组合,**优先用 API 造前置**,让 UI 只负责验证用户可见的部分。
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 参考
|
|
221
|
+
|
|
222
|
+
- 完整范式骨架: `src/df_test_framework/cli/templates/project/fixture_chain_example.py`
|
|
223
|
+
- 真实案例: `D:\Git\DF\master_test\src\master_test\fixtures\order_chain.py`(7 步下单前置链)
|
|
224
|
+
- 相关文档: [Fixtures 使用指南](./fixtures_guide.md) · [测试数据管理](./test_data.md) · [认证会话指南](./auth_session_guide.md)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Fixtures 使用指南
|
|
2
2
|
|
|
3
|
-
> **最后更新**: 2026-
|
|
4
|
-
> **适用版本**: v3.0.0+
|
|
3
|
+
> **最后更新**: 2026-04-18
|
|
4
|
+
> **适用版本**: v3.0.0+;v4.4.1+ 新增 `_http_failure_section` autouse fixture
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -423,6 +423,71 @@ def test_with_test_runtime(test_runtime):
|
|
|
423
423
|
|
|
424
424
|
---
|
|
425
425
|
|
|
426
|
+
### 失败上下文 Fixture(v4.4.1+,autouse)
|
|
427
|
+
|
|
428
|
+
#### `_http_failure_section` - 失败时自动注入 HTTP 上下文
|
|
429
|
+
|
|
430
|
+
**Scope**: `function`
|
|
431
|
+
**自动**: 是(autouse=True,无需声明)
|
|
432
|
+
**版本**: v4.4.1+
|
|
433
|
+
**位置**: `df_test_framework/testing/fixtures/debugging.py`
|
|
434
|
+
|
|
435
|
+
对所有测试自动生效,**不需要写在测试参数里、不需要任何配置**:
|
|
436
|
+
|
|
437
|
+
- 测试开始时为该用例创建 `HttpRequestRecorder`,订阅当前 EventBus
|
|
438
|
+
- 测试通过时不输出任何内容(不污染正常日志)
|
|
439
|
+
- 测试在 **任意阶段(setup / call / teardown)** 失败时,把最近 3 次业务请求/响应作为
|
|
440
|
+
`HTTP Context` section 注入 pytest 报告
|
|
441
|
+
|
|
442
|
+
#### 输出示例
|
|
443
|
+
|
|
444
|
+
```text
|
|
445
|
+
_______________________ TestOrder.test_create_order ______________________
|
|
446
|
+
...
|
|
447
|
+
E AssertionError: 期望 retCode=0,实际为 1
|
|
448
|
+
|
|
449
|
+
----------------------------- HTTP Context -----------------------------
|
|
450
|
+
[1] POST https://api.example.com/orders ← business failure
|
|
451
|
+
Request Headers:
|
|
452
|
+
Authorization: Bearer eyJhbGciOi...KS8yo
|
|
453
|
+
Content-Type: application/json
|
|
454
|
+
Request Body: {"product_id":"P001","quantity":2}
|
|
455
|
+
Response: ❌ 200 (123ms)
|
|
456
|
+
{"retCode":"1","retMsg":"IP地址非法,请求IP:113.57.21.67"}
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
三种 tag:
|
|
460
|
+
|
|
461
|
+
| tag | 含义 |
|
|
462
|
+
|-----|------|
|
|
463
|
+
| `← business failure` | HTTP 状态码 ≥ 400,或响应体内 `retCode/code/errCode` 等键非成功值 |
|
|
464
|
+
| `← request error` | 请求层异常(连接拒绝、超时、DNS 失败等) |
|
|
465
|
+
| `← no response (async)` | 已发出 Start 事件但 End 事件尚未到达(async 时序兜底) |
|
|
466
|
+
|
|
467
|
+
#### 配置
|
|
468
|
+
|
|
469
|
+
无需任何配置。框架自动:
|
|
470
|
+
|
|
471
|
+
- 排除认证类 URL(`/login/token`、`/auth/token`、`/oauth/token` 等),避免污染上下文
|
|
472
|
+
- 缓存最近 **3** 条业务请求(队列大小由 `HttpRequestRecorder(max_records=3)` 控制)
|
|
473
|
+
- header 输出走 `SanitizeService.sanitize_header()`,与 console / Allure 格式一致
|
|
474
|
+
- request/response body 超过 500 字符自动截断并注明 `共 N 字符`
|
|
475
|
+
|
|
476
|
+
#### 与 `console_debugger` / `debug_mode` 的区别
|
|
477
|
+
|
|
478
|
+
| Fixture | 何时输出 | 是否需要 `-s` | 适用场景 |
|
|
479
|
+
|---------|---------|--------------|----------|
|
|
480
|
+
| `_http_failure_section` | **失败时**,写入 pytest section | 否 | 默认兜底,CI 失败排查 |
|
|
481
|
+
| `console_debugger` | **每个请求实时**输出彩色调试信息 | 是 | 主动调试,本地开发 |
|
|
482
|
+
| `debug_mode` | 同 `console_debugger`(依赖它) | 是 | 用例级别开关 |
|
|
483
|
+
|
|
484
|
+
> **重要前置**:`HttpRequestRecorder` 通过订阅 `HttpRequest{Start,End,Error}Event` 工作。
|
|
485
|
+
> 若项目里 `@service_client` 装饰类直接使用原生 `httpx.Client(...)` 而不是框架的
|
|
486
|
+
> `HttpClient`,事件不会发布,section 自然拿不到这些请求。详见
|
|
487
|
+
> [service_client 指南](service_client_guide.md)。
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
426
491
|
## API 封装 Fixtures
|
|
427
492
|
|
|
428
493
|
### 自动加载机制(v3.45.0+)
|
|
@@ -1128,6 +1193,7 @@ def test_user_order_flow(user_api, order_api):
|
|
|
1128
1193
|
|
|
1129
1194
|
## 版本历史
|
|
1130
1195
|
|
|
1196
|
+
- **v4.4.1** (2026-04-18): 新增 `_http_failure_section` autouse fixture,失败时自动注入 `HTTP Context` section(覆盖 setup/call/teardown 全阶段)
|
|
1131
1197
|
- **v4.1.0** (2026-03-03): Browser Session 复用,`browser_manager`/`browser` 提升为 session scope,context/page 保持 function scope 每测试隔离
|
|
1132
1198
|
- **v4.0.0** (2026-01-16): 全面异步化,新增 `async_http_client`、`async_database`、`async_redis_client`、`async_page` 等异步 fixtures
|
|
1133
1199
|
- **v3.45.0** (2025-12): 新增 `@api_class` 和 `@actions_class` 装饰器,API/Actions 自动加载
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 本地开发调试快速指南
|
|
2
2
|
|
|
3
|
-
> **最后更新**: 2026-
|
|
4
|
-
> **适用版本**: v3.38.0
|
|
3
|
+
> **最后更新**: 2026-04-18
|
|
4
|
+
> **适用版本**: v3.38.0+(本地调试配置);v4.4.1+ 失败自动注入 HTTP Context section
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -140,6 +140,12 @@ uv run pytest tests/ -k "login or register" --env=local -v
|
|
|
140
140
|
|
|
141
141
|
### 失败调试
|
|
142
142
|
|
|
143
|
+
> **v4.4.1+ 默认行为**:测试失败时框架自动在 pytest 报告里注入 `HTTP Context` section,
|
|
144
|
+
> 显示最近 3 次业务请求/响应(含 headers / body / 状态码 / 耗时),**无需 `-s`,
|
|
145
|
+
> 无需 `--log-cli-level=DEBUG`,无需任何 fixture 声明**。详见
|
|
146
|
+
> [fixtures_guide.md → 失败上下文 Fixture](fixtures_guide.md#失败上下文-fixturev441autouse)。
|
|
147
|
+
> 仅当需要观察 **成功用例** 的实时请求时,才需要 `-s` + `console_debugger`。
|
|
148
|
+
|
|
143
149
|
```bash
|
|
144
150
|
# 首次失败即停止
|
|
145
151
|
uv run pytest tests/ --env=local -x -v
|
|
@@ -332,6 +338,11 @@ uv run pytest tests/ --log-cli-level=DEBUG -v
|
|
|
332
338
|
|
|
333
339
|
### Q2: 想看到完整的请求/响应体?
|
|
334
340
|
|
|
341
|
+
**失败用例(v4.4.1+ 默认)**:直接看 pytest 输出里的 `HTTP Context` section,
|
|
342
|
+
无需任何额外标志。最近 3 次业务请求/响应已自动展开。
|
|
343
|
+
|
|
344
|
+
**成功用例(主动调试)**:
|
|
345
|
+
|
|
335
346
|
```bash
|
|
336
347
|
# 方式 1:环境变量
|
|
337
348
|
OBSERVABILITY__DEBUG_OUTPUT=true uv run pytest tests/ -v -s
|
|
@@ -342,6 +353,11 @@ def test_api(http_client):
|
|
|
342
353
|
pass
|
|
343
354
|
```
|
|
344
355
|
|
|
356
|
+
> 三者职责区分:
|
|
357
|
+
> - `_http_failure_section`(autouse,v4.4.1+)— 失败兜底,写 pytest section
|
|
358
|
+
> - `console_debugger` / `debug_mode` — 实时输出,需要 `-s`
|
|
359
|
+
> - `OBSERVABILITY__DEBUG_OUTPUT=true` — 全局打开 `console_debugger` 行为
|
|
360
|
+
|
|
345
361
|
### Q3: 如何在测试中打断点?
|
|
346
362
|
|
|
347
363
|
```python
|
|
@@ -423,5 +439,5 @@ uv run pytest tests/ --env=test -v
|
|
|
423
439
|
|
|
424
440
|
---
|
|
425
441
|
|
|
426
|
-
**文档版本**: v1.
|
|
427
|
-
**最后更新**:
|
|
442
|
+
**文档版本**: v1.1.0
|
|
443
|
+
**最后更新**: 2026-04-18(v4.4.1 失败自动注入 HTTP Context)
|