df-test-framework 4.1.2__tar.gz → 4.2.1__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.2.1/AGENTS.md +204 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/CHANGELOG.md +33 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/CLAUDE.md +2 -2
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/PKG-INFO +4 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/infrastructure.md +75 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/testing.md +53 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/CODE_STRUCTURE.md +35 -6
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/decorators_guide.md +74 -12
- df_test_framework-4.2.1/docs/guides/helpers_guide.md +306 -0
- df_test_framework-4.2.1/docs/guides/service_client_guide.md +283 -0
- df_test_framework-4.2.1/docs/releases/v4.2.0.md +170 -0
- df_test_framework-4.2.1/docs/releases/v4.2.1.md +84 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/pyproject.toml +6 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/__init__.py +39 -2
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/bootstrap/providers.py +10 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +2 -2
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +52 -29
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/generators/json_to_model.py +28 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/generators/openapi_generator.py +3 -2
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/utils.py +39 -0
- df_test_framework-4.2.1/src/df_test_framework/infrastructure/helpers/__init__.py +33 -0
- df_test_framework-4.2.1/src/df_test_framework/infrastructure/helpers/crypto.py +140 -0
- df_test_framework-4.2.1/src/df_test_framework/infrastructure/helpers/hash.py +69 -0
- df_test_framework-4.2.1/src/df_test_framework/infrastructure/helpers/network.py +52 -0
- df_test_framework-4.2.1/src/df_test_framework/infrastructure/helpers/signature.py +81 -0
- df_test_framework-4.2.1/src/df_test_framework/plugins/builtin/reporting/__init__.py +14 -0
- df_test_framework-4.2.1/src/df_test_framework/plugins/builtin/reporting/oms_reporter_plugin.py +158 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/decorators/__init__.py +16 -1
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/decorators/actions_class.py +7 -4
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/decorators/api_class.py +5 -4
- df_test_framework-4.2.1/src/df_test_framework/testing/decorators/service_client.py +262 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/drivers/web/test_modern_ui.py +53 -1
- df_test_framework-4.2.1/tests/infrastructure/test_helpers.py +258 -0
- df_test_framework-4.2.1/tests/testing/decorators/test_service_client.py +178 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/uv.lock +8 -2
- df_test_framework-4.1.2/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -11
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.editorconfig +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.env.example +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.gitattributes +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.gitignore +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.gitleaks.toml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.gitleaksignore +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/.python-version +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/README_PYPI.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/FAQ.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/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.1.2 → df_test_framework-4.2.1}/docs/archive/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/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.1.2 → df_test_framework-4.2.1}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/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.1.2 → df_test_framework-4.2.1}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/development/local-development.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/fixtures_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/sanitize_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/storage.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/guides/web-ui-testing.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/migration/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/examples/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/readme.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/schema.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/logging/config.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/debugging/console.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/auth.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/core.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/fixtures/ui.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/README.md +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/conftest.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_context.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_events.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/core/test_types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/sanitize/test_service.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_integrations.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_interceptors.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/debugging/test_console_debug_observer.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.1.2 → df_test_framework-4.2.1}/verify_fixes.py +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 项目概述
|
|
8
|
+
|
|
9
|
+
**DF Test Framework** - 现代化 Python 测试自动化框架
|
|
10
|
+
|
|
11
|
+
- **版本**: v4.1.2
|
|
12
|
+
- **更新时间**: 2026-03-16
|
|
13
|
+
- **Python**: 3.12+
|
|
14
|
+
- **核心技术栈**: pytest + httpx + Playwright + Pydantic v2 + SQLAlchemy 2.0 + Pluggy
|
|
15
|
+
- **架构**: 五层架构 + 横切关注点(能力层驱动设计)
|
|
16
|
+
|
|
17
|
+
### v4.0.0 重大变更
|
|
18
|
+
|
|
19
|
+
**全面异步化**:
|
|
20
|
+
- ✅ AsyncHttpClient - 并发性能提升 10-30 倍
|
|
21
|
+
- ✅ AsyncDatabase - 基于 SQLAlchemy 2.0 AsyncEngine
|
|
22
|
+
- ✅ AsyncRedis - 缓存操作提升 5-10 倍
|
|
23
|
+
- ✅ AsyncAppActions + AsyncBasePage - UI 测试性能提升 2-3 倍
|
|
24
|
+
- ✅ 完全向后兼容 - 同步 API 保留
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 核心开发命令
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 依赖管理
|
|
32
|
+
uv sync # 同步开发依赖
|
|
33
|
+
uv sync --all-extras # 同步所有可选依赖
|
|
34
|
+
|
|
35
|
+
# 测试
|
|
36
|
+
uv run pytest -v # 运行所有测试
|
|
37
|
+
uv run pytest -v --ignore=tests/test_messengers/ # 排除 MQ 测试
|
|
38
|
+
|
|
39
|
+
# 代码质量
|
|
40
|
+
uv run ruff check --fix src/ tests/ # 检查 + 自动修复
|
|
41
|
+
uv run ruff format src/ tests/ # 格式化
|
|
42
|
+
uv run mypy src/ # 类型检查,可以跳过
|
|
43
|
+
|
|
44
|
+
# 覆盖率(目标 ≥80%)
|
|
45
|
+
uv run pytest --cov=src/df_test_framework --cov-report=term-missing
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 五层架构
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Layer 4 ─── bootstrap/ # 引导层:Bootstrap、Providers、Runtime
|
|
54
|
+
Layer 3 ─── testing/ + cli/ # 门面层:Fixtures、CLI
|
|
55
|
+
Layer 2 ─── capabilities/ # 能力层:HTTP/UI/DB/MQ/Storage
|
|
56
|
+
Layer 1 ─── infrastructure/ # 基础设施:config/logging/events/plugins
|
|
57
|
+
Layer 0 ─── core/ # 核心层:纯抽象(无依赖)
|
|
58
|
+
横切 ───── plugins/ # 插件:MonitoringPlugin、AllurePlugin
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**依赖规则**: 高层可依赖低层,反之不行。Layer 0 无任何依赖。
|
|
62
|
+
|
|
63
|
+
**层级 ≠ 目录**: 层级是依赖规则,不是目录划分。同一层可以有多个顶级目录:
|
|
64
|
+
- Layer 3 包含两个独立接口:`testing/`(pytest fixtures)、`cli/`(命令行)
|
|
65
|
+
- 它们都是框架能力的"门面",依赖 Layer 0-2,互相不依赖
|
|
66
|
+
- 新增接口层时放在 `src/df_test_framework/` 下作为独立目录,不要嵌入 bootstrap/ 等其他层
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 核心模式
|
|
71
|
+
|
|
72
|
+
### HTTP 与 UI 测试架构一致性 (v3.45.0)
|
|
73
|
+
|
|
74
|
+
| 维度 | HTTP 测试 | UI 测试 |
|
|
75
|
+
|------|-----------|---------|
|
|
76
|
+
| **装饰器** | `@api_class()` | `@actions_class()` |
|
|
77
|
+
| **基类** | `BaseAPI` | `AppActions` |
|
|
78
|
+
| **自动加载** | `load_api_fixtures()` | `load_actions_fixtures()` |
|
|
79
|
+
| **配置字段** | `test.apis_package` | `test.actions_package` |
|
|
80
|
+
| **目录** | `apis/` | `actions/` |
|
|
81
|
+
| **默认 scope** | `session` | `function` |
|
|
82
|
+
|
|
83
|
+
### 脚手架项目类型
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
df-test init my-project --type api # API 项目:apis/, models/
|
|
87
|
+
df-test init my-project --type ui # UI 项目:actions/, pages/, components/
|
|
88
|
+
df-test init my-project --type full # 完整项目:apis/ + actions/ + pages/
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 关键组件
|
|
92
|
+
|
|
93
|
+
- **中间件系统**: 洋葱模型,SignatureMiddleware、BearerTokenMiddleware、RetryMiddleware
|
|
94
|
+
- **EventBus**: 事件驱动,HTTP/UI 事件自动发布,Allure 自动记录
|
|
95
|
+
- **配置系统**: YAML 分层配置 + 环境变量,WebConfig/HTTPConfig/DatabaseConfig
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 代码规范
|
|
100
|
+
|
|
101
|
+
### 类型注解
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
# ✅ 现代风格
|
|
105
|
+
def create(name: str, items: list[str] | None = None) -> dict[str, Any]: ...
|
|
106
|
+
|
|
107
|
+
# ❌ 旧式
|
|
108
|
+
def create(name: str, items: Optional[List[str]] = None) -> Dict[str, Any]: ...
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 测试命名
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
# ✅ 清晰描述场景
|
|
115
|
+
def test_login_with_valid_credentials_returns_token(self): ...
|
|
116
|
+
|
|
117
|
+
# ❌ 不清晰
|
|
118
|
+
def test_login(self): ...
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Ruff 配置
|
|
122
|
+
|
|
123
|
+
- 行长度: 100
|
|
124
|
+
- 目标版本: Python 3.12
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 版本发布
|
|
129
|
+
|
|
130
|
+
发布新版本时,严格按以下顺序执行:
|
|
131
|
+
|
|
132
|
+
### Step 1: 更新文件
|
|
133
|
+
|
|
134
|
+
1. `pyproject.toml` + `src/df_test_framework/__init__.py` 版本号
|
|
135
|
+
2. `CHANGELOG.md` - 简洁摘要
|
|
136
|
+
3. `docs/releases/vX.X.X.md` - 详细发布说明
|
|
137
|
+
4. `docs/guides/xxx.md` - 功能使用指南(如有新功能)
|
|
138
|
+
5. `cli/templates/` - 脚手架模板(如有影响)
|
|
139
|
+
|
|
140
|
+
### Step 2: 代码质量检查(必须全部通过)
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
uv run ruff check --fix src/ tests/ # lint 检查
|
|
144
|
+
uv run ruff format src/ tests/ # 格式化
|
|
145
|
+
uv run pytest -v --ignore=tests/test_messengers/ # 测试(排除 MQ)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
如果有格式化改动,合并到发布 commit 中。
|
|
149
|
+
|
|
150
|
+
### Step 3: 提交发布
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git add <相关文件>
|
|
154
|
+
git commit -m "chore(release): 发布 vX.X.X 版本"
|
|
155
|
+
git push origin master
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Commit Message**: `<type>(<scope>): <subject>`
|
|
159
|
+
- Type: feat/fix/docs/test/refactor/chore
|
|
160
|
+
- Subject: 中文描述
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 目录结构
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
src/df_test_framework/
|
|
168
|
+
├── core/ # Layer 0: middleware/context/events/protocols
|
|
169
|
+
├── infrastructure/ # Layer 1: config/logging/telemetry/events/plugins
|
|
170
|
+
├── capabilities/ # Layer 2: clients/drivers/databases/messengers/storages
|
|
171
|
+
│ ├── clients/ # HTTP + GraphQL + gRPC
|
|
172
|
+
│ ├── drivers/ # Playwright (Web UI)
|
|
173
|
+
│ ├── databases/ # MySQL + Redis + Repository + UoW
|
|
174
|
+
│ ├── messengers/ # Kafka + RabbitMQ + RocketMQ
|
|
175
|
+
│ └── storages/ # LocalFile + S3 + OSS
|
|
176
|
+
├── testing/ # Layer 3: fixtures/decorators/data/debugging
|
|
177
|
+
├── cli/ # Layer 3: commands + templates
|
|
178
|
+
├── bootstrap/ # Layer 4: Bootstrap + Providers + Runtime
|
|
179
|
+
└── plugins/ # 横切: MonitoringPlugin + AllurePlugin
|
|
180
|
+
|
|
181
|
+
cli/templates/
|
|
182
|
+
├── project/ # 项目初始化模板(api/ui/full)
|
|
183
|
+
└── generators/ # 代码生成模板
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 重要提示
|
|
189
|
+
|
|
190
|
+
- `tests/test_messengers/` 需要外部服务(Kafka/RabbitMQ/RocketMQ),CI 中跳过
|
|
191
|
+
- `engines/` 目录预留,暂未实现
|
|
192
|
+
- Windows 平台使用 `start` 而非 `open` 打开报告
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 参考文档
|
|
197
|
+
|
|
198
|
+
| 类型 | 路径 |
|
|
199
|
+
|------|------|
|
|
200
|
+
| 架构设计 | `docs/architecture/` |
|
|
201
|
+
| 使用指南 | `docs/guides/` |
|
|
202
|
+
| Web UI 测试 | `docs/guides/web-ui-testing.md` |
|
|
203
|
+
| 版本发布 | `docs/releases/` |
|
|
204
|
+
| 更新日志 | `CHANGELOG.md` |
|
|
@@ -5,6 +5,39 @@
|
|
|
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.2.1] - 2026-04-15
|
|
9
|
+
|
|
10
|
+
### ✨ 新增功能
|
|
11
|
+
|
|
12
|
+
- 🧩 **`BaseComponent` 多种 root 定位方式** (`capabilities/drivers/web`):
|
|
13
|
+
- 新增 `css_selector` 参数:通过 CSS 选择器定位 root(适合 Ant Design 等无 `data-testid` 的组件库)
|
|
14
|
+
- 新增 `locator` 参数:直接传入 Playwright `Locator`(最灵活,适合动态定位)
|
|
15
|
+
- 所有定位参数改为 keyword-only,优先级:`locator > test_id > css_selector > page`
|
|
16
|
+
|
|
17
|
+
### 🔧 修复
|
|
18
|
+
|
|
19
|
+
- **`SingletonProvider.reset()` 异步 close() 处理** (`bootstrap/providers`): 修复 `AsyncHttpClient.close()` 为协程时直接调用导致的 `RuntimeWarning` 和连接池泄漏,改为检测返回值是否为协程并通过事件循环调度执行
|
|
20
|
+
- **代码生成器保留字冲突** (`cli/generators`): `to_snake_case` 后新增 `safe_field_name` 检查,字段名为 `list`/`dict`/`class`/`type` 等 Python 保留字时自动加 `_` 后缀,配合 `alias` 机制保持 JSON 映射不变
|
|
21
|
+
- **递归子包扫描** (`testing/decorators`): `load_api_fixtures`、`load_actions_fixtures`、`load_service_fixtures` 改用 `pkgutil.walk_packages` 替代 `iter_modules`,支持多层嵌套子包自动注册
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [4.2.0] - 2026-04-02
|
|
26
|
+
|
|
27
|
+
### ✨ 新增功能
|
|
28
|
+
|
|
29
|
+
- 🔧 **工具函数模块** (`infrastructure/helpers`):
|
|
30
|
+
- AES 加解密(CBC 模式,PKCS7 填充,需 `pycryptodome`)
|
|
31
|
+
- MD5 / SHA-256 哈希、HMAC-SHA256 签名
|
|
32
|
+
- API 签名计算(`compute_sign`)
|
|
33
|
+
- 公网 IP 探测(`get_public_ip`)
|
|
34
|
+
- 🔌 **`@service_client` 装饰器**: 独立服务客户端自动注册,通过 `base_url_config` 配置路径注入 base_url
|
|
35
|
+
- 📦 **`crypto` 可选依赖组**: `pycryptodome>=3.20.0`
|
|
36
|
+
|
|
37
|
+
### 🔧 修复
|
|
38
|
+
|
|
39
|
+
- 🧹 OmsReporterPlugin 移除未使用的 `json` import
|
|
40
|
+
|
|
8
41
|
## [4.1.2] - 2026-03-16
|
|
9
42
|
|
|
10
43
|
### ✨ 新增功能
|
|
@@ -8,8 +8,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
8
8
|
|
|
9
9
|
**DF Test Framework** - 现代化 Python 测试自动化框架
|
|
10
10
|
|
|
11
|
-
- **版本**: v4.
|
|
12
|
-
- **更新时间**: 2026-
|
|
11
|
+
- **版本**: v4.2.0
|
|
12
|
+
- **更新时间**: 2026-04-02
|
|
13
13
|
- **Python**: 3.12+
|
|
14
14
|
- **核心技术栈**: pytest + httpx + Playwright + Pydantic v2 + SQLAlchemy 2.0 + Pluggy
|
|
15
15
|
- **架构**: 五层架构 + 横切关注点(能力层驱动设计)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: df-test-framework
|
|
3
|
-
Version: 4.1
|
|
3
|
+
Version: 4.2.1
|
|
4
4
|
Summary: 基于交互模式的现代化测试自动化框架,支持多种测试场景
|
|
5
5
|
Project-URL: Homepage, https://github.com/yourorg/df-test-framework
|
|
6
6
|
Project-URL: Repository, https://github.com/yourorg/df-test-framework
|
|
@@ -63,11 +63,14 @@ Requires-Dist: oss2>=2.18.0; extra == 'all'
|
|
|
63
63
|
Requires-Dist: pika>=1.3.0; extra == 'all'
|
|
64
64
|
Requires-Dist: playwright>=1.40.0; extra == 'all'
|
|
65
65
|
Requires-Dist: prometheus-client>=0.19.0; extra == 'all'
|
|
66
|
+
Requires-Dist: pycryptodome>=3.20.0; extra == 'all'
|
|
66
67
|
Requires-Dist: pypinyin>=0.53.0; extra == 'all'
|
|
67
68
|
Requires-Dist: rocketmq-python-client>=5.0.0; extra == 'all'
|
|
68
69
|
Requires-Dist: selenium>=4.0.0; extra == 'all'
|
|
69
70
|
Provides-Extra: codegen
|
|
70
71
|
Requires-Dist: pypinyin>=0.53.0; extra == 'codegen'
|
|
72
|
+
Provides-Extra: crypto
|
|
73
|
+
Requires-Dist: pycryptodome>=3.20.0; extra == 'crypto'
|
|
71
74
|
Provides-Extra: database-async
|
|
72
75
|
Requires-Dist: aiomysql>=0.2.0; extra == 'database-async'
|
|
73
76
|
Requires-Dist: aiosqlite>=0.20.0; extra == 'database-async'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Infrastructure API 参考
|
|
2
2
|
|
|
3
|
-
基础设施层的完整API参考,包含Bootstrap启动器、RuntimeContext
|
|
3
|
+
基础设施层的完整API参考,包含Bootstrap启动器、RuntimeContext运行时上下文、配置管理、Provider系统和工具函数。
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -26,10 +26,22 @@ from df_test_framework.infrastructure.config import (
|
|
|
26
26
|
# Provider系统
|
|
27
27
|
from df_test_framework.infrastructure.providers import ProviderRegistry
|
|
28
28
|
|
|
29
|
+
# 工具函数 (v4.2.0)
|
|
30
|
+
from df_test_framework import (
|
|
31
|
+
md5,
|
|
32
|
+
sha256,
|
|
33
|
+
hmac_sha256,
|
|
34
|
+
compute_sign,
|
|
35
|
+
get_public_ip,
|
|
36
|
+
)
|
|
37
|
+
# AES 加解密(需 crypto 可选依赖)
|
|
38
|
+
from df_test_framework import aes_encrypt, aes_decrypt
|
|
39
|
+
|
|
29
40
|
# 或者从具体模块导入
|
|
30
41
|
from df_test_framework.infrastructure.bootstrap import Bootstrap
|
|
31
42
|
from df_test_framework.infrastructure.runtime import RuntimeContext
|
|
32
43
|
from df_test_framework.infrastructure.config.schema import FrameworkSettings
|
|
44
|
+
from df_test_framework.infrastructure.helpers import md5, sha256, hmac_sha256, compute_sign, get_public_ip
|
|
33
45
|
```
|
|
34
46
|
|
|
35
47
|
---
|
|
@@ -804,6 +816,68 @@ def test_with_config(runtime):
|
|
|
804
816
|
|
|
805
817
|
---
|
|
806
818
|
|
|
819
|
+
## 🔧 工具函数 (v4.2.0)
|
|
820
|
+
|
|
821
|
+
> **详细指南**: [helpers_guide.md](../guides/helpers_guide.md)
|
|
822
|
+
|
|
823
|
+
### 哈希函数
|
|
824
|
+
|
|
825
|
+
基于 Python stdlib `hashlib`,无额外依赖。
|
|
826
|
+
|
|
827
|
+
| 函数 | 签名 | 返回值 |
|
|
828
|
+
|------|------|--------|
|
|
829
|
+
| `md5(text)` | `md5(text: str) -> str` | 32 位小写 hex |
|
|
830
|
+
| `sha256(text)` | `sha256(text: str) -> str` | 64 位小写 hex |
|
|
831
|
+
| `hmac_sha256(text, secret)` | `hmac_sha256(text: str, secret: str) -> str` | 64 位小写 hex |
|
|
832
|
+
|
|
833
|
+
### compute_sign - API 签名计算
|
|
834
|
+
|
|
835
|
+
```python
|
|
836
|
+
def compute_sign(
|
|
837
|
+
params: dict[str, str],
|
|
838
|
+
secret: str,
|
|
839
|
+
*,
|
|
840
|
+
algorithm: Literal["md5", "sha256", "hmac-sha256"] = "md5",
|
|
841
|
+
concat_mode: Literal["values_only", "key_value"] = "values_only",
|
|
842
|
+
separator: str = "",
|
|
843
|
+
secret_position: Literal["append", "prepend"] = "append",
|
|
844
|
+
) -> str
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
### aes_encrypt / aes_decrypt - AES 加解密
|
|
848
|
+
|
|
849
|
+
需要 `crypto` 可选依赖(`pip install df-test-framework[crypto]`)。
|
|
850
|
+
|
|
851
|
+
```python
|
|
852
|
+
def aes_encrypt(
|
|
853
|
+
plaintext: str,
|
|
854
|
+
key: str | bytes,
|
|
855
|
+
iv: str | bytes | None = None,
|
|
856
|
+
*,
|
|
857
|
+
mode: Literal["CBC", "ECB"] = "CBC",
|
|
858
|
+
encoding: Literal["hex", "base64"] = "hex",
|
|
859
|
+
) -> str
|
|
860
|
+
|
|
861
|
+
def aes_decrypt(
|
|
862
|
+
ciphertext: str | bytes,
|
|
863
|
+
key: str | bytes,
|
|
864
|
+
iv: str | bytes | None = None,
|
|
865
|
+
*,
|
|
866
|
+
mode: Literal["CBC", "ECB"] = "CBC",
|
|
867
|
+
encoding: Literal["hex", "base64"] = "hex",
|
|
868
|
+
) -> str
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
### get_public_ip - 公网 IP 探测
|
|
872
|
+
|
|
873
|
+
```python
|
|
874
|
+
def get_public_ip(timeout: int = 10) -> str
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
依次尝试 httpbin.org、ipify.org、ifconfig.me,任一成功即返回。
|
|
878
|
+
|
|
879
|
+
---
|
|
880
|
+
|
|
807
881
|
## 🔗 相关文档
|
|
808
882
|
|
|
809
883
|
### v3架构文档
|
|
@@ -21,6 +21,17 @@ from df_test_framework.testing.fixtures.core import (
|
|
|
21
21
|
redis_client,
|
|
22
22
|
)
|
|
23
23
|
|
|
24
|
+
# 测试装饰器
|
|
25
|
+
from df_test_framework.testing.decorators import (
|
|
26
|
+
api_class,
|
|
27
|
+
actions_class,
|
|
28
|
+
service_client, # v4.2.0 新增
|
|
29
|
+
load_api_fixtures,
|
|
30
|
+
load_actions_fixtures,
|
|
31
|
+
load_service_fixtures, # v4.2.0 新增
|
|
32
|
+
get_service_registry, # v4.2.0 新增
|
|
33
|
+
)
|
|
34
|
+
|
|
24
35
|
# Plugins(测试中使用)
|
|
25
36
|
from df_test_framework.testing.plugins import (
|
|
26
37
|
AllureHelper,
|
|
@@ -1120,6 +1131,48 @@ def test_create_card(
|
|
|
1120
1131
|
|
|
1121
1132
|
---
|
|
1122
1133
|
|
|
1134
|
+
## 🔌 @service_client 装饰器 (v4.2.0)
|
|
1135
|
+
|
|
1136
|
+
> **详细指南**: [service_client_guide.md](../guides/service_client_guide.md)
|
|
1137
|
+
|
|
1138
|
+
将独立服务客户端类自动注册为 pytest fixture,无需继承 `BaseAPI`。
|
|
1139
|
+
|
|
1140
|
+
### 装饰器签名
|
|
1141
|
+
|
|
1142
|
+
```python
|
|
1143
|
+
@service_client(
|
|
1144
|
+
name: str | None = None, # fixture 名称(默认从类名生成)
|
|
1145
|
+
scope: str = "session", # pytest fixture scope
|
|
1146
|
+
base_url_config: str | None = None, # settings 配置路径(dot notation)
|
|
1147
|
+
**dependencies: Any, # 额外依赖映射
|
|
1148
|
+
)
|
|
1149
|
+
```
|
|
1150
|
+
|
|
1151
|
+
### 辅助函数
|
|
1152
|
+
|
|
1153
|
+
| 函数 | 签名 | 说明 |
|
|
1154
|
+
|------|------|------|
|
|
1155
|
+
| `load_service_fixtures` | `(module_globals, services_package=None) -> None` | 加载所有注册的服务客户端 fixture |
|
|
1156
|
+
| `get_service_registry` | `() -> dict` | 获取注册表副本 |
|
|
1157
|
+
| `create_service_fixture` | `(cls, fixture_name, scope, base_url_config, **deps) -> Callable` | 为单个类创建 fixture |
|
|
1158
|
+
|
|
1159
|
+
### 与 @api_class 的对比
|
|
1160
|
+
|
|
1161
|
+
| 维度 | @api_class | @service_client |
|
|
1162
|
+
|------|-----------|----------------|
|
|
1163
|
+
| 基类要求 | 必须继承 `BaseAPI` | 无要求 |
|
|
1164
|
+
| HTTP 客户端 | 共享框架的 `http_client` | 自行管理 |
|
|
1165
|
+
| base_url | 从框架配置统一获取 | 通过 `base_url_config` 注入 |
|
|
1166
|
+
| 认证方式 | 框架中间件统一处理 | 各客户端自行实现 |
|
|
1167
|
+
|
|
1168
|
+
### 自动依赖推断
|
|
1169
|
+
|
|
1170
|
+
如果 `__init__` 签名中的参数名匹配以下 fixture,框架会自动注入:
|
|
1171
|
+
|
|
1172
|
+
`settings`、`database`、`async_database`、`redis_client`、`async_redis_client`、`runtime`、`rabbitmq_client`、`kafka_client`、`rocketmq_client`
|
|
1173
|
+
|
|
1174
|
+
---
|
|
1175
|
+
|
|
1123
1176
|
## 🔗 相关文档
|
|
1124
1177
|
|
|
1125
1178
|
### v3架构文档
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# 代码结构导航
|
|
2
2
|
|
|
3
3
|
> **目标读者**: 框架开发者、问题修复者、代码贡献者
|
|
4
|
-
> **更新日期**: 2026-
|
|
5
|
-
> **框架版本**: v4.
|
|
4
|
+
> **更新日期**: 2026-04-02
|
|
5
|
+
> **框架版本**: v4.2.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -37,6 +37,7 @@ src/df_test_framework/
|
|
|
37
37
|
│ ├── logging/ # 结构化日志(structlog)
|
|
38
38
|
│ ├── telemetry/ # OpenTelemetry 追踪
|
|
39
39
|
│ ├── events/ # 事件基础设施
|
|
40
|
+
│ ├── helpers/ # 工具函数(哈希/加密/签名/网络)
|
|
40
41
|
│ └── plugins/ # Pluggy 插件系统
|
|
41
42
|
│
|
|
42
43
|
├── capabilities/ # Layer 2: 能力层(按交互模式组织)
|
|
@@ -75,7 +76,8 @@ src/df_test_framework/
|
|
|
75
76
|
│ │ └── ui.py # UI 测试 fixtures
|
|
76
77
|
│ ├── decorators/ # 装饰器
|
|
77
78
|
│ │ ├── api_class.py # @api_class 装饰器
|
|
78
|
-
│ │
|
|
79
|
+
│ │ ├── actions_class.py # @actions_class 装饰器
|
|
80
|
+
│ │ └── service_client.py # @service_client 装饰器
|
|
79
81
|
│ ├── data/ # 测试数据
|
|
80
82
|
│ │ ├── builders/ # Builder 模式
|
|
81
83
|
│ │ └── cleanup/ # 数据清理
|
|
@@ -266,6 +268,31 @@ infrastructure/plugins/
|
|
|
266
268
|
- `df_providers` - Provider 注册扩展
|
|
267
269
|
- `df_post_bootstrap` - Bootstrap 后处理
|
|
268
270
|
|
|
271
|
+
### 📁 infrastructure/helpers/
|
|
272
|
+
|
|
273
|
+
> **引入版本**: v4.2.0
|
|
274
|
+
|
|
275
|
+
**职责**:通用工具函数(哈希、加密、签名、网络探测)
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
infrastructure/helpers/
|
|
279
|
+
├── __init__.py # 统一导出
|
|
280
|
+
├── hash.py # MD5/SHA256/HMAC-SHA256(基于 stdlib)
|
|
281
|
+
├── crypto.py # AES 加解密(需 pycryptodome)
|
|
282
|
+
├── signature.py # API 参数签名计算
|
|
283
|
+
└── network.py # 公网 IP 探测
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**关键函数**:
|
|
287
|
+
- `md5(text)` / `sha256(text)` / `hmac_sha256(text, secret)` - 哈希函数
|
|
288
|
+
- `aes_encrypt()` / `aes_decrypt()` - AES-CBC/ECB 加解密(需 `crypto` 可选依赖)
|
|
289
|
+
- `compute_sign(params, secret)` - API 参数签名(支持 MD5/SHA256/HMAC-SHA256)
|
|
290
|
+
- `get_public_ip()` - 公网出口 IP 探测
|
|
291
|
+
|
|
292
|
+
**使用场景**:
|
|
293
|
+
- 测试中需要计算 API 签名、加解密敏感参数
|
|
294
|
+
- IP 白名单测试场景
|
|
295
|
+
|
|
269
296
|
---
|
|
270
297
|
|
|
271
298
|
## 🟡 Layer 2: 能力层 (capabilities/)
|
|
@@ -411,17 +438,19 @@ testing/fixtures/
|
|
|
411
438
|
|
|
412
439
|
### 📁 testing/decorators/
|
|
413
440
|
|
|
414
|
-
**职责**:装饰器(自动加载 API/Actions
|
|
441
|
+
**职责**:装饰器(自动加载 API/Actions/服务客户端类)
|
|
415
442
|
|
|
416
443
|
```
|
|
417
444
|
testing/decorators/
|
|
418
445
|
├── api_class.py # @api_class 装饰器
|
|
419
|
-
|
|
446
|
+
├── actions_class.py # @actions_class 装饰器
|
|
447
|
+
└── service_client.py # @service_client 装饰器
|
|
420
448
|
```
|
|
421
449
|
|
|
422
450
|
**关键装饰器**:
|
|
423
451
|
- `@api_class(scope="session")` - 自动加载 API 类为 fixture
|
|
424
452
|
- `@actions_class(scope="function")` - 自动加载 Actions 类为 fixture
|
|
453
|
+
- `@service_client(base_url_config="...")` - 自动加载独立服务客户端为 fixture(v4.2.0)
|
|
425
454
|
|
|
426
455
|
### 📁 cli/commands/
|
|
427
456
|
|
|
@@ -631,5 +660,5 @@ from df_test_framework.capabilities.clients.http import HttpClient # 违反依
|
|
|
631
660
|
|
|
632
661
|
---
|
|
633
662
|
|
|
634
|
-
**最后更新**: 2026-
|
|
663
|
+
**最后更新**: 2026-04-02
|
|
635
664
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 装饰器使用指南
|
|
2
2
|
|
|
3
|
-
> **最后更新**: 2026-
|
|
4
|
-
> **适用版本**: v3.7.0+(通用装饰器),v3.45.0
|
|
3
|
+
> **最后更新**: 2026-04-02
|
|
4
|
+
> **适用版本**: v3.7.0+(通用装饰器),v3.45.0+(测试装饰器),v4.2.0+(服务客户端装饰器)
|
|
5
5
|
|
|
6
6
|
## 概述
|
|
7
7
|
|
|
@@ -9,12 +9,14 @@ DF Test Framework 提供了两类装饰器,帮助简化测试代码和增强
|
|
|
9
9
|
|
|
10
10
|
### 测试装饰器(Testing Decorators)
|
|
11
11
|
|
|
12
|
-
用于自动注册 API
|
|
12
|
+
用于自动注册 API 类、UI Actions 类和独立服务客户端为 pytest fixture,无需手动创建 fixture 函数。
|
|
13
13
|
|
|
14
14
|
- **@api_class**: 自动将 BaseAPI 子类注册为 pytest fixture
|
|
15
15
|
- **@actions_class**: 自动将 AppActions 子类注册为 pytest fixture
|
|
16
|
+
- **@service_client**: 自动将独立服务客户端注册为 pytest fixture(v4.2.0)
|
|
16
17
|
- **load_api_fixtures()**: 自动加载所有 API fixtures
|
|
17
18
|
- **load_actions_fixtures()**: 自动加载所有 Actions fixtures
|
|
19
|
+
- **load_service_fixtures()**: 自动加载所有服务客户端 fixtures(v4.2.0)
|
|
18
20
|
|
|
19
21
|
### 通用装饰器(Core Decorators)
|
|
20
22
|
|
|
@@ -270,15 +272,71 @@ def test_order_flow(login_actions, order_actions):
|
|
|
270
272
|
assert order_id is not None
|
|
271
273
|
```
|
|
272
274
|
|
|
273
|
-
### 与 @api_class 的对比
|
|
275
|
+
### 与 @api_class / @service_client 的对比
|
|
274
276
|
|
|
275
|
-
| 特性 | @api_class | @actions_class |
|
|
276
|
-
|
|
277
|
-
| 基类 | `BaseAPI` | `AppActions` |
|
|
278
|
-
| 默认 scope | `session` | `function` |
|
|
279
|
-
| 配置字段 | `test.apis_package` | `test.actions_package` |
|
|
280
|
-
| 目录约定 | `apis/` | `actions/` |
|
|
281
|
-
| 自动依赖 | `http_client` | `page`, `browser_manager` |
|
|
277
|
+
| 特性 | @api_class | @actions_class | @service_client |
|
|
278
|
+
|------|-----------|----------------|----------------|
|
|
279
|
+
| 基类 | `BaseAPI` | `AppActions` | 无要求 |
|
|
280
|
+
| 默认 scope | `session` | `function` | `session` |
|
|
281
|
+
| 配置字段 | `test.apis_package` | `test.actions_package` | `base_url_config` |
|
|
282
|
+
| 目录约定 | `apis/` | `actions/` | `apis/` 或自定义 |
|
|
283
|
+
| 自动依赖 | `http_client` | `page`, `browser_manager` | 按 `__init__` 签名推断 |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## @service_client 装饰器
|
|
288
|
+
|
|
289
|
+
> **引入版本**: v4.2.0
|
|
290
|
+
> **适用场景**: 独立服务客户端(不同 base_url、不同认证方式)
|
|
291
|
+
> **详细指南**: [service_client_guide.md](service_client_guide.md)
|
|
292
|
+
|
|
293
|
+
### 基本用法
|
|
294
|
+
|
|
295
|
+
`@service_client` 装饰器自动将任意类注册为 pytest fixture,无需继承 `BaseAPI`。适合调用独立外部服务。
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
from df_test_framework import service_client
|
|
299
|
+
|
|
300
|
+
@service_client("payment_client", base_url_config="business.payment_url")
|
|
301
|
+
class PaymentClient:
|
|
302
|
+
def __init__(self, base_url: str, timeout: int = 30):
|
|
303
|
+
self.base_url = base_url.rstrip("/")
|
|
304
|
+
self.timeout = timeout
|
|
305
|
+
|
|
306
|
+
def charge(self, order_no: str, amount: float) -> dict:
|
|
307
|
+
import httpx
|
|
308
|
+
with httpx.Client(timeout=self.timeout) as client:
|
|
309
|
+
return client.post(f"{self.base_url}/charge", json={"orderNo": order_no, "amount": amount}).json()
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### 自动依赖注入
|
|
313
|
+
|
|
314
|
+
如果 `__init__` 参数名匹配已知 fixture(如 `redis_client`、`database`),框架会自动注入:
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
@service_client("my_client", base_url_config="business.my_url")
|
|
318
|
+
class MyClient:
|
|
319
|
+
def __init__(self, base_url: str, redis_client=None):
|
|
320
|
+
self.base_url = base_url
|
|
321
|
+
self.redis = redis_client # 自动注入 redis_client fixture
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### 自动加载
|
|
325
|
+
|
|
326
|
+
```python
|
|
327
|
+
# conftest.py
|
|
328
|
+
from df_test_framework.testing.decorators import load_service_fixtures
|
|
329
|
+
|
|
330
|
+
load_service_fixtures(globals(), services_package="my_project.apis")
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### 在测试中使用
|
|
334
|
+
|
|
335
|
+
```python
|
|
336
|
+
def test_charge(payment_client):
|
|
337
|
+
result = payment_client.charge("ORD001", 99.9)
|
|
338
|
+
assert result["retCode"] == "0"
|
|
339
|
+
```
|
|
282
340
|
|
|
283
341
|
---
|
|
284
342
|
|
|
@@ -611,6 +669,8 @@ def frequent_call():
|
|
|
611
669
|
- [Fixtures 使用指南](fixtures_guide.md) - pytest fixtures 详细说明
|
|
612
670
|
- [HTTP 客户端指南](http_client_guide.md) - BaseAPI 使用方法
|
|
613
671
|
- [Web UI 测试指南](web-ui-testing.md) - AppActions 使用方法
|
|
672
|
+
- [服务客户端指南](service_client_guide.md) - @service_client 详细使用方法
|
|
673
|
+
- [工具函数指南](helpers_guide.md) - 哈希/加密/签名工具
|
|
614
674
|
- [配置系统指南](config_guide.md) - 配置 apis_package 和 actions_package
|
|
615
675
|
|
|
616
676
|
---
|
|
@@ -624,8 +684,10 @@ def frequent_call():
|
|
|
624
684
|
from df_test_framework.testing.decorators import (
|
|
625
685
|
api_class,
|
|
626
686
|
actions_class,
|
|
687
|
+
service_client,
|
|
627
688
|
load_api_fixtures,
|
|
628
689
|
load_actions_fixtures,
|
|
690
|
+
load_service_fixtures,
|
|
629
691
|
)
|
|
630
692
|
|
|
631
693
|
# 通用装饰器
|
|
@@ -665,4 +727,4 @@ myproject/
|
|
|
665
727
|
|
|
666
728
|
---
|
|
667
729
|
|
|
668
|
-
**完成时间**: 2026-
|
|
730
|
+
**完成时间**: 2026-04-02
|