df-test-framework 4.1.0__tar.gz → 4.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (858) hide show
  1. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/CHANGELOG.md +37 -0
  2. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/PKG-INFO +1 -1
  3. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core.md +2 -4
  4. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/auth_session_guide.md +5 -5
  5. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/middleware_guide.md +2 -2
  6. df_test_framework-4.1.1/docs/releases/v4.1.1.md +143 -0
  7. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/pyproject.toml +1 -1
  8. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/scripts/fetch_swagger.py +89 -38
  9. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/__init__.py +3 -1
  10. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/core/response.py +27 -0
  11. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +24 -2
  12. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +27 -21
  13. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +65 -26
  14. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/__init__.py +2 -0
  15. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +2 -0
  16. df_test_framework-4.1.1/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +182 -0
  17. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/readme.py +193 -100
  18. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +87 -33
  19. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/assertions/response.py +5 -1
  20. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/core/test_response.py +16 -0
  21. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_async_client.py +47 -6
  22. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_base_api.py +20 -27
  23. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_http_client.py +93 -42
  24. df_test_framework-4.1.1/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +265 -0
  25. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/uv.lock +1 -1
  26. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.editorconfig +0 -0
  27. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.env.example +0 -0
  28. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.gitattributes +0 -0
  29. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/README.md +0 -0
  30. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/lint.yml +0 -0
  31. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/release.yml +0 -0
  32. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/scheduled.yml +0 -0
  33. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/security.yml +0 -0
  34. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.github/workflows/test.yml +0 -0
  35. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.gitignore +0 -0
  36. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.gitleaks.toml +0 -0
  37. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.gitleaksignore +0 -0
  38. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.pre-commit-config.yaml +0 -0
  39. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/.python-version +0 -0
  40. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/CLAUDE.md +0 -0
  41. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/CONTRIBUTING.md +0 -0
  42. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/README.md +0 -0
  43. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/README_PYPI.md +0 -0
  44. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/CONTRIBUTOR_GUIDE.md +0 -0
  45. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
  46. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/ESSENTIAL_DOCS.md +0 -0
  47. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/FAQ.md +0 -0
  48. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/LEARNING_PATH.md +0 -0
  49. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/README.md +0 -0
  50. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/README.md +0 -0
  51. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/clients.md +0 -0
  52. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/README.md +0 -0
  53. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/context.md +0 -0
  54. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/events.md +0 -0
  55. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/exceptions.md +0 -0
  56. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/middleware.md +0 -0
  57. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/protocols.md +0 -0
  58. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/core/types.md +0 -0
  59. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/databases.md +0 -0
  60. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/drivers.md +0 -0
  61. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/extensions.md +0 -0
  62. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/infrastructure.md +0 -0
  63. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/patterns.md +0 -0
  64. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/api-reference/testing.md +0 -0
  65. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
  66. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/CODE_STRUCTURE.md +0 -0
  67. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
  68. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/README.md +0 -0
  69. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
  70. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/README.md +0 -0
  71. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
  72. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
  73. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
  74. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
  75. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
  76. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
  77. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
  78. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
  79. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
  80. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/config-driven-design.md +0 -0
  81. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/config-management-analysis.md +0 -0
  82. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
  83. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
  84. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
  85. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
  86. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
  87. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
  88. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
  89. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
  90. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/design/ui-observability-design.md +0 -0
  91. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
  92. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/v3_complete_draft.md +0 -0
  93. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/v3_final_draft.md +0 -0
  94. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
  95. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
  96. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
  97. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
  98. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
  99. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
  100. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
  101. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/overview.md +0 -0
  102. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/archive/versions/v2-architecture.md +0 -0
  103. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/extension-points.md +0 -0
  104. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
  105. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/multi-project-reuse.md +0 -0
  106. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/observability-architecture.md +0 -0
  107. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture/test-type-support.md +0 -0
  108. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/architecture//344/272/224/345/261/202/346/236/266/346/236/204/350/257/246/350/247/243.md" +0 -0
  109. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/README.md +0 -0
  110. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
  111. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
  112. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
  113. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
  114. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
  115. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
  116. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
  117. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
  118. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
  119. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/README.md +0 -0
  120. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
  121. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
  122. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
  123. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
  124. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
  125. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
  126. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
  127. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
  128. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
  129. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
  130. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
  131. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
  132. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
  133. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
  134. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
  135. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
  136. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/observability-config-design.md +0 -0
  137. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/ui-best-practices-2026.md +0 -0
  138. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/web-architecture-consistency-design.md +0 -0
  139. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/design/web-event-driven-comparison.md +0 -0
  140. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
  141. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
  142. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
  143. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
  144. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
  145. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/async_database_guide.md +0 -0
  146. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/async_http_client.md +0 -0
  147. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/httpx_advanced_usage.md +0 -0
  148. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/logging_configuration.md +0 -0
  149. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/logging_pytest_integration.md +0 -0
  150. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/modern_logging_best_practices.md +0 -0
  151. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/guides/repository_uow_guide.md +0 -0
  152. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/111.md +0 -0
  153. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
  154. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
  155. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
  156. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
  157. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
  158. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
  159. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
  160. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
  161. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
  162. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
  163. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/README.md +0 -0
  164. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
  165. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
  166. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/issues/README.md +0 -0
  167. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/issues/summary.md +0 -0
  168. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/issues/v1.md +0 -0
  169. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/migration/README.md +0 -0
  170. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
  171. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
  172. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
  173. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
  174. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
  175. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
  176. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
  177. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
  178. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
  179. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
  180. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
  181. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
  182. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
  183. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
  184. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
  185. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
  186. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
  187. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
  188. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
  189. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
  190. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
  191. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
  192. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
  193. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
  194. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
  195. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
  196. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
  197. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
  198. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
  199. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
  200. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
  201. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
  202. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/reports_2025/async_http_client_design.md +0 -0
  203. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
  204. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/user-guide/extensions.md +0 -0
  205. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/user-guide/ui-testing.md +0 -0
  206. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/BaseAPI/346/234/200/344/275/263/345/256/236/350/267/265/346/214/207/345/215/227.md" +0 -0
  207. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
  208. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/README.md +0 -0
  209. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
  210. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/architecture.md +0 -0
  211. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/best-practices.md +0 -0
  212. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/config-integration-guide.md +0 -0
  213. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/optimization-report.md +0 -0
  214. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1/publishing.md +0 -0
  215. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/v1//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251/346/265/213/350/257/225/346/241/206/346/236/266.md" +0 -0
  216. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
  217. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
  218. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/ci-templates/README.md +0 -0
  219. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/ci-templates/github-actions.yml +0 -0
  220. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/ci-templates/gitlab-ci.yml +0 -0
  221. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
  222. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
  223. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/development/RELEASE.md +0 -0
  224. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/development/VERSION_CONTROL_RULES.md +0 -0
  225. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/development/local-development.md +0 -0
  226. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/DECIMAL_GUIDE.md +0 -0
  227. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/allure_plugin.md +0 -0
  228. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/assertions_guide.md +0 -0
  229. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/async_api_guide.md +0 -0
  230. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/bootstrap_guide.md +0 -0
  231. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/config_guide.md +0 -0
  232. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/database_guide.md +0 -0
  233. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/decorators_guide.md +0 -0
  234. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/distributed_tracing.md +0 -0
  235. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/event_bus_guide.md +0 -0
  236. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/extensions.md +0 -0
  237. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/factory_guide.md +0 -0
  238. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/fixtures_guide.md +0 -0
  239. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/graphql_client.md +0 -0
  240. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/grpc_client.md +0 -0
  241. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/http_client_guide.md +0 -0
  242. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/integration-guide.md +0 -0
  243. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/local_debug_quickstart.md +0 -0
  244. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/logging_guide.md +0 -0
  245. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/message_queue.md +0 -0
  246. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/mocking.md +0 -0
  247. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/monitoring_plugin.md +0 -0
  248. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/openapi_guide.md +0 -0
  249. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/plugins_guide.md +0 -0
  250. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/prometheus_metrics.md +0 -0
  251. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/redis_guide.md +0 -0
  252. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/resilience_guide.md +0 -0
  253. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/sanitize_guide.md +0 -0
  254. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/scaffold_cli_guide.md +0 -0
  255. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/storage.md +0 -0
  256. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/telemetry_guide.md +0 -0
  257. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/test_data.md +0 -0
  258. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/test_data_cleanup.md +0 -0
  259. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/testing-development.md +0 -0
  260. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/guides/web-ui-testing.md +0 -0
  261. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/migration/README.md +0 -0
  262. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/migration/v3-to-v4.md +0 -0
  263. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/README.md +0 -0
  264. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.0.0-alpha.md +0 -0
  265. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.1.0.md +0 -0
  266. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.10.0.md +0 -0
  267. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.11.0.md +0 -0
  268. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.11.1.md +0 -0
  269. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.12.0.md +0 -0
  270. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.12.1.md +0 -0
  271. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.13.0.md +0 -0
  272. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.14.0.md +0 -0
  273. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.14.0_completion_report.md +0 -0
  274. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.14.0_implementation_complete.md +0 -0
  275. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.16.0.md +0 -0
  276. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.17.0.md +0 -0
  277. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.17.1.md +0 -0
  278. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.17.2.md +0 -0
  279. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.18.0.md +0 -0
  280. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.18.1-bugfix.md +0 -0
  281. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.18.1.md +0 -0
  282. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.19.0.md +0 -0
  283. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.2.0.md +0 -0
  284. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.20.0.md +0 -0
  285. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.21.0.md +0 -0
  286. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.22.0.md +0 -0
  287. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.22.1.md +0 -0
  288. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.23.0.md +0 -0
  289. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.24.0.md +0 -0
  290. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.25.0.md +0 -0
  291. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.26.0.md +0 -0
  292. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.27.0.md +0 -0
  293. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.28.0.md +0 -0
  294. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.28.1.md +0 -0
  295. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.29.0.md +0 -0
  296. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.3.0.md +0 -0
  297. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.30.0.md +0 -0
  298. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.31.0.md +0 -0
  299. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.32.0.md +0 -0
  300. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.33.0.md +0 -0
  301. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.34.0.md +0 -0
  302. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.34.1.md +0 -0
  303. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.0.md +0 -0
  304. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.1.md +0 -0
  305. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.2.md +0 -0
  306. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.3.md +0 -0
  307. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.4.md +0 -0
  308. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.5.md +0 -0
  309. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.6.md +0 -0
  310. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.35.7.md +0 -0
  311. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.36.0.md +0 -0
  312. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.36.1.md +0 -0
  313. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.37.0.md +0 -0
  314. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.0.md +0 -0
  315. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.10.md +0 -0
  316. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.2.md +0 -0
  317. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.4.md +0 -0
  318. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.5.md +0 -0
  319. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.7.md +0 -0
  320. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.8.md +0 -0
  321. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.38.9.md +0 -0
  322. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.39.0.md +0 -0
  323. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.39.1.md +0 -0
  324. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.4.0.md +0 -0
  325. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.40.0.md +0 -0
  326. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.41.0.md +0 -0
  327. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.41.1.md +0 -0
  328. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.42.0.md +0 -0
  329. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.43.0.md +0 -0
  330. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.44.0.md +0 -0
  331. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.45.0.md +0 -0
  332. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.46.1.md +0 -0
  333. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.46.2.md +0 -0
  334. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.46.3.md +0 -0
  335. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.5.0.md +0 -0
  336. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.6.0.md +0 -0
  337. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.6.1.md +0 -0
  338. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.6.2.md +0 -0
  339. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.7.0.md +0 -0
  340. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.8.0.md +0 -0
  341. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v3.9.0.md +0 -0
  342. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.0.0.md +0 -0
  343. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.0.1.md +0 -0
  344. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.0.2.md +0 -0
  345. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.0.3.md +0 -0
  346. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.0.4.md +0 -0
  347. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/releases/v4.1.0.md +0 -0
  348. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/skills/write-code.zip +0 -0
  349. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/skills/write-test.zip +0 -0
  350. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/troubleshooting/README.md +0 -0
  351. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/troubleshooting/common-errors.md +0 -0
  352. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/troubleshooting/debugging-guide.md +0 -0
  353. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/BEST_PRACTICES.md +0 -0
  354. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/QUICK_REFERENCE.md +0 -0
  355. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/QUICK_START.md +0 -0
  356. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/README.md +0 -0
  357. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/USER_MANUAL.md +0 -0
  358. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
  359. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/ci-cd.md +0 -0
  360. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/code-generation.md +0 -0
  361. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/configuration.md +0 -0
  362. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/cross-project-sharing.md +0 -0
  363. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/debugging.md +0 -0
  364. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/examples.md +0 -0
  365. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/multi-repo.md +0 -0
  366. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/nested-settings-guide.md +0 -0
  367. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/docs/user-guide/security-best-practices.md +0 -0
  368. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/01-basic/README.md +0 -0
  369. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/01-basic/database_operations.py +0 -0
  370. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/01-basic/http_client_usage.py +0 -0
  371. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/01-basic/redis_cache.py +0 -0
  372. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/01-basic/storage_usage.py +0 -0
  373. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/02-bootstrap/README.md +0 -0
  374. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/02-bootstrap/custom_providers.py +0 -0
  375. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/02-bootstrap/custom_settings.py +0 -0
  376. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
  377. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/02-bootstrap/with_extensions.py +0 -0
  378. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/03-testing/README.md +0 -0
  379. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/03-testing/conftest.py +0 -0
  380. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/03-testing/test_api.py +0 -0
  381. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/03-testing/test_database.py +0 -0
  382. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/03-testing/test_with_fixtures.py +0 -0
  383. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/04-patterns/README.md +0 -0
  384. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/04-patterns/builder_pattern.py +0 -0
  385. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/04-patterns/combined_patterns.py +0 -0
  386. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/04-patterns/repository_pattern.py +0 -0
  387. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/README.md +0 -0
  388. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/allure_enhancement_extension.py +0 -0
  389. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/custom_extension.py +0 -0
  390. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/data_factory_extension.py +0 -0
  391. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/environment_validator_extension.py +0 -0
  392. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/monitoring_extension.py +0 -0
  393. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/mq_monitor_extension.py +0 -0
  394. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/05-extensions/notification_extension.py +0 -0
  395. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/06-ui-testing/README.md +0 -0
  396. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/06-ui-testing/basic_ui_test.py +0 -0
  397. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/06-ui-testing/conftest.py +0 -0
  398. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/06-ui-testing/page_object_example.py +0 -0
  399. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/README.md +0 -0
  400. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
  401. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
  402. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
  403. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/kafka_basic.py +0 -0
  404. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/kafka_ssl.py +0 -0
  405. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/rabbitmq_basic.py +0 -0
  406. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/rabbitmq_topic.py +0 -0
  407. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/rocketmq-broker.conf +0 -0
  408. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-message-queue/rocketmq_basic.py +0 -0
  409. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
  410. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-v35-features/02_profile_configuration.py +0 -0
  411. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-v35-features/03_runtime_overrides.py +0 -0
  412. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-v35-features/04_observability.py +0 -0
  413. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/07-v35-features/README.md +0 -0
  414. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
  415. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/02_repository_v37.py +0 -0
  416. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
  417. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
  418. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/05_project_uow.py +0 -0
  419. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
  420. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/08-v37-features/README.md +0 -0
  421. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/examples/README.md +0 -0
  422. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/scripts/security-scan.bat +0 -0
  423. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/scripts/security-scan.sh +0 -0
  424. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/bootstrap/__init__.py +0 -0
  425. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
  426. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/bootstrap/providers.py +0 -0
  427. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/bootstrap/runtime.py +0 -0
  428. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/__init__.py +0 -0
  429. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
  430. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
  431. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
  432. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
  433. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
  434. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
  435. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
  436. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
  437. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
  438. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
  439. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
  440. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
  441. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
  442. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
  443. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
  444. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
  445. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
  446. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
  447. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
  448. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
  449. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
  450. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
  451. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
  452. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
  453. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
  454. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
  455. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
  456. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
  457. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
  458. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
  459. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
  460. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
  461. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
  462. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
  463. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
  464. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
  465. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
  466. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
  467. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/database.py +0 -0
  468. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/factory.py +0 -0
  469. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
  470. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
  471. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
  472. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
  473. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
  474. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
  475. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
  476. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/databases/uow.py +0 -0
  477. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
  478. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
  479. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
  480. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
  481. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
  482. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
  483. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
  484. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
  485. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
  486. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
  487. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
  488. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
  489. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
  490. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
  491. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
  492. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
  493. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
  494. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
  495. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
  496. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
  497. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
  498. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
  499. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
  500. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
  501. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
  502. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
  503. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
  504. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
  505. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
  506. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
  507. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
  508. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
  509. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
  510. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
  511. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
  512. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
  513. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
  514. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
  515. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
  516. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
  517. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
  518. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
  519. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/__init__.py +0 -0
  520. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/__main__.py +0 -0
  521. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/__init__.py +0 -0
  522. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/cicd.py +0 -0
  523. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/env.py +0 -0
  524. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
  525. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
  526. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/commands/interactive.py +0 -0
  527. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/generators/__init__.py +0 -0
  528. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
  529. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
  530. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
  531. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/main.py +0 -0
  532. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/__init__.py +0 -0
  533. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
  534. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
  535. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
  536. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
  537. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
  538. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
  539. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
  540. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
  541. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
  542. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
  543. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
  544. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
  545. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
  546. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
  547. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
  548. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
  549. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
  550. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
  551. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/test.py +0 -0
  552. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
  553. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
  554. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
  555. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
  556. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
  557. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
  558. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
  559. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/constants.py +0 -0
  560. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
  561. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
  562. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
  563. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
  564. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/env.py +0 -0
  565. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
  566. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
  567. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
  568. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
  569. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
  570. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
  571. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
  572. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
  573. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
  574. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/settings.py +0 -0
  575. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
  576. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
  577. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
  578. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
  579. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
  580. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
  581. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
  582. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
  583. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/uow.py +0 -0
  584. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
  585. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
  586. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
  587. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
  588. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/cli/utils.py +0 -0
  589. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/__init__.py +0 -0
  590. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/context/__init__.py +0 -0
  591. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/context/execution.py +0 -0
  592. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/context/propagation.py +0 -0
  593. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/decorators.py +0 -0
  594. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/events/__init__.py +0 -0
  595. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/events/types.py +0 -0
  596. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/exceptions.py +0 -0
  597. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/middleware/__init__.py +0 -0
  598. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/middleware/base.py +0 -0
  599. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/middleware/chain.py +0 -0
  600. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/middleware/decorator.py +0 -0
  601. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/middleware/protocol.py +0 -0
  602. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/models/__init__.py +0 -0
  603. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/models/base.py +0 -0
  604. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/__init__.py +0 -0
  605. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/client.py +0 -0
  606. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/event.py +0 -0
  607. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/plugin.py +0 -0
  608. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/repository.py +0 -0
  609. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/protocols/telemetry.py +0 -0
  610. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/core/types.py +0 -0
  611. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/__init__.py +0 -0
  612. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
  613. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/loader.py +0 -0
  614. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
  615. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
  616. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/schema.py +0 -0
  617. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/settings.py +0 -0
  618. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/config/sources.py +0 -0
  619. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
  620. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
  621. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
  622. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
  623. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
  624. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
  625. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/events/bus.py +0 -0
  626. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
  627. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
  628. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/logging/config.py +0 -0
  629. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
  630. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
  631. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
  632. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
  633. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
  634. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
  635. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
  636. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
  637. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
  638. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
  639. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
  640. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
  641. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
  642. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
  643. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
  644. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
  645. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
  646. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
  647. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
  648. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
  649. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
  650. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
  651. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
  652. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
  653. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
  654. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
  655. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
  656. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
  657. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
  658. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
  659. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
  660. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
  661. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/__init__.py +0 -0
  662. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
  663. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
  664. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
  665. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
  666. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
  667. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/__init__.py +0 -0
  668. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/assertions/__init__.py +0 -0
  669. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/assertions/helper.py +0 -0
  670. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
  671. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/assertions/matchers.py +0 -0
  672. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/__init__.py +0 -0
  673. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
  674. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/builders/base.py +0 -0
  675. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
  676. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/factories/base.py +0 -0
  677. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/factories/examples.py +0 -0
  678. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
  679. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
  680. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
  681. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/loaders/base.py +0 -0
  682. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
  683. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
  684. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
  685. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/debugging/__init__.py +0 -0
  686. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/debugging/console.py +0 -0
  687. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/decorators/__init__.py +0 -0
  688. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
  689. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/decorators/api_class.py +0 -0
  690. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
  691. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/allure.py +0 -0
  692. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/auth.py +0 -0
  693. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
  694. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/core.py +0 -0
  695. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
  696. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
  697. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
  698. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
  699. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/fixtures/ui.py +0 -0
  700. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/mocking/__init__.py +0 -0
  701. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
  702. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
  703. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
  704. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
  705. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/__init__.py +0 -0
  706. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
  707. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/debug.py +0 -0
  708. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
  709. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
  710. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/plugins/markers.py +0 -0
  711. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/reporting/__init__.py +0 -0
  712. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
  713. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
  714. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
  715. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/README.md +0 -0
  716. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/bootstrap/__init__.py +0 -0
  717. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/bootstrap/test_bootstrap.py +0 -0
  718. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/bootstrap/test_providers.py +0 -0
  719. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/bootstrap/test_runtime.py +0 -0
  720. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/__init__.py +0 -0
  721. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/graphql/__init__.py +0 -0
  722. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/graphql/test_client.py +0 -0
  723. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
  724. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/graphql/test_models.py +0 -0
  725. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
  726. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/grpc/__init__.py +0 -0
  727. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/grpc/test_client.py +0 -0
  728. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
  729. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/grpc/test_models.py +0 -0
  730. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
  731. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/core/__init__.py +0 -0
  732. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
  733. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/core/test_request.py +0 -0
  734. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
  735. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
  736. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
  737. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
  738. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
  739. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
  740. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
  741. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
  742. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_async_database.py +0 -0
  743. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_database.py +0 -0
  744. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_database_factory.py +0 -0
  745. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_query_builder.py +0 -0
  746. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_repositories.py +0 -0
  747. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/databases/test_uow.py +0 -0
  748. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
  749. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
  750. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/messengers/__init__.py +0 -0
  751. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/messengers/test_kafka_client.py +0 -0
  752. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
  753. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
  754. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/storages/__init__.py +0 -0
  755. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/storages/test_local_file.py +0 -0
  756. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/storages/test_oss.py +0 -0
  757. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/capabilities/storages/test_s3.py +0 -0
  758. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/__init__.py +0 -0
  759. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_env_cmd.py +0 -0
  760. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_generate_cmd.py +0 -0
  761. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_init_cmd.py +0 -0
  762. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_interactive_cmd.py +0 -0
  763. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_main.py +0 -0
  764. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/cli/test_utils.py +0 -0
  765. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/conftest.py +0 -0
  766. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/protocols/test_client.py +0 -0
  767. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/protocols/test_event.py +0 -0
  768. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/protocols/test_plugin.py +0 -0
  769. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/protocols/test_repository.py +0 -0
  770. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/protocols/test_telemetry.py +0 -0
  771. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_context.py +0 -0
  772. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_decorators.py +0 -0
  773. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_event_types.py +0 -0
  774. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_events.py +0 -0
  775. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_middleware.py +0 -0
  776. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/core/test_types.py +0 -0
  777. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/__init__.py +0 -0
  778. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/config/test_loader.py +0 -0
  779. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/config/test_middleware_schema.py +0 -0
  780. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/context/test_carriers.py +0 -0
  781. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/events/__init__.py +0 -0
  782. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/events/test_bus.py +0 -0
  783. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/__init__.py +0 -0
  784. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_decorators.py +0 -0
  785. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_manager.py +0 -0
  786. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_observer.py +0 -0
  787. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_performance.py +0 -0
  788. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_registry.py +0 -0
  789. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/metrics/test_types.py +0 -0
  790. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/plugins/test_manager.py +0 -0
  791. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/resilience/__init__.py +0 -0
  792. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
  793. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/sanitize/__init__.py +0 -0
  794. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/sanitize/test_service.py +0 -0
  795. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/telemetry/__init__.py +0 -0
  796. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/telemetry/test_facade.py +0 -0
  797. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/telemetry/test_noop.py +0 -0
  798. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_bootstrap.py +0 -0
  799. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_logging.py +0 -0
  800. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_pipeline.py +0 -0
  801. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_runtime.py +0 -0
  802. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_settings.py +0 -0
  803. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/test_sources.py +0 -0
  804. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/__init__.py +0 -0
  805. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_context.py +0 -0
  806. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_decorators.py +0 -0
  807. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_exporters.py +0 -0
  808. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_integrations.py +0 -0
  809. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_interceptors.py +0 -0
  810. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/infrastructure/tracing/test_manager.py +0 -0
  811. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/integration/__init__.py +0 -0
  812. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/integration/test_config_environment.py +0 -0
  813. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/integration/test_event_observability.py +0 -0
  814. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/integration/test_factory_assertions.py +0 -0
  815. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/integration/test_middleware_chain.py +0 -0
  816. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/migration/__init__.py +0 -0
  817. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
  818. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/plugins/__init__.py +0 -0
  819. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/plugins/builtin/__init__.py +0 -0
  820. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/plugins/builtin/monitoring/__init__.py +0 -0
  821. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
  822. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/test_json_to_model_generator.py +0 -0
  823. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/assertions/__init__.py +0 -0
  824. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/assertions/test_json_schema.py +0 -0
  825. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/assertions/test_matchers.py +0 -0
  826. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/data/__init__.py +0 -0
  827. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/data/test_builders.py +0 -0
  828. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/data/test_data_generator.py +0 -0
  829. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/data/test_factories.py +0 -0
  830. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/debugging/__init__.py +0 -0
  831. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/debugging/test_console_debug_observer.py +0 -0
  832. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/decorators/__init__.py +0 -0
  833. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/decorators/test_actions_class.py +0 -0
  834. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/decorators/test_api_class.py +0 -0
  835. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/__init__.py +0 -0
  836. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_cleanup.py +0 -0
  837. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_fixtures_core.py +0 -0
  838. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
  839. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
  840. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
  841. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
  842. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
  843. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/mocking/__init__.py +0 -0
  844. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/mocking/test_database_mock.py +0 -0
  845. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/mocking/test_http_mock.py +0 -0
  846. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/mocking/test_redis_mock.py +0 -0
  847. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/mocking/test_time_mock.py +0 -0
  848. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
  849. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/plugins/test_debug_plugin.py +0 -0
  850. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/plugins/test_env_plugin.py +0 -0
  851. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/plugins/test_logging_plugin.py +0 -0
  852. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/plugins/test_markers.py +0 -0
  853. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/reporting/test_allure_observer.py +0 -0
  854. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/test_allure_helper.py +0 -0
  855. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/test_assertions.py +0 -0
  856. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/test_data_loaders.py +0 -0
  857. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/tests/testing/test_factories_presets.py +0 -0
  858. {df_test_framework-4.1.0 → df_test_framework-4.1.1}/verify_fixes.py +0 -0
@@ -5,6 +5,43 @@
5
5
  格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
6
6
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
7
7
 
8
+ ## [4.1.1] - 2026-03-11
9
+
10
+ ### ✨ 新增功能
11
+
12
+ - 🔄 **统一 Response 层**: `HttpClient`/`AsyncHttpClient` 的所有方法统一返回框架 `Response` 对象,不再返回 `httpx.Response`
13
+ - ⏱️ **请求计时**: `Response` 新增 `elapsed` 字段(秒),自动记录每次请求耗时
14
+ - 🧩 **Response 兼容方法**: 新增 `text` 属性、`json()` 方法、`raise_for_status()` 方法,兼容 httpx.Response 用法
15
+ - 🏊 **AsyncBrowserPool**: 新增异步浏览器实例池,支持并发 UI 测试(Semaphore 控制并发,按最少 context 分配)
16
+ - 🔙 **request_raw()**: `HttpClient` 新增 `request_raw()` 方法,供需要原始 `httpx.Response` 的场景使用
17
+ - 🛠️ **fetch_swagger 增强**: 重构为 argparse,支持 `-H` 自定义请求头、`-d` 输出目录、中文文件名保留
18
+
19
+ ### 🔄 变更
20
+
21
+ - ⚠️ **异常统一**: httpx 异常(`TimeoutException`/`ConnectError`/`HTTPError`)统一包装为框架 `HttpError`,原始异常通过 `__cause__` 保留
22
+ - ⚠️ **BaseAPI 异常变更**: `_parse_response()` 中 HTTP 错误从 `httpx.HTTPStatusError` 改为 `HttpError`
23
+ - 📏 **ResponseAssertions**: `assert_response_time` 兼容 `timedelta`(httpx)和 `float` 秒数(框架 Response)
24
+
25
+ ### 📚 文档
26
+
27
+ - 📝 API 参考、认证指南、中间件指南中 `HTTPStatusError` 更新为 `HttpError`
28
+
29
+ ### ⚠️ 迁移指南
30
+
31
+ 用户项目中捕获 httpx 异常的代码需要更新:
32
+
33
+ ```python
34
+ # 之前
35
+ from httpx import HTTPStatusError
36
+ with pytest.raises((BusinessError, HTTPStatusError)):
37
+ ...
38
+
39
+ # 现在
40
+ from df_test_framework.core.exceptions import HttpError
41
+ with pytest.raises((BusinessError, HttpError)):
42
+ ...
43
+ ```
44
+
8
45
  ## [4.1.0] - 2026-03-03
9
46
 
10
47
  ### ✨ 新增功能
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: df-test-framework
3
- Version: 4.1.0
3
+ Version: 4.1.1
4
4
  Summary: 基于交互模式的现代化测试自动化框架,支持多种测试场景
5
5
  Project-URL: Homepage, https://github.com/yourorg/df-test-framework
6
6
  Project-URL: Repository, https://github.com/yourorg/df-test-framework
@@ -85,12 +85,10 @@ def request(
85
85
  - `url`: 请求路径(相对于base_url)
86
86
  - `**kwargs`: 其他请求参数(params, json, data, headers等)
87
87
 
88
- **返回**: `httpx.Response` 对象
88
+ **返回**: `Response` 对象(框架统一响应)
89
89
 
90
90
  **异常**:
91
- - `httpx.TimeoutException`: 请求超时(重试max_retries次后仍失败)
92
- - `httpx.HTTPStatusError`: HTTP状态错误
93
- - `httpx.RequestError`: 请求错误
91
+ - `HttpError`: HTTP 请求错误(超时、连接失败、状态码错误等)
94
92
 
95
93
  **重试策略**:
96
94
  - ✅ **自动重试**: 超时异常和5xx服务器错误
@@ -205,7 +205,7 @@ http_client.clear_cookies()
205
205
  def test_full_auth_flow(admin_auth_api, settings):
206
206
  """测试完整的登录-获取用户-登出流程"""
207
207
  from df_test_framework import BusinessError
208
- from httpx import HTTPStatusError
208
+ from df_test_framework.core.exceptions import HttpError
209
209
 
210
210
  username = settings.business.admin_username
211
211
  password = settings.business.admin_password
@@ -222,7 +222,7 @@ def test_full_auth_flow(admin_auth_api, settings):
222
222
  admin_auth_api.logout(token=token)
223
223
 
224
224
  # 4. 验证 Token 已失效
225
- with pytest.raises((BusinessError, HTTPStatusError)):
225
+ with pytest.raises((BusinessError, HttpError)):
226
226
  admin_auth_api.get_current_user(token=token)
227
227
 
228
228
  # 5. 清理(确保不影响其他测试)
@@ -236,10 +236,10 @@ def test_full_auth_flow(admin_auth_api, settings):
236
236
  def test_get_current_user_without_login(admin_auth_api):
237
237
  """测试未登录状态下获取当前用户"""
238
238
  from df_test_framework import BusinessError
239
- from httpx import HTTPStatusError
239
+ from df_test_framework.core.exceptions import HttpError
240
240
 
241
241
  # 使用 skip_auth=True 跳过认证中间件
242
- with pytest.raises((BusinessError, HTTPStatusError)):
242
+ with pytest.raises((BusinessError, HttpError)):
243
243
  admin_auth_api.get_current_user(skip_auth=True)
244
244
  ```
245
245
 
@@ -311,7 +311,7 @@ admin_auth_api.logout(token=token)
311
311
 
312
312
  ```python
313
313
  # ✅ 推荐:使用 skip_auth 测试未登录场景
314
- with pytest.raises((BusinessError, HTTPStatusError)):
314
+ with pytest.raises((BusinessError, HttpError)):
315
315
  admin_auth_api.get_current_user(skip_auth=True)
316
316
  ```
317
317
 
@@ -286,7 +286,7 @@ client.use(middleware)
286
286
  ```python
287
287
  # 测试未登录场景(接口需要验证"未登录时返回 401")
288
288
  def test_get_current_user_without_login(api):
289
- with pytest.raises((BusinessError, HTTPStatusError)):
289
+ with pytest.raises((BusinessError, HttpError)):
290
290
  api.get_current_user(skip_auth=True) # 不添加 Token
291
291
  ```
292
292
 
@@ -307,7 +307,7 @@ def test_full_auth_flow(api):
307
307
  api.logout(token=token)
308
308
 
309
309
  # 4. 继续用同一个 Token,验证已失效
310
- with pytest.raises((BusinessError, HTTPStatusError)):
310
+ with pytest.raises((BusinessError, HttpError)):
311
311
  api.get_current_user(token=token)
312
312
  ```
313
313
 
@@ -0,0 +1,143 @@
1
+ # v4.1.1 发布说明
2
+
3
+ **发布日期**: 2026-03-11
4
+
5
+ 统一 HTTP 响应层,所有请求方法返回框架 `Response` 对象,异常统一为 `HttpError`。新增 `AsyncBrowserPool` 和 `fetch_swagger` 增强。
6
+
7
+ ---
8
+
9
+ ## 新增功能
10
+
11
+ ### 统一 Response 层
12
+
13
+ `HttpClient` / `AsyncHttpClient` 的所有方法(`get`/`post`/`put`/`patch`/`delete`/`head`/`options`)统一返回框架 `Response` 对象,不再返回 `httpx.Response`。
14
+
15
+ ```python
16
+ from df_test_framework.capabilities.clients.http.core.response import Response
17
+
18
+ # 之前:返回 httpx.Response
19
+ # 现在:返回框架 Response(包含 status_code, headers, body, json_data, elapsed, context)
20
+ response = client.get("/users")
21
+ assert isinstance(response, Response)
22
+ assert response.elapsed > 0 # 请求耗时(秒)
23
+ ```
24
+
25
+ **新增 `request_raw()` 方法**:需要原始 `httpx.Response` 时使用:
26
+
27
+ ```python
28
+ httpx_response = client.request_raw("GET", "/users") # 返回 httpx.Response
29
+ ```
30
+
31
+ ### Response 增强
32
+
33
+ ```python
34
+ response.text # 响应文本(兼容 httpx.Response.text)
35
+ response.json() # 获取 JSON 数据(兼容 httpx.Response.json())
36
+ response.elapsed # 请求耗时(float 秒数)
37
+ response.raise_for_status() # 非 2xx 时抛出 HttpError
38
+ ```
39
+
40
+ ### 异常统一
41
+
42
+ httpx 底层异常统一包装为框架 `HttpError`,原始异常通过 `__cause__` 保留:
43
+
44
+ | httpx 异常 | 框架异常 | 错误消息 |
45
+ |------------|---------|---------|
46
+ | `httpx.TimeoutException` | `HttpError` | `请求超时: GET /url` |
47
+ | `httpx.ConnectError` | `HttpError` | `连接失败: GET /url` |
48
+ | `httpx.HTTPError` | `HttpError` | `HTTP错误: GET /url` |
49
+
50
+ ```python
51
+ from df_test_framework.core.exceptions import HttpError
52
+
53
+ try:
54
+ client.get("/slow-endpoint")
55
+ except HttpError as e:
56
+ print(e.message) # "请求超时: GET /slow-endpoint"
57
+ print(e.__cause__) # 原始 httpx.TimeoutException
58
+ print(e.details) # {"original_error": "ReadTimeout", "url": "/slow-endpoint"}
59
+ ```
60
+
61
+ ### AsyncBrowserPool
62
+
63
+ 异步浏览器实例池,管理多个 `AsyncBrowserManager` 实例,支持并发 UI 测试:
64
+
65
+ ```python
66
+ from df_test_framework import AsyncBrowserPool
67
+
68
+ pool = AsyncBrowserPool(max_browsers=3, max_contexts_per_browser=10)
69
+ await pool.start()
70
+
71
+ async with pool.acquire() as manager:
72
+ ctx = await manager.new_context()
73
+ page = await ctx.new_page()
74
+ await page.goto("https://example.com")
75
+ await page.close()
76
+ await ctx.close()
77
+
78
+ print(pool.stats) # {"total": 3, "active": 1, "idle": 2, ...}
79
+ await pool.shutdown()
80
+ ```
81
+
82
+ 特性:
83
+ - `asyncio.Semaphore` 控制总并发数
84
+ - 按最少 context 数分配浏览器实例
85
+ - `_PooledManager` 代理防止单次 acquire 创建多个 context
86
+ - `start()` 失败自动回滚已启动的实例
87
+
88
+ ### fetch_swagger 增强
89
+
90
+ 重构为 `argparse`,新增自定义请求头和输出目录支持:
91
+
92
+ ```bash
93
+ # 带认证头
94
+ python scripts/fetch_swagger.py -H 'Authorization: Bearer token' http://example.com
95
+
96
+ # 指定输出目录
97
+ python scripts/fetch_swagger.py -d output/ http://example.com
98
+
99
+ # 组合使用
100
+ python scripts/fetch_swagger.py -H 'Cookie: sid=abc' -d docs/ http://localhost:8089/doc.html
101
+ ```
102
+
103
+ 改进:
104
+ - 中文文件名保留(`unicodedata.normalize` + 正则清理)
105
+ - JSON 解析容错(不再依赖 content-type 判断)
106
+ - 输出目录自动创建
107
+
108
+ ---
109
+
110
+ ## 迁移指南
111
+
112
+ ### 异常捕获更新
113
+
114
+ ```python
115
+ # ❌ 之前
116
+ from httpx import HTTPStatusError
117
+ with pytest.raises((BusinessError, HTTPStatusError)):
118
+ api.get_current_user(skip_auth=True)
119
+
120
+ # ✅ 现在
121
+ from df_test_framework.core.exceptions import HttpError
122
+ with pytest.raises((BusinessError, HttpError)):
123
+ api.get_current_user(skip_auth=True)
124
+ ```
125
+
126
+ ### BaseAPI 用户(无需改动)
127
+
128
+ `BaseAPI` 的 `get`/`post` 等方法内部已自动使用框架 `Response`,返回 Pydantic 模型或 `dict` 的用法不变。
129
+
130
+ ### 直接使用 HttpClient 的用户
131
+
132
+ ```python
133
+ # ❌ 之前:返回 httpx.Response
134
+ response = client.request("GET", "/users")
135
+ response.raise_for_status() # httpx 方法
136
+
137
+ # ✅ 现在:返回框架 Response
138
+ response = client.request("GET", "/users")
139
+ response.raise_for_status() # 框架方法(行为一致)
140
+
141
+ # 如需原始 httpx.Response
142
+ response = client.request_raw("GET", "/users")
143
+ ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "df-test-framework"
3
- version = "4.1.0"
3
+ version = "4.1.1"
4
4
  description = "基于交互模式的现代化测试自动化框架,支持多种测试场景"
5
5
  authors = [{name = "DF QA Team", email = "qa@example.com"}]
6
6
  readme = "README_PYPI.md"
@@ -7,22 +7,26 @@
7
7
  - Spring Boot context-path
8
8
 
9
9
  用法:
10
- python scripts/fetch_swagger.py [URL] [OUTPUT]
10
+ python scripts/fetch_swagger.py [OPTIONS] URL [OUTPUT]
11
11
 
12
12
  示例:
13
13
  python scripts/fetch_swagger.py http://localhost:8089/swagger-ui/index.html
14
- python scripts/fetch_swagger.py http://localhost:8089/api/doc.html # 带 context-path
14
+ python scripts/fetch_swagger.py http://localhost:8089/api/doc.html
15
15
  python scripts/fetch_swagger.py http://example.com swagger.json
16
+ python scripts/fetch_swagger.py -H 'Authorization: Bearer token' http://example.com
17
+ python scripts/fetch_swagger.py -d output/ http://example.com
16
18
  """
17
19
 
20
+ import argparse
18
21
  import json
22
+ import re
19
23
  import sys
24
+ import unicodedata
20
25
  from pathlib import Path
21
26
  from urllib.parse import urlparse
22
27
 
23
28
  import httpx
24
29
 
25
-
26
30
  # 常见的 OpenAPI 文档端点(按优先级排序)
27
31
  COMMON_API_DOC_PATHS = [
28
32
  # OpenAPI 3.x
@@ -42,6 +46,45 @@ COMMON_API_DOC_PATHS = [
42
46
  ]
43
47
 
44
48
 
49
+ def parse_args():
50
+ """解析命令行参数"""
51
+ parser = argparse.ArgumentParser(description="从 Swagger UI / Knife4j 获取 OpenAPI 文档")
52
+ parser.add_argument("url", help="Swagger UI 或 Knife4j 页面 URL")
53
+ parser.add_argument("output", nargs="?", default=None, help="输出文件名(可选)")
54
+ parser.add_argument(
55
+ "-H",
56
+ "--header",
57
+ action="append",
58
+ default=[],
59
+ help="自定义请求头(可多次使用),如: -H 'Authorization: Bearer token'",
60
+ )
61
+ parser.add_argument(
62
+ "-d",
63
+ "--output-dir",
64
+ default=".",
65
+ help="输出目录(默认当前目录)",
66
+ )
67
+ return parser.parse_args()
68
+
69
+
70
+ def _parse_headers(header_list: list[str]) -> dict[str, str]:
71
+ """解析 -H 'Key: Value' 格式的请求头"""
72
+ headers = {}
73
+ for h in header_list:
74
+ if ":" in h:
75
+ key, value = h.split(":", 1)
76
+ headers[key.strip()] = value.strip()
77
+ return headers
78
+
79
+
80
+ def _sanitize_filename(name: str) -> str:
81
+ """清理文件名,保留中文、字母、数字、连字符、下划线"""
82
+ name = unicodedata.normalize("NFKC", name)
83
+ name = re.sub(r"[^\w\u4e00-\u9fff\-]", "_", name)
84
+ name = re.sub(r"_+", "_", name).strip("_")
85
+ return name or "swagger"
86
+
87
+
45
88
  def get_base_url(url: str) -> str:
46
89
  """从 URL 中提取基础地址(包含 context-path)
47
90
 
@@ -58,10 +101,10 @@ def get_base_url(url: str) -> str:
58
101
 
59
102
  # 常见的 Swagger/Knife4j UI 页面路径(需要从 URL 中移除)
60
103
  ui_patterns = [
61
- "/doc.html", # Knife4j
62
- "/swagger-ui.html", # 旧版 Swagger UI
63
- "/swagger-ui/", # SpringDoc Swagger UI
64
- "/webjars/", # 静态资源
104
+ "/doc.html", # Knife4j
105
+ "/swagger-ui.html", # 旧版 Swagger UI
106
+ "/swagger-ui/", # SpringDoc Swagger UI
107
+ "/webjars/", # 静态资源
65
108
  ]
66
109
 
67
110
  # 提取 context-path:移除 UI 页面路径部分
@@ -94,17 +137,21 @@ def try_fetch_swagger_doc(base_url: str, client: httpx.Client) -> dict | list[di
94
137
  try:
95
138
  response = client.get(url, timeout=10)
96
139
  if response.status_code == 200:
97
- content_type = response.headers.get("content-type", "")
98
- if "json" in content_type or path.endswith(".json") or "?" in path:
140
+ try:
99
141
  data = response.json()
100
- # 检查是否是有效的 OpenAPI 文档
101
- if "swagger" in data or "openapi" in data or "paths" in data:
102
- print(f" ✅ 找到 OpenAPI 文档: {url}")
103
- return data
104
-
105
- # 可能是 swagger-resources 响应(Knife4j 多分组模式)
106
- if isinstance(data, list) and len(data) > 0:
107
- return _handle_swagger_resources(base_url, data, client)
142
+ except (json.JSONDecodeError, ValueError):
143
+ continue
144
+
145
+ # 检查是否是有效的 OpenAPI 文档
146
+ if isinstance(data, dict) and (
147
+ "swagger" in data or "openapi" in data or "paths" in data
148
+ ):
149
+ print(f" ✅ 找到 OpenAPI 文档: {url}")
150
+ return data
151
+
152
+ # 可能是 swagger-resources 响应(Knife4j 多分组模式)
153
+ if isinstance(data, list) and len(data) > 0:
154
+ return _handle_swagger_resources(base_url, data, client)
108
155
  except Exception as e:
109
156
  print(f" ❌ 失败: {e}")
110
157
  continue
@@ -163,13 +210,18 @@ def _handle_swagger_resources(
163
210
  return docs
164
211
 
165
212
 
166
- def fetch_swagger(url: str, output: str | None = None) -> None:
213
+ def fetch_swagger(
214
+ url: str,
215
+ output: str | None = None,
216
+ headers: dict[str, str] | None = None,
217
+ output_dir: str = ".",
218
+ ) -> None:
167
219
  """获取 Swagger 文档并保存"""
168
220
  base_url = get_base_url(url)
169
221
  print(f"基础地址: {base_url}")
170
222
  print("正在探测 OpenAPI 文档端点...")
171
223
 
172
- with httpx.Client(follow_redirects=True) as client:
224
+ with httpx.Client(follow_redirects=True, headers=headers or {}) as client:
173
225
  # 尝试获取文档
174
226
  result = try_fetch_swagger_doc(base_url, client)
175
227
 
@@ -182,23 +234,24 @@ def fetch_swagger(url: str, output: str | None = None) -> None:
182
234
 
183
235
  # 处理多分组情况
184
236
  if isinstance(result, list):
185
- _save_multiple_docs(result, output)
237
+ _save_multiple_docs(result, output, output_dir)
186
238
  else:
187
- _save_single_doc(result, output)
239
+ _save_single_doc(result, output, output_dir)
188
240
 
189
241
 
190
- def _save_single_doc(doc: dict, output: str | None) -> None:
242
+ def _save_single_doc(doc: dict, output: str | None, output_dir: str = ".") -> None:
191
243
  """保存单个文档"""
192
244
  # 确定输出文件名
193
245
  if not output:
194
246
  # 从文档中获取标题作为文件名
195
247
  title = doc.get("info", {}).get("title", "swagger")
196
- # 清理文件名
197
- safe_title = "".join(c if c.isalnum() or c in "-_" else "_" for c in title)
248
+ # 清理文件名(支持中文)
249
+ safe_title = _sanitize_filename(title)
198
250
  output = f"{safe_title}.json"
199
251
 
200
252
  # 保存文档
201
- output_path = Path(output)
253
+ output_path = Path(output_dir) / output
254
+ output_path.parent.mkdir(parents=True, exist_ok=True)
202
255
  with open(output_path, "w", encoding="utf-8") as f:
203
256
  json.dump(doc, f, ensure_ascii=False, indent=2)
204
257
 
@@ -212,10 +265,13 @@ def _save_single_doc(doc: dict, output: str | None) -> None:
212
265
  print(f" uv run df-test gen from-swagger {output_path.name}")
213
266
 
214
267
 
215
- def _save_multiple_docs(docs: list[dict], output: str | None) -> None:
268
+ def _save_multiple_docs(docs: list[dict], output: str | None, output_dir: str = ".") -> None:
216
269
  """保存多个分组文档(Knife4j 多分组模式)"""
217
270
  print(f"\n📦 检测到 Knife4j 多分组模式,共 {len(docs)} 个分组")
218
271
 
272
+ out_dir = Path(output_dir)
273
+ out_dir.mkdir(parents=True, exist_ok=True)
274
+
219
275
  saved_files = []
220
276
  for doc in docs:
221
277
  group_name = doc.pop("_group_name", "unknown")
@@ -226,21 +282,21 @@ def _save_multiple_docs(docs: list[dict], output: str | None) -> None:
226
282
  # 用户指定了输出,添加分组后缀
227
283
  base_name = Path(output).stem
228
284
  suffix = Path(output).suffix or ".json"
229
- safe_group = "".join(c if c.isalnum() or c in "-_" else "_" for c in group_name)
285
+ safe_group = _sanitize_filename(group_name)
230
286
  file_name = f"{base_name}_{safe_group}{suffix}"
231
287
  else:
232
288
  # 使用分组名作为文件名
233
- safe_group = "".join(c if c.isalnum() or c in "-_" else "_" for c in group_name)
289
+ safe_group = _sanitize_filename(group_name)
234
290
  file_name = f"{safe_group}.json"
235
291
 
236
- output_path = Path(file_name)
292
+ output_path = out_dir / file_name
237
293
  with open(output_path, "w", encoding="utf-8") as f:
238
294
  json.dump(doc, f, ensure_ascii=False, indent=2)
239
295
 
240
296
  saved_files.append((output_path, group_name, len(doc.get("paths", {}))))
241
297
  print(f" ✅ {output_path.name} ({len(doc.get('paths', {}))} 个接口)")
242
298
 
243
- print(f"\n📁 已保存 {len(saved_files)} 个文件")
299
+ print(f"\n📁 已保存 {len(saved_files)} 个文件到: {out_dir.absolute()}")
244
300
 
245
301
  # 提示使用方法
246
302
  print("\n🚀 使用方法:")
@@ -249,11 +305,6 @@ def _save_multiple_docs(docs: list[dict], output: str | None) -> None:
249
305
 
250
306
 
251
307
  if __name__ == "__main__":
252
- if len(sys.argv) < 2:
253
- print(__doc__)
254
- sys.exit(0)
255
-
256
- url = sys.argv[1]
257
- output = sys.argv[2] if len(sys.argv) > 2 else None
258
-
259
- fetch_swagger(url, output)
308
+ args = parse_args()
309
+ custom_headers = _parse_headers(args.header)
310
+ fetch_swagger(args.url, args.output, headers=custom_headers, output_dir=args.output_dir)
@@ -144,7 +144,7 @@ v3.18.1 特性:
144
144
  - 🔄 Unit of Work 模式支持(v3.7)
145
145
  """
146
146
 
147
- __version__ = "4.1.0"
147
+ __version__ = "4.1.1"
148
148
  __author__ = "DF QA Team"
149
149
 
150
150
  # ==============================================================================
@@ -246,6 +246,7 @@ from .capabilities.drivers.web import (
246
246
  AsyncAppActions,
247
247
  AsyncBasePage,
248
248
  AsyncBrowserManager,
249
+ AsyncBrowserPool,
249
250
  BasePage,
250
251
  BrowserManager,
251
252
  # 工具类
@@ -598,6 +599,7 @@ __all__ = [
598
599
  "AsyncAppActions", # v4.0.0 异步
599
600
  "AsyncBasePage", # v4.0.0 异步
600
601
  "AsyncBrowserManager", # v4.0.0 异步
602
+ "AsyncBrowserPool", # 浏览器实例池
601
603
  "AppActions", # 同步兼容
602
604
  "BasePage", # 同步兼容
603
605
  "BrowserManager", # 同步兼容
@@ -18,6 +18,7 @@ class Response:
18
18
  headers: dict[str, str]
19
19
  body: str
20
20
  json_data: dict[str, Any] | None = None
21
+ elapsed: float = 0.0 # 请求耗时(秒),默认 0.0 保持向后兼容
21
22
 
22
23
  # 继承request的context
23
24
  context: dict[str, Any] = field(default_factory=dict)
@@ -47,6 +48,32 @@ class Response:
47
48
  """
48
49
  return self.context.get(key, default)
49
50
 
51
+ @property
52
+ def text(self) -> str:
53
+ """响应文本(兼容 httpx.Response.text)"""
54
+ return self.body
55
+
56
+ def json(self) -> dict[str, Any] | None:
57
+ """获取 JSON 数据(兼容 httpx.Response.json())"""
58
+ if self.json_data is not None:
59
+ return self.json_data
60
+ if self.body:
61
+ import json as _json
62
+
63
+ return _json.loads(self.body)
64
+ return None
65
+
66
+ def raise_for_status(self) -> None:
67
+ """状态码非 2xx 时抛出异常(兼容 httpx.Response.raise_for_status())"""
68
+ if self.is_client_error or self.is_server_error:
69
+ from df_test_framework.core.exceptions import HttpError
70
+
71
+ raise HttpError(
72
+ message=f"HTTP {self.status_code}",
73
+ status_code=self.status_code,
74
+ response_body=self.body,
75
+ )
76
+
50
77
  @property
51
78
  def is_success(self) -> bool:
52
79
  """是否成功(2xx)"""
@@ -57,6 +57,8 @@ v3.17.0 重构:
57
57
  from __future__ import annotations
58
58
 
59
59
  import re
60
+ import time
61
+ from dataclasses import replace
60
62
  from typing import TYPE_CHECKING, Any
61
63
 
62
64
  import httpx
@@ -71,6 +73,7 @@ from df_test_framework.capabilities.clients.http.middleware import (
71
73
  MiddlewareFactory,
72
74
  PathFilteredMiddleware,
73
75
  )
76
+ from df_test_framework.core.exceptions import HttpError
74
77
  from df_test_framework.core.middleware import (
75
78
  Middleware,
76
79
  MiddlewareChain,
@@ -320,8 +323,27 @@ class AsyncHttpClient:
320
323
  if request.data is not None:
321
324
  params["data"] = request.data
322
325
 
323
- httpx_response = await self.client.request(request.method, request.url, **params)
324
- return self._parse_response(httpx_response)
326
+ try:
327
+ start_time = time.monotonic()
328
+ httpx_response = await self.client.request(request.method, request.url, **params)
329
+ elapsed = time.monotonic() - start_time
330
+ response = self._parse_response(httpx_response)
331
+ return replace(response, elapsed=elapsed)
332
+ except httpx.TimeoutException as e:
333
+ raise HttpError(
334
+ message=f"请求超时: {request.method} {request.url}",
335
+ details={"original_error": type(e).__name__, "url": request.url},
336
+ ) from e
337
+ except httpx.ConnectError as e:
338
+ raise HttpError(
339
+ message=f"连接失败: {request.method} {request.url}",
340
+ details={"original_error": type(e).__name__, "url": request.url},
341
+ ) from e
342
+ except httpx.HTTPError as e:
343
+ raise HttpError(
344
+ message=f"HTTP错误: {request.method} {request.url}",
345
+ details={"original_error": type(e).__name__, "url": request.url},
346
+ ) from e
325
347
 
326
348
  # ==================== 核心请求方法 ====================
327
349