df-test-framework 4.0.2__tar.gz → 4.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/CHANGELOG.md +60 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/CLAUDE.md +24 -2
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/PKG-INFO +1 -1
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/README.md +4 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/drivers.md +81 -23
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/auth_session_guide.md +59 -4
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/fixtures_guide.md +47 -17
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/scaffold_cli_guide.md +1 -1
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/web-ui-testing.md +239 -55
- df_test_framework-4.1.0/docs/releases/v4.0.3.md +104 -0
- df_test_framework-4.1.0/docs/releases/v4.0.4.md +135 -0
- df_test_framework-4.1.0/docs/releases/v4.1.0.md +187 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/pyproject.toml +3 -2
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/__init__.py +3 -1
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +33 -109
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +57 -214
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +74 -59
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +77 -65
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/full_conftest.py +37 -2
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +3 -1
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +38 -15
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +3 -2
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/schema.py +6 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/__init__.py +5 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/actions_class.py +13 -7
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/__init__.py +7 -4
- df_test_framework-4.1.0/src/df_test_framework/testing/fixtures/auth.py +242 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/core.py +7 -3
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/ui.py +139 -172
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/__init__.py +2 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_ui_fixtures.py +248 -82
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/uv.lock +1 -1
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.editorconfig +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.env.example +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.gitattributes +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.gitignore +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.gitleaks.toml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.gitleaksignore +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/.python-version +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/README_PYPI.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/FAQ.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/api-reference/testing.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/architecture//344/272/224/345/261/202/346/236/266/346/236/204/350/257/246/350/247/243.md" +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/BaseAPI/346/234/200/344/275/263/345/256/236/350/267/265/346/214/207/345/215/227.md" +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/v1//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251/346/265/213/350/257/225/346/241/206/346/236/266.md" +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/development/local-development.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/decorators_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/sanitize_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/storage.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/migration/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/examples/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/debugging/console.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/api_class.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/README.md +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/conftest.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_context.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_events.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/core/test_types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/sanitize/test_service.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.0.2 → df_test_framework-4.1.0}/verify_fixes.py +0 -0
|
@@ -5,6 +5,66 @@
|
|
|
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.1.0] - 2026-03-03
|
|
9
|
+
|
|
10
|
+
### ✨ 新增功能
|
|
11
|
+
|
|
12
|
+
- 🚀 **Browser Session 复用**: `browser_manager`/`browser` 提升为 session scope,整个测试会话只启动一次浏览器,启动时间减少 90%+
|
|
13
|
+
- 🔒 **Context/Page 每测试隔离**: `context`/`page` 保持 function scope,每个测试独立的 BrowserContext,对齐 Playwright 官方最佳实践
|
|
14
|
+
- 🆕 **BrowserManager.new_context()**: 新增方法,创建带配置的隔离 BrowserContext(viewport、storageState、video 等)
|
|
15
|
+
- ⚡ **per-fixture loop_scope**: 异步 session fixtures 使用 `@pytest_asyncio.fixture(loop_scope="session")` 精确控制事件循环
|
|
16
|
+
|
|
17
|
+
### 🔄 架构变更
|
|
18
|
+
|
|
19
|
+
- 📦 **BrowserManager 精简**: `start()` 只创建 playwright + browser,不再创建 context/page;移除 `_context`、`_page` 属性
|
|
20
|
+
- 📦 **storageState 下沉**: 认证状态注入从 BrowserManager 移至 context fixture,更符合 Playwright 设计(auth 是 context 级别关注点)
|
|
21
|
+
- 📦 **actions_class test_runtime**: `@actions_class()` 生成的 fixture 新增 `test_runtime` 参数,实现事件隔离
|
|
22
|
+
- 🗑️ **移除 ui_manager**: `ui_manager`/`async_ui_manager` fixture alias 已移除(browser_manager 不再持有 context/page)
|
|
23
|
+
|
|
24
|
+
### 📚 文档
|
|
25
|
+
|
|
26
|
+
- 📝 **Web UI 测试手册**: 更新 fixture scope 表、storageState 注入流程
|
|
27
|
+
- 📝 **Fixtures 使用指南**: 更新 browser/browser_manager scope 说明和速查表
|
|
28
|
+
- 📝 **Drivers API 参考**: 更新 BrowserManager API(new_context、start/stop)
|
|
29
|
+
- 📝 **认证指南**: 更新 storageState 注入描述
|
|
30
|
+
|
|
31
|
+
**详细内容**: 查看完整发布说明 [v4.1.0.md](docs/releases/v4.1.0.md)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## [4.0.4] - 2026-03-02
|
|
36
|
+
|
|
37
|
+
### ✨ 新增功能
|
|
38
|
+
|
|
39
|
+
- 🔧 **AuthSetup pytest_config 支持**: `AuthSetup` / `AsyncAuthSetup` 新增 `pytest_config` 参数,自动读取 `--headed`/`--browser`/`--slowmo` CLI 参数
|
|
40
|
+
- 🔒 **User-Agent 一致性**: 确保 auth 浏览器与测试浏览器模式一致,避免认证状态因 User-Agent 不匹配而失效
|
|
41
|
+
|
|
42
|
+
### 📚 文档
|
|
43
|
+
|
|
44
|
+
- 📝 **Web UI 测试手册**: 更新认证状态管理章节,新增 `pytest_config` 说明和配置优先级
|
|
45
|
+
- 📝 **脚手架模板**: 更新 ui/full 项目模板的 storage_state 示例
|
|
46
|
+
|
|
47
|
+
**详细内容**: 查看完整发布说明 [v4.0.4.md](docs/releases/v4.0.4.md)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## [4.0.3] - 2026-03-01
|
|
52
|
+
|
|
53
|
+
### ✨ 新增功能
|
|
54
|
+
|
|
55
|
+
- 🔐 **UI 认证状态管理**: 新增 `AuthSetup` / `AsyncAuthSetup`,原生支持 Playwright storageState
|
|
56
|
+
- 🔑 **storage_state Fixture**: 项目覆盖即启用,`page` 自动携带登录状态
|
|
57
|
+
- ⚙️ **WebConfig.storage_state**: 新增配置字段,BrowserManager 自动注入到 context
|
|
58
|
+
|
|
59
|
+
### 📚 文档
|
|
60
|
+
|
|
61
|
+
- 📝 **Web UI 测试手册**: 新增「认证状态管理」章节
|
|
62
|
+
- 📝 **认证指南**: 新增 UI 认证与 HTTP 认证对比
|
|
63
|
+
|
|
64
|
+
**详细内容**: 查看完整发布说明 [v4.0.3.md](docs/releases/v4.0.3.md)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
8
68
|
## [4.0.2] - 2026-02-09
|
|
9
69
|
|
|
10
70
|
### ✨ 新增功能
|
|
@@ -122,11 +122,33 @@ def test_login(self): ...
|
|
|
122
122
|
|
|
123
123
|
## 版本发布
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
发布新版本时,严格按以下顺序执行:
|
|
126
|
+
|
|
127
|
+
### Step 1: 更新文件
|
|
128
|
+
|
|
129
|
+
1. `pyproject.toml` + `src/df_test_framework/__init__.py` 版本号
|
|
127
130
|
2. `CHANGELOG.md` - 简洁摘要
|
|
128
131
|
3. `docs/releases/vX.X.X.md` - 详细发布说明
|
|
129
132
|
4. `docs/guides/xxx.md` - 功能使用指南(如有新功能)
|
|
133
|
+
5. `cli/templates/` - 脚手架模板(如有影响)
|
|
134
|
+
|
|
135
|
+
### Step 2: 代码质量检查(必须全部通过)
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
uv run ruff check --fix src/ tests/ # lint 检查
|
|
139
|
+
uv run ruff format src/ tests/ # 格式化
|
|
140
|
+
uv run pytest -v --ignore=tests/test_messengers/ # 测试(排除 MQ)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
如果有格式化改动,合并到发布 commit 中。
|
|
144
|
+
|
|
145
|
+
### Step 3: 提交发布
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git add <相关文件>
|
|
149
|
+
git commit -m "chore(release): 发布 vX.X.X 版本"
|
|
150
|
+
git push origin master
|
|
151
|
+
```
|
|
130
152
|
|
|
131
153
|
**Commit Message**: `<type>(<scope>): <subject>`
|
|
132
154
|
- Type: feat/fix/docs/test/refactor/chore
|
|
@@ -69,6 +69,7 @@ from df_test_framework.drivers.web.playwright import (
|
|
|
69
69
|
- ✅ 上下文管理
|
|
70
70
|
- ✅ 页面管理
|
|
71
71
|
- ✅ 截图和录制
|
|
72
|
+
- ✅ storageState 认证状态注入(v4.0.3)
|
|
72
73
|
|
|
73
74
|
### 快速开始
|
|
74
75
|
|
|
@@ -76,16 +77,17 @@ from df_test_framework.drivers.web.playwright import (
|
|
|
76
77
|
from df_test_framework import BrowserManager, BrowserType
|
|
77
78
|
|
|
78
79
|
# 创建浏览器管理器
|
|
79
|
-
|
|
80
|
+
manager = BrowserManager(
|
|
80
81
|
browser_type=BrowserType.CHROMIUM,
|
|
81
82
|
headless=False
|
|
82
83
|
)
|
|
83
84
|
|
|
84
|
-
#
|
|
85
|
-
|
|
85
|
+
# 启动浏览器(v4.1.0: 只创建 playwright + browser)
|
|
86
|
+
manager.start()
|
|
86
87
|
|
|
87
|
-
#
|
|
88
|
-
|
|
88
|
+
# 创建隔离的上下文和页面
|
|
89
|
+
ctx = manager.new_context()
|
|
90
|
+
page = ctx.new_page()
|
|
89
91
|
page.goto("https://example.com")
|
|
90
92
|
|
|
91
93
|
# 操作页面
|
|
@@ -95,38 +97,90 @@ page.click("button[type='submit']")
|
|
|
95
97
|
# 截图
|
|
96
98
|
page.screenshot(path="screenshot.png")
|
|
97
99
|
|
|
98
|
-
#
|
|
99
|
-
|
|
100
|
+
# 关闭资源
|
|
101
|
+
page.close()
|
|
102
|
+
ctx.close()
|
|
103
|
+
manager.stop()
|
|
100
104
|
```
|
|
101
105
|
|
|
102
106
|
### 核心方法
|
|
103
107
|
|
|
104
108
|
#### 生命周期管理
|
|
105
|
-
- `start()` -
|
|
106
|
-
- `
|
|
107
|
-
- `
|
|
108
|
-
- `new_context(**kwargs)` - 创建新上下文
|
|
109
|
+
- `start()` - 启动 Playwright 进程和浏览器实例,返回 `Browser`
|
|
110
|
+
- `stop()` - 关闭浏览器并清理 Playwright 进程
|
|
111
|
+
- `new_context(storage_state=None, **extra_options)` - 创建隔离的浏览器上下文(v4.1.0)
|
|
109
112
|
|
|
110
|
-
####
|
|
111
|
-
- `
|
|
112
|
-
- `get_pages()` - 获取所有页面
|
|
113
|
-
- `close_page(page)` - 关闭页面
|
|
113
|
+
#### 属性
|
|
114
|
+
- `browser` - 获取浏览器实例(只读,未启动时抛出 RuntimeError)
|
|
114
115
|
|
|
115
116
|
### 配置选项
|
|
116
117
|
|
|
117
118
|
```python
|
|
118
|
-
|
|
119
|
+
manager = BrowserManager(
|
|
119
120
|
browser_type=BrowserType.CHROMIUM, # 浏览器类型
|
|
120
121
|
headless=False, # 是否无头模式
|
|
121
122
|
slow_mo=0, # 操作延迟(ms)
|
|
122
123
|
viewport={"width": 1920, "height": 1080}, # 视口大小
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
timeout=30000, # 默认超时时间(ms)
|
|
125
|
+
record_video="off", # 视频录制(off/on/on-failure)
|
|
126
|
+
video_dir="reports/videos", # 视频保存目录
|
|
125
127
|
)
|
|
128
|
+
|
|
129
|
+
# v4.1.0: 创建带认证状态的上下文
|
|
130
|
+
ctx = manager.new_context(storage_state="path/to/state.json")
|
|
131
|
+
page = ctx.new_page()
|
|
126
132
|
```
|
|
127
133
|
|
|
128
134
|
---
|
|
129
135
|
|
|
136
|
+
## 🔐 AuthSetup / AsyncAuthSetup - 认证状态设置器
|
|
137
|
+
|
|
138
|
+
> **版本**: v4.0.3+
|
|
139
|
+
|
|
140
|
+
### 功能特性
|
|
141
|
+
|
|
142
|
+
- ✅ 管理临时浏览器完整生命周期
|
|
143
|
+
- ✅ context manager 自动资源清理
|
|
144
|
+
- ✅ 保存 Playwright storageState(cookies + localStorage)
|
|
145
|
+
- ✅ 同步 / 异步双版本
|
|
146
|
+
|
|
147
|
+
### 快速开始
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
from df_test_framework.testing import AuthSetup
|
|
151
|
+
|
|
152
|
+
# 同步版本
|
|
153
|
+
with AuthSetup(settings, tmp_path) as auth:
|
|
154
|
+
auth.page.goto(f"{auth.base_url}/login")
|
|
155
|
+
auth.page.fill("#username", "admin")
|
|
156
|
+
auth.page.fill("#password", "pass")
|
|
157
|
+
auth.page.click("button[type=submit]")
|
|
158
|
+
state_path = auth.save() # 返回 JSON 文件路径
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
from df_test_framework.testing import AsyncAuthSetup
|
|
163
|
+
|
|
164
|
+
# 异步版本
|
|
165
|
+
async with AsyncAuthSetup(settings, tmp_path) as auth:
|
|
166
|
+
await auth.page.goto(f"{auth.base_url}/login")
|
|
167
|
+
await auth.page.fill("#username", "admin")
|
|
168
|
+
await auth.page.fill("#password", "pass")
|
|
169
|
+
await auth.page.click("button[type=submit]")
|
|
170
|
+
state_path = await auth.save()
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### API
|
|
174
|
+
|
|
175
|
+
| 属性/方法 | 说明 |
|
|
176
|
+
|----------|------|
|
|
177
|
+
| `page` | 临时浏览器页面,用于执行登录操作 |
|
|
178
|
+
| `context` | 临时浏览器上下文 |
|
|
179
|
+
| `base_url` | 从 `settings.web.base_url` 读取 |
|
|
180
|
+
| `save(filename="state.json")` | 保存 storageState 到 JSON 文件,返回路径 |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
130
184
|
## 📄 BasePage - 页面对象基类
|
|
131
185
|
|
|
132
186
|
### 功能特性
|
|
@@ -316,14 +370,15 @@ class SearchResultsPage(BasePage):
|
|
|
316
370
|
@pytest.fixture
|
|
317
371
|
def browser():
|
|
318
372
|
"""浏览器fixture"""
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
yield
|
|
322
|
-
|
|
373
|
+
manager = BrowserManager(headless=True)
|
|
374
|
+
manager.start()
|
|
375
|
+
yield manager
|
|
376
|
+
manager.stop()
|
|
323
377
|
|
|
324
378
|
def test_search_functionality(browser):
|
|
325
379
|
"""测试搜索功能"""
|
|
326
|
-
|
|
380
|
+
ctx = browser.new_context()
|
|
381
|
+
page = ctx.new_page()
|
|
327
382
|
|
|
328
383
|
# 访问首页
|
|
329
384
|
home_page = HomePage(page)
|
|
@@ -338,6 +393,9 @@ def test_search_functionality(browser):
|
|
|
338
393
|
|
|
339
394
|
# 截图
|
|
340
395
|
results_page.screenshot("search_results.png")
|
|
396
|
+
|
|
397
|
+
page.close()
|
|
398
|
+
ctx.close()
|
|
341
399
|
```
|
|
342
400
|
|
|
343
401
|
---
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
# 认证与 Session 管理指南
|
|
2
2
|
|
|
3
|
-
> **版本要求**: df-test-framework >= 3.19.0
|
|
4
|
-
> **更新日期**:
|
|
5
|
-
> **最新版本**:
|
|
3
|
+
> **版本要求**: df-test-framework >= 3.19.0(HTTP),>= 4.0.3(UI),>= 4.1.0(Browser Session 复用)
|
|
4
|
+
> **更新日期**: 2026-03-03
|
|
5
|
+
> **最新版本**: v4.1.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 概述
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
本指南介绍如何正确处理认证状态管理:
|
|
12
|
+
- **HTTP 测试**: Bearer Token 认证与 Session(Cookies)的交互
|
|
13
|
+
- **UI 测试**: Playwright storageState 认证状态复用(v4.0.3)
|
|
12
14
|
|
|
13
15
|
**v3.25.0 新增**:
|
|
14
16
|
- ✅ `reset_auth_state()` - 组合方法,一次调用完全清除认证状态(推荐)
|
|
@@ -411,6 +413,59 @@ del http_client.client.cookies["JSESSIONID"]
|
|
|
411
413
|
|
|
412
414
|
---
|
|
413
415
|
|
|
416
|
+
## UI 认证状态管理(v4.0.3)
|
|
417
|
+
|
|
418
|
+
### HTTP 与 UI 认证对比
|
|
419
|
+
|
|
420
|
+
| 维度 | HTTP bearer_token | UI storageState |
|
|
421
|
+
|------|------------------|-----------------|
|
|
422
|
+
| **认证执行** | 框架自动调登录 API | 项目写登录逻辑(UI 流程多变) |
|
|
423
|
+
| **状态缓存** | session 级别缓存 token | session 级别缓存 storageState JSON |
|
|
424
|
+
| **状态注入** | 中间件注入 Authorization header | context fixture 注入 storage_state 到 BrowserContext |
|
|
425
|
+
| **跳过认证** | `skip_auth=True` | `browser.new_context()`(不带 storage_state) |
|
|
426
|
+
| **多角色** | 多个 API 实例 | 多个 storage_state fixture |
|
|
427
|
+
|
|
428
|
+
### 使用 AuthSetup
|
|
429
|
+
|
|
430
|
+
```python
|
|
431
|
+
# conftest.py
|
|
432
|
+
import pytest
|
|
433
|
+
from df_test_framework.testing import AuthSetup
|
|
434
|
+
|
|
435
|
+
@pytest.fixture(scope="session")
|
|
436
|
+
def storage_state(tmp_path_factory, settings):
|
|
437
|
+
with AuthSetup(settings, tmp_path_factory.mktemp("auth")) as auth:
|
|
438
|
+
auth.page.goto(f"{auth.base_url}/login")
|
|
439
|
+
auth.page.fill("#username", settings.business.admin_username)
|
|
440
|
+
auth.page.fill("#password", settings.business.admin_password)
|
|
441
|
+
auth.page.click("button[type=submit]")
|
|
442
|
+
auth.page.wait_for_url("**/dashboard")
|
|
443
|
+
return auth.save()
|
|
444
|
+
|
|
445
|
+
# 测试用例 — page 自动已认证
|
|
446
|
+
def test_dashboard(page):
|
|
447
|
+
page.goto("/dashboard")
|
|
448
|
+
assert page.get_by_text("监控管理").is_visible()
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### 未认证场景
|
|
452
|
+
|
|
453
|
+
从 `browser` 创建不带 storage_state 的 context:
|
|
454
|
+
|
|
455
|
+
```python
|
|
456
|
+
def test_unauthenticated_redirect(browser):
|
|
457
|
+
context = browser.new_context()
|
|
458
|
+
page = context.new_page()
|
|
459
|
+
page.goto("https://example.com/dashboard")
|
|
460
|
+
assert "/login" in page.url
|
|
461
|
+
page.close()
|
|
462
|
+
context.close()
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
详细用法参考 [Web UI 测试使用手册](web-ui-testing.md#3-认证状态管理storagstate)。
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
414
469
|
## 相关文档
|
|
415
470
|
|
|
416
471
|
- [中间件使用指南](middleware_guide.md) - 了解 BearerTokenMiddleware
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Fixtures 使用指南
|
|
2
2
|
|
|
3
|
-
> **最后更新**: 2026-
|
|
3
|
+
> **最后更新**: 2026-03-03
|
|
4
4
|
> **适用版本**: v3.0.0+
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -243,6 +243,30 @@ REDIS__PASSWORD=your_password
|
|
|
243
243
|
|
|
244
244
|
### UI 测试 Fixtures
|
|
245
245
|
|
|
246
|
+
#### `storage_state` - 认证状态路径
|
|
247
|
+
|
|
248
|
+
**Scope**: `session`
|
|
249
|
+
**版本**: v4.0.3+
|
|
250
|
+
|
|
251
|
+
Playwright storageState JSON 文件路径,框架默认返回 `None`(未认证)。项目在 `conftest.py` 中覆盖此 fixture 以提供认证状态,`page` 将自动携带 cookies/localStorage。
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
# conftest.py — 覆盖框架默认的 storage_state
|
|
255
|
+
import pytest
|
|
256
|
+
from df_test_framework.testing import AuthSetup
|
|
257
|
+
|
|
258
|
+
@pytest.fixture(scope="session")
|
|
259
|
+
def storage_state(tmp_path_factory, settings):
|
|
260
|
+
"""整个测试 session 只登录一次,后续 page 自动已认证"""
|
|
261
|
+
with AuthSetup(settings, tmp_path_factory.mktemp("auth")) as auth:
|
|
262
|
+
auth.page.goto(f"{auth.base_url}/login")
|
|
263
|
+
auth.page.fill("#username", "admin")
|
|
264
|
+
auth.page.fill("#password", "admin123")
|
|
265
|
+
auth.page.click("button[type=submit]")
|
|
266
|
+
auth.page.wait_for_url("**/dashboard")
|
|
267
|
+
return auth.save()
|
|
268
|
+
```
|
|
269
|
+
|
|
246
270
|
#### `page` - 同步页面实例
|
|
247
271
|
|
|
248
272
|
**Scope**: `function`
|
|
@@ -294,10 +318,10 @@ async def test_login(async_page):
|
|
|
294
318
|
|
|
295
319
|
#### `browser` / `async_browser` - 浏览器实例
|
|
296
320
|
|
|
297
|
-
**Scope**: `
|
|
298
|
-
**版本**: v3.0.0+ / v4.0.0
|
|
321
|
+
**Scope**: `session`
|
|
322
|
+
**版本**: v3.0.0+ / v4.0.0+(v4.1.0 提升为 session scope)
|
|
299
323
|
|
|
300
|
-
Playwright
|
|
324
|
+
Playwright 浏览器实例,整个测试会话共享。用于获取浏览器信息或创建多个上下文。
|
|
301
325
|
|
|
302
326
|
```python
|
|
303
327
|
def test_browser_info(browser):
|
|
@@ -311,7 +335,7 @@ def test_browser_info(browser):
|
|
|
311
335
|
**Scope**: `function`
|
|
312
336
|
**版本**: v3.0.0+ / v4.0.0+
|
|
313
337
|
|
|
314
|
-
|
|
338
|
+
浏览器上下文,每个测试独立隔离。v4.1.0 起自动注入 `storage_state` 认证状态。
|
|
315
339
|
|
|
316
340
|
```python
|
|
317
341
|
def test_with_cookies(context):
|
|
@@ -328,20 +352,20 @@ def test_with_cookies(context):
|
|
|
328
352
|
|
|
329
353
|
#### `browser_manager` / `async_browser_manager` - 浏览器管理器
|
|
330
354
|
|
|
331
|
-
**Scope**: `
|
|
332
|
-
**版本**: v3.0.0+ / v4.0.0
|
|
355
|
+
**Scope**: `session`
|
|
356
|
+
**版本**: v3.0.0+ / v4.0.0+(v4.1.0 提升为 session scope)
|
|
333
357
|
|
|
334
|
-
|
|
358
|
+
浏览器管理器,管理 Playwright 进程和浏览器实例。v4.1.0 起只管理 playwright + browser(session 级别复用),context/page 由独立 fixture 管理。
|
|
335
359
|
|
|
336
360
|
```python
|
|
337
361
|
def test_with_manager(browser_manager):
|
|
338
362
|
"""使用浏览器管理器"""
|
|
339
|
-
|
|
363
|
+
# 创建隔离的 context(通常由框架 fixture 自动完成)
|
|
364
|
+
ctx = browser_manager.new_context()
|
|
365
|
+
page = ctx.new_page()
|
|
340
366
|
page.goto("https://example.com")
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
base_url = browser_manager.base_url
|
|
344
|
-
print(f"Base URL: {base_url}")
|
|
367
|
+
page.close()
|
|
368
|
+
ctx.close()
|
|
345
369
|
```
|
|
346
370
|
|
|
347
371
|
**配置示例**:
|
|
@@ -699,13 +723,16 @@ async_database # session
|
|
|
699
723
|
redis_client # session
|
|
700
724
|
async_redis_client # session
|
|
701
725
|
runtime # session
|
|
726
|
+
storage_state # session(v4.0.3,认证状态路径)
|
|
727
|
+
browser_manager # session(v4.1.0,浏览器管理器)
|
|
728
|
+
browser # session(v4.1.0,浏览器实例)
|
|
702
729
|
|
|
703
730
|
# Function 级别(每个测试独立)
|
|
704
731
|
test_runtime # function
|
|
705
|
-
|
|
732
|
+
context # function(浏览器上下文,每测试隔离)
|
|
733
|
+
page # function(页面实例,每测试隔离)
|
|
734
|
+
async_context # function
|
|
706
735
|
async_page # function
|
|
707
|
-
browser # function
|
|
708
|
-
context # function
|
|
709
736
|
uow # function
|
|
710
737
|
cleanup # function
|
|
711
738
|
prepare_data # function
|
|
@@ -1070,6 +1097,7 @@ def test_user_order_flow(user_api, order_api):
|
|
|
1070
1097
|
|
|
1071
1098
|
| Fixture | Scope | 版本 | 说明 |
|
|
1072
1099
|
|---------|-------|------|------|
|
|
1100
|
+
| `storage_state` | session | v4.0.3+ | storageState 认证状态路径 |
|
|
1073
1101
|
| `http_client` | session | v2.0.0+ | 同步 HTTP 客户端 |
|
|
1074
1102
|
| `async_http_client` | session | v4.0.0+ | 异步 HTTP 客户端 |
|
|
1075
1103
|
| `database` | session | v2.0.0+ | 同步数据库客户端 |
|
|
@@ -1078,7 +1106,8 @@ def test_user_order_flow(user_api, order_api):
|
|
|
1078
1106
|
| `async_redis_client` | session | v4.0.0+ | 异步 Redis 客户端 |
|
|
1079
1107
|
| `page` | function | v3.0.0+ | 同步 Playwright 页面 |
|
|
1080
1108
|
| `async_page` | function | v4.0.0+ | 异步 Playwright 页面 |
|
|
1081
|
-
| `browser` |
|
|
1109
|
+
| `browser` | session | v3.0.0+(v4.1.0 提升) | 同步浏览器实例 |
|
|
1110
|
+
| `browser_manager` | session | v3.0.0+(v4.1.0 提升) | 浏览器管理器 |
|
|
1082
1111
|
| `context` | function | v3.0.0+ | 同步浏览器上下文 |
|
|
1083
1112
|
| `runtime` | session | v3.37.0+ | 运行时上下文 |
|
|
1084
1113
|
| `test_runtime` | function | v3.44.0+ | 测试专用运行时 |
|
|
@@ -1099,6 +1128,7 @@ def test_user_order_flow(user_api, order_api):
|
|
|
1099
1128
|
|
|
1100
1129
|
## 版本历史
|
|
1101
1130
|
|
|
1131
|
+
- **v4.1.0** (2026-03-03): Browser Session 复用,`browser_manager`/`browser` 提升为 session scope,context/page 保持 function scope 每测试隔离
|
|
1102
1132
|
- **v4.0.0** (2026-01-16): 全面异步化,新增 `async_http_client`、`async_database`、`async_redis_client`、`async_page` 等异步 fixtures
|
|
1103
1133
|
- **v3.45.0** (2025-12): 新增 `@api_class` 和 `@actions_class` 装饰器,API/Actions 自动加载
|
|
1104
1134
|
- **v3.44.0** (2025-11): 新增 `test_runtime` fixture,测试专用事件作用域
|
|
@@ -137,7 +137,7 @@ my_project/
|
|
|
137
137
|
│ └── fixtures/
|
|
138
138
|
│ └── __init__.py
|
|
139
139
|
├── tests/
|
|
140
|
-
│ ├── conftest.py # UI 测试配置(含 load_actions_fixtures
|
|
140
|
+
│ ├── conftest.py # UI 测试配置(含 load_actions_fixtures + storage_state 示例)
|
|
141
141
|
│ └── ui/
|
|
142
142
|
│ └── test_login.py # UI 示例测试
|
|
143
143
|
└── ...
|