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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/CHANGELOG.md +43 -0
  2. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/CLAUDE.md +24 -2
  3. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/PKG-INFO +1 -1
  4. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/drivers.md +32 -24
  5. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/auth_session_guide.md +4 -4
  6. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/fixtures_guide.md +21 -17
  7. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/web-ui-testing.md +53 -16
  8. df_test_framework-4.1.0/docs/releases/v4.0.4.md +135 -0
  9. df_test_framework-4.1.0/docs/releases/v4.1.0.md +187 -0
  10. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/pyproject.toml +3 -4
  11. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/__init__.py +3 -1
  12. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +73 -65
  13. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +76 -71
  14. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/full_conftest.py +10 -4
  15. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +3 -4
  16. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +10 -4
  17. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -2
  18. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/actions_class.py +13 -7
  19. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/__init__.py +1 -4
  20. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/auth.py +76 -11
  21. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/core.py +7 -3
  22. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/ui.py +112 -180
  23. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/__init__.py +2 -0
  24. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_ui_fixtures.py +248 -82
  25. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/uv.lock +1 -1
  26. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.editorconfig +0 -0
  27. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.env.example +0 -0
  28. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.gitattributes +0 -0
  29. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/README.md +0 -0
  30. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/lint.yml +0 -0
  31. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/release.yml +0 -0
  32. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/scheduled.yml +0 -0
  33. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/security.yml +0 -0
  34. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.github/workflows/test.yml +0 -0
  35. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.gitignore +0 -0
  36. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.gitleaks.toml +0 -0
  37. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.gitleaksignore +0 -0
  38. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.pre-commit-config.yaml +0 -0
  39. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/.python-version +0 -0
  40. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/CONTRIBUTING.md +0 -0
  41. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/README.md +0 -0
  42. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/README_PYPI.md +0 -0
  43. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
  44. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
  45. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/ESSENTIAL_DOCS.md +0 -0
  46. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/FAQ.md +0 -0
  47. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/LEARNING_PATH.md +0 -0
  48. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/README.md +0 -0
  49. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/README.md +0 -0
  50. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/clients.md +0 -0
  51. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/README.md +0 -0
  52. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/context.md +0 -0
  53. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/events.md +0 -0
  54. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/exceptions.md +0 -0
  55. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/middleware.md +0 -0
  56. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/protocols.md +0 -0
  57. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core/types.md +0 -0
  58. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/core.md +0 -0
  59. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/databases.md +0 -0
  60. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/extensions.md +0 -0
  61. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/infrastructure.md +0 -0
  62. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/patterns.md +0 -0
  63. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/api-reference/testing.md +0 -0
  64. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
  65. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
  66. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
  67. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/README.md +0 -0
  68. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
  69. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/README.md +0 -0
  70. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
  71. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
  72. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
  73. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
  74. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
  75. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
  76. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
  77. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
  78. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
  79. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
  80. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
  81. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
  82. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
  83. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
  84. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
  85. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
  86. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
  87. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
  88. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
  89. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
  90. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
  91. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
  92. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/v3_final_draft.md +0 -0
  93. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
  94. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
  95. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
  96. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
  97. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
  98. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
  99. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
  100. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/overview.md +0 -0
  101. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
  102. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/extension-points.md +0 -0
  103. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
  104. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/multi-project-reuse.md +0 -0
  105. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/observability-architecture.md +0 -0
  106. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture/test-type-support.md +0 -0
  107. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/architecture//344/272/224/345/261/202/346/236/266/346/236/204/350/257/246/350/247/243.md" +0 -0
  108. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/README.md +0 -0
  109. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
  110. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
  111. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
  112. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
  113. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
  114. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
  115. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
  116. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
  117. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
  118. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/README.md +0 -0
  119. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
  120. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
  121. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
  122. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
  123. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
  124. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
  125. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
  126. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
  127. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
  128. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
  129. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
  130. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
  131. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
  132. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
  133. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
  134. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
  135. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/observability-config-design.md +0 -0
  136. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
  137. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
  138. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
  139. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
  140. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
  141. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
  142. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
  143. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
  144. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/async_database_guide.md +0 -0
  145. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/async_http_client.md +0 -0
  146. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
  147. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/logging_configuration.md +0 -0
  148. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
  149. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
  150. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/guides/repository_uow_guide.md +0 -0
  151. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/111.md +0 -0
  152. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
  153. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
  154. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
  155. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
  156. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
  157. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
  158. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
  159. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
  160. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
  161. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
  162. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/README.md +0 -0
  163. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
  164. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
  165. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/issues/README.md +0 -0
  166. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/issues/summary.md +0 -0
  167. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/issues/v1.md +0 -0
  168. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/migration/README.md +0 -0
  169. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
  170. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
  171. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
  172. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
  173. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
  174. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
  175. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
  176. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
  177. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
  178. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
  179. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
  180. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
  181. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
  182. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
  183. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
  184. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
  185. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
  186. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
  187. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
  188. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
  189. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
  190. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
  191. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
  192. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
  193. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
  194. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
  195. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
  196. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
  197. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
  198. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
  199. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
  200. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
  201. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
  202. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
  203. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/user-guide/extensions.md +0 -0
  204. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/user-guide/ui-testing.md +0 -0
  205. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/BaseAPI/346/234/200/344/275/263/345/256/236/350/267/265/346/214/207/345/215/227.md" +0 -0
  206. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
  207. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/README.md +0 -0
  208. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
  209. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/architecture.md +0 -0
  210. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/best-practices.md +0 -0
  211. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/config-integration-guide.md +0 -0
  212. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/optimization-report.md +0 -0
  213. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1/publishing.md +0 -0
  214. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/v1//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251/346/265/213/350/257/225/346/241/206/346/236/266.md" +0 -0
  215. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
  216. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
  217. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/ci-templates/README.md +0 -0
  218. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/ci-templates/github-actions.yml +0 -0
  219. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/ci-templates/gitlab-ci.yml +0 -0
  220. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
  221. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
  222. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/development/RELEASE.md +0 -0
  223. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
  224. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/development/local-development.md +0 -0
  225. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
  226. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/allure_plugin.md +0 -0
  227. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/assertions_guide.md +0 -0
  228. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/async_api_guide.md +0 -0
  229. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/bootstrap_guide.md +0 -0
  230. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/config_guide.md +0 -0
  231. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/database_guide.md +0 -0
  232. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/decorators_guide.md +0 -0
  233. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/distributed_tracing.md +0 -0
  234. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/event_bus_guide.md +0 -0
  235. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/extensions.md +0 -0
  236. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/factory_guide.md +0 -0
  237. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/graphql_client.md +0 -0
  238. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/grpc_client.md +0 -0
  239. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/http_client_guide.md +0 -0
  240. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/integration-guide.md +0 -0
  241. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/local_debug_quickstart.md +0 -0
  242. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/logging_guide.md +0 -0
  243. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/message_queue.md +0 -0
  244. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/middleware_guide.md +0 -0
  245. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/mocking.md +0 -0
  246. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/monitoring_plugin.md +0 -0
  247. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/openapi_guide.md +0 -0
  248. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/plugins_guide.md +0 -0
  249. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/prometheus_metrics.md +0 -0
  250. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/redis_guide.md +0 -0
  251. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/resilience_guide.md +0 -0
  252. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/sanitize_guide.md +0 -0
  253. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/scaffold_cli_guide.md +0 -0
  254. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/storage.md +0 -0
  255. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/telemetry_guide.md +0 -0
  256. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/test_data.md +0 -0
  257. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/test_data_cleanup.md +0 -0
  258. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/guides/testing-development.md +0 -0
  259. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/migration/README.md +0 -0
  260. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/migration/v3-to-v4.md +0 -0
  261. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/README.md +0 -0
  262. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.0.0-alpha.md +0 -0
  263. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.1.0.md +0 -0
  264. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.10.0.md +0 -0
  265. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.11.0.md +0 -0
  266. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.11.1.md +0 -0
  267. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.12.0.md +0 -0
  268. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.12.1.md +0 -0
  269. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.13.0.md +0 -0
  270. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.14.0.md +0 -0
  271. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.14.0_completion_report.md +0 -0
  272. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
  273. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.16.0.md +0 -0
  274. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.17.0.md +0 -0
  275. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.17.1.md +0 -0
  276. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.17.2.md +0 -0
  277. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.18.0.md +0 -0
  278. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.18.1-bugfix.md +0 -0
  279. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.18.1.md +0 -0
  280. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.19.0.md +0 -0
  281. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.2.0.md +0 -0
  282. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.20.0.md +0 -0
  283. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.21.0.md +0 -0
  284. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.22.0.md +0 -0
  285. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.22.1.md +0 -0
  286. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.23.0.md +0 -0
  287. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.24.0.md +0 -0
  288. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.25.0.md +0 -0
  289. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.26.0.md +0 -0
  290. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.27.0.md +0 -0
  291. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.28.0.md +0 -0
  292. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.28.1.md +0 -0
  293. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.29.0.md +0 -0
  294. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.3.0.md +0 -0
  295. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.30.0.md +0 -0
  296. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.31.0.md +0 -0
  297. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.32.0.md +0 -0
  298. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.33.0.md +0 -0
  299. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.34.0.md +0 -0
  300. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.34.1.md +0 -0
  301. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.0.md +0 -0
  302. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.1.md +0 -0
  303. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.2.md +0 -0
  304. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.3.md +0 -0
  305. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.4.md +0 -0
  306. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.5.md +0 -0
  307. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.6.md +0 -0
  308. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.35.7.md +0 -0
  309. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.36.0.md +0 -0
  310. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.36.1.md +0 -0
  311. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.37.0.md +0 -0
  312. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.0.md +0 -0
  313. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.10.md +0 -0
  314. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.2.md +0 -0
  315. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.4.md +0 -0
  316. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.5.md +0 -0
  317. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.7.md +0 -0
  318. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.8.md +0 -0
  319. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.38.9.md +0 -0
  320. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.39.0.md +0 -0
  321. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.39.1.md +0 -0
  322. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.4.0.md +0 -0
  323. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.40.0.md +0 -0
  324. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.41.0.md +0 -0
  325. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.41.1.md +0 -0
  326. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.42.0.md +0 -0
  327. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.43.0.md +0 -0
  328. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.44.0.md +0 -0
  329. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.45.0.md +0 -0
  330. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.46.1.md +0 -0
  331. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.46.2.md +0 -0
  332. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.46.3.md +0 -0
  333. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.5.0.md +0 -0
  334. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.6.0.md +0 -0
  335. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.6.1.md +0 -0
  336. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.6.2.md +0 -0
  337. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.7.0.md +0 -0
  338. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.8.0.md +0 -0
  339. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v3.9.0.md +0 -0
  340. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v4.0.0.md +0 -0
  341. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v4.0.1.md +0 -0
  342. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v4.0.2.md +0 -0
  343. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/releases/v4.0.3.md +0 -0
  344. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/skills/write-code.zip +0 -0
  345. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/skills/write-test.zip +0 -0
  346. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/troubleshooting/README.md +0 -0
  347. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/troubleshooting/common-errors.md +0 -0
  348. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/troubleshooting/debugging-guide.md +0 -0
  349. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
  350. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
  351. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/QUICK_START.md +0 -0
  352. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/README.md +0 -0
  353. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/USER_MANUAL.md +0 -0
  354. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
  355. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/ci-cd.md +0 -0
  356. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/code-generation.md +0 -0
  357. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/configuration.md +0 -0
  358. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/cross-project-sharing.md +0 -0
  359. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/debugging.md +0 -0
  360. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/examples.md +0 -0
  361. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/multi-repo.md +0 -0
  362. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/nested-settings-guide.md +0 -0
  363. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/docs/user-guide/security-best-practices.md +0 -0
  364. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/01-basic/README.md +0 -0
  365. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/01-basic/database_operations.py +0 -0
  366. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/01-basic/http_client_usage.py +0 -0
  367. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/01-basic/redis_cache.py +0 -0
  368. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/01-basic/storage_usage.py +0 -0
  369. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/02-bootstrap/README.md +0 -0
  370. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/02-bootstrap/custom_providers.py +0 -0
  371. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/02-bootstrap/custom_settings.py +0 -0
  372. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
  373. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/02-bootstrap/with_extensions.py +0 -0
  374. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/03-testing/README.md +0 -0
  375. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/03-testing/conftest.py +0 -0
  376. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/03-testing/test_api.py +0 -0
  377. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/03-testing/test_database.py +0 -0
  378. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/03-testing/test_with_fixtures.py +0 -0
  379. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/04-patterns/README.md +0 -0
  380. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/04-patterns/builder_pattern.py +0 -0
  381. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/04-patterns/combined_patterns.py +0 -0
  382. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/04-patterns/repository_pattern.py +0 -0
  383. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/README.md +0 -0
  384. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
  385. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/custom_extension.py +0 -0
  386. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/data_factory_extension.py +0 -0
  387. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/environment_validator_extension.py +0 -0
  388. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/monitoring_extension.py +0 -0
  389. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
  390. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/05-extensions/notification_extension.py +0 -0
  391. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/06-ui-testing/README.md +0 -0
  392. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
  393. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/06-ui-testing/conftest.py +0 -0
  394. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/06-ui-testing/page_object_example.py +0 -0
  395. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/README.md +0 -0
  396. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
  397. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
  398. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
  399. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/kafka_basic.py +0 -0
  400. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/kafka_ssl.py +0 -0
  401. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
  402. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
  403. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
  404. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
  405. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
  406. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
  407. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
  408. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-v35-features/04_observability.py +0 -0
  409. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/07-v35-features/README.md +0 -0
  410. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
  411. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/02_repository_v37.py +0 -0
  412. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
  413. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
  414. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/05_project_uow.py +0 -0
  415. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
  416. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/08-v37-features/README.md +0 -0
  417. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/examples/README.md +0 -0
  418. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/scripts/fetch_swagger.py +0 -0
  419. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/scripts/security-scan.bat +0 -0
  420. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/scripts/security-scan.sh +0 -0
  421. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
  422. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
  423. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/providers.py +0 -0
  424. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/bootstrap/runtime.py +0 -0
  425. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/__init__.py +0 -0
  426. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
  427. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
  428. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
  429. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
  430. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
  431. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
  432. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
  433. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
  434. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
  435. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
  436. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
  437. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
  438. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
  439. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
  440. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
  441. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
  442. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
  443. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
  444. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
  445. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
  446. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
  447. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
  448. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
  449. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
  450. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
  451. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
  452. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
  453. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
  454. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
  455. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
  456. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
  457. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
  458. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
  459. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
  460. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
  461. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
  462. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
  463. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
  464. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
  465. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
  466. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
  467. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
  468. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
  469. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
  470. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
  471. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
  472. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
  473. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
  474. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
  475. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
  476. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
  477. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
  478. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
  479. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
  480. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
  481. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
  482. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
  483. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
  484. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
  485. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
  486. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
  487. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
  488. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
  489. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
  490. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
  491. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
  492. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
  493. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
  494. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
  495. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
  496. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
  497. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
  498. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
  499. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
  500. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
  501. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
  502. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
  503. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
  504. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
  505. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
  506. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
  507. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
  508. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
  509. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
  510. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
  511. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
  512. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
  513. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
  514. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
  515. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
  516. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
  517. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
  518. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
  519. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
  520. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/__init__.py +0 -0
  521. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/__main__.py +0 -0
  522. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
  523. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
  524. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/env.py +0 -0
  525. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
  526. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
  527. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
  528. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
  529. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
  530. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
  531. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
  532. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/main.py +0 -0
  533. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/__init__.py +0 -0
  534. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
  535. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
  536. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
  537. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
  538. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
  539. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
  540. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
  541. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
  542. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
  543. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
  544. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
  545. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
  546. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
  547. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
  548. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
  549. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
  550. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
  551. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
  552. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
  553. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
  554. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
  555. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
  556. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
  557. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
  558. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
  559. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
  560. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
  561. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
  562. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
  563. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
  564. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
  565. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
  566. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
  567. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
  568. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
  569. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
  570. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
  571. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
  572. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
  573. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
  574. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
  575. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
  576. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
  577. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
  578. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
  579. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
  580. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
  581. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
  582. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
  583. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
  584. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
  585. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
  586. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
  587. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/cli/utils.py +0 -0
  588. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/__init__.py +0 -0
  589. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/context/__init__.py +0 -0
  590. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/context/execution.py +0 -0
  591. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/context/propagation.py +0 -0
  592. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/decorators.py +0 -0
  593. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/events/__init__.py +0 -0
  594. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/events/types.py +0 -0
  595. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/exceptions.py +0 -0
  596. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
  597. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/base.py +0 -0
  598. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/chain.py +0 -0
  599. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
  600. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
  601. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/models/__init__.py +0 -0
  602. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/models/base.py +0 -0
  603. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
  604. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/client.py +0 -0
  605. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/event.py +0 -0
  606. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
  607. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/repository.py +0 -0
  608. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
  609. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/core/types.py +0 -0
  610. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
  611. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
  612. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
  613. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
  614. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
  615. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/schema.py +0 -0
  616. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
  617. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
  618. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
  619. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
  620. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
  621. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
  622. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
  623. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
  624. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
  625. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
  626. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
  627. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
  628. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
  629. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
  630. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
  631. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
  632. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
  633. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
  634. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
  635. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
  636. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
  637. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
  638. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
  639. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
  640. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
  641. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
  642. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
  643. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
  644. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
  645. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
  646. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
  647. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
  648. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
  649. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
  650. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
  651. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
  652. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
  653. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
  654. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
  655. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
  656. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
  657. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
  658. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
  659. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
  660. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/__init__.py +0 -0
  661. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
  662. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
  663. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
  664. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
  665. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
  666. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/__init__.py +0 -0
  667. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
  668. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
  669. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
  670. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
  671. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/assertions/response.py +0 -0
  672. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/__init__.py +0 -0
  673. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
  674. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
  675. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
  676. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
  677. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
  678. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
  679. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
  680. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
  681. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
  682. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
  683. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
  684. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
  685. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
  686. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/debugging/console.py +0 -0
  687. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/__init__.py +0 -0
  688. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/decorators/api_class.py +0 -0
  689. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
  690. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
  691. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
  692. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
  693. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
  694. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
  695. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
  696. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
  697. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
  698. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
  699. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
  700. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
  701. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
  702. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
  703. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
  704. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
  705. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
  706. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
  707. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
  708. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
  709. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/README.md +0 -0
  710. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/bootstrap/__init__.py +0 -0
  711. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/bootstrap/test_bootstrap.py +0 -0
  712. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/bootstrap/test_providers.py +0 -0
  713. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/bootstrap/test_runtime.py +0 -0
  714. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/__init__.py +0 -0
  715. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
  716. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
  717. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
  718. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
  719. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
  720. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
  721. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
  722. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
  723. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
  724. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
  725. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
  726. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
  727. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
  728. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
  729. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
  730. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
  731. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
  732. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
  733. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
  734. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
  735. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
  736. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
  737. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
  738. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
  739. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
  740. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_async_database.py +0 -0
  741. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_database.py +0 -0
  742. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_database_factory.py +0 -0
  743. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_query_builder.py +0 -0
  744. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_repositories.py +0 -0
  745. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/databases/test_uow.py +0 -0
  746. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
  747. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
  748. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/messengers/__init__.py +0 -0
  749. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
  750. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
  751. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
  752. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/storages/__init__.py +0 -0
  753. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/storages/test_local_file.py +0 -0
  754. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/storages/test_oss.py +0 -0
  755. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/capabilities/storages/test_s3.py +0 -0
  756. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/__init__.py +0 -0
  757. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_env_cmd.py +0 -0
  758. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_generate_cmd.py +0 -0
  759. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_init_cmd.py +0 -0
  760. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_interactive_cmd.py +0 -0
  761. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_main.py +0 -0
  762. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/cli/test_utils.py +0 -0
  763. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/conftest.py +0 -0
  764. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/protocols/test_client.py +0 -0
  765. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/protocols/test_event.py +0 -0
  766. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/protocols/test_plugin.py +0 -0
  767. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/protocols/test_repository.py +0 -0
  768. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/protocols/test_telemetry.py +0 -0
  769. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_context.py +0 -0
  770. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_decorators.py +0 -0
  771. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_event_types.py +0 -0
  772. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_events.py +0 -0
  773. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_middleware.py +0 -0
  774. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/core/test_types.py +0 -0
  775. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/__init__.py +0 -0
  776. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/config/test_loader.py +0 -0
  777. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
  778. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/context/test_carriers.py +0 -0
  779. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/events/__init__.py +0 -0
  780. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/events/test_bus.py +0 -0
  781. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/__init__.py +0 -0
  782. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
  783. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_manager.py +0 -0
  784. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_observer.py +0 -0
  785. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_performance.py +0 -0
  786. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_registry.py +0 -0
  787. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/metrics/test_types.py +0 -0
  788. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/plugins/test_manager.py +0 -0
  789. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/resilience/__init__.py +0 -0
  790. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
  791. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/sanitize/__init__.py +0 -0
  792. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/sanitize/test_service.py +0 -0
  793. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/__init__.py +0 -0
  794. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
  795. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
  796. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_bootstrap.py +0 -0
  797. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_logging.py +0 -0
  798. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_pipeline.py +0 -0
  799. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_runtime.py +0 -0
  800. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_settings.py +0 -0
  801. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/test_sources.py +0 -0
  802. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/__init__.py +0 -0
  803. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_context.py +0 -0
  804. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
  805. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
  806. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
  807. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
  808. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/infrastructure/tracing/test_manager.py +0 -0
  809. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/integration/__init__.py +0 -0
  810. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/integration/test_config_environment.py +0 -0
  811. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/integration/test_event_observability.py +0 -0
  812. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/integration/test_factory_assertions.py +0 -0
  813. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/integration/test_middleware_chain.py +0 -0
  814. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/migration/__init__.py +0 -0
  815. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
  816. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/plugins/__init__.py +0 -0
  817. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/plugins/builtin/__init__.py +0 -0
  818. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
  819. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
  820. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/test_json_to_model_generator.py +0 -0
  821. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/assertions/__init__.py +0 -0
  822. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/assertions/test_json_schema.py +0 -0
  823. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/assertions/test_matchers.py +0 -0
  824. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/data/__init__.py +0 -0
  825. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/data/test_builders.py +0 -0
  826. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/data/test_data_generator.py +0 -0
  827. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/data/test_factories.py +0 -0
  828. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/debugging/__init__.py +0 -0
  829. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
  830. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/decorators/__init__.py +0 -0
  831. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/decorators/test_actions_class.py +0 -0
  832. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/decorators/test_api_class.py +0 -0
  833. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/__init__.py +0 -0
  834. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_cleanup.py +0 -0
  835. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
  836. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
  837. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
  838. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
  839. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
  840. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/mocking/__init__.py +0 -0
  841. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/mocking/test_database_mock.py +0 -0
  842. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/mocking/test_http_mock.py +0 -0
  843. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/mocking/test_redis_mock.py +0 -0
  844. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/mocking/test_time_mock.py +0 -0
  845. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
  846. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
  847. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/plugins/test_env_plugin.py +0 -0
  848. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
  849. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/plugins/test_markers.py +0 -0
  850. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/reporting/test_allure_observer.py +0 -0
  851. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/test_allure_helper.py +0 -0
  852. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/test_assertions.py +0 -0
  853. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/test_data_loaders.py +0 -0
  854. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/tests/testing/test_factories_presets.py +0 -0
  855. {df_test_framework-4.0.3 → df_test_framework-4.1.0}/verify_fixes.py +0 -0
@@ -5,6 +5,49 @@
5
5
  格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
6
6
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
7
7
 
8
+ ## [4.1.0] - 2026-03-03
9
+
10
+ ### ✨ 新增功能
11
+
12
+ - 🚀 **Browser Session 复用**: `browser_manager`/`browser` 提升为 session scope,整个测试会话只启动一次浏览器,启动时间减少 90%+
13
+ - 🔒 **Context/Page 每测试隔离**: `context`/`page` 保持 function scope,每个测试独立的 BrowserContext,对齐 Playwright 官方最佳实践
14
+ - 🆕 **BrowserManager.new_context()**: 新增方法,创建带配置的隔离 BrowserContext(viewport、storageState、video 等)
15
+ - ⚡ **per-fixture loop_scope**: 异步 session fixtures 使用 `@pytest_asyncio.fixture(loop_scope="session")` 精确控制事件循环
16
+
17
+ ### 🔄 架构变更
18
+
19
+ - 📦 **BrowserManager 精简**: `start()` 只创建 playwright + browser,不再创建 context/page;移除 `_context`、`_page` 属性
20
+ - 📦 **storageState 下沉**: 认证状态注入从 BrowserManager 移至 context fixture,更符合 Playwright 设计(auth 是 context 级别关注点)
21
+ - 📦 **actions_class test_runtime**: `@actions_class()` 生成的 fixture 新增 `test_runtime` 参数,实现事件隔离
22
+ - 🗑️ **移除 ui_manager**: `ui_manager`/`async_ui_manager` fixture alias 已移除(browser_manager 不再持有 context/page)
23
+
24
+ ### 📚 文档
25
+
26
+ - 📝 **Web UI 测试手册**: 更新 fixture scope 表、storageState 注入流程
27
+ - 📝 **Fixtures 使用指南**: 更新 browser/browser_manager scope 说明和速查表
28
+ - 📝 **Drivers API 参考**: 更新 BrowserManager API(new_context、start/stop)
29
+ - 📝 **认证指南**: 更新 storageState 注入描述
30
+
31
+ **详细内容**: 查看完整发布说明 [v4.1.0.md](docs/releases/v4.1.0.md)
32
+
33
+ ---
34
+
35
+ ## [4.0.4] - 2026-03-02
36
+
37
+ ### ✨ 新增功能
38
+
39
+ - 🔧 **AuthSetup pytest_config 支持**: `AuthSetup` / `AsyncAuthSetup` 新增 `pytest_config` 参数,自动读取 `--headed`/`--browser`/`--slowmo` CLI 参数
40
+ - 🔒 **User-Agent 一致性**: 确保 auth 浏览器与测试浏览器模式一致,避免认证状态因 User-Agent 不匹配而失效
41
+
42
+ ### 📚 文档
43
+
44
+ - 📝 **Web UI 测试手册**: 更新认证状态管理章节,新增 `pytest_config` 说明和配置优先级
45
+ - 📝 **脚手架模板**: 更新 ui/full 项目模板的 storage_state 示例
46
+
47
+ **详细内容**: 查看完整发布说明 [v4.0.4.md](docs/releases/v4.0.4.md)
48
+
49
+ ---
50
+
8
51
  ## [4.0.3] - 2026-03-01
9
52
 
10
53
  ### ✨ 新增功能
@@ -122,11 +122,33 @@ def test_login(self): ...
122
122
 
123
123
  ## 版本发布
124
124
 
125
- **每次发布必须更新**:
126
- 1. `pyproject.toml` + `__init__.py` 版本号
125
+ 发布新版本时,严格按以下顺序执行:
126
+
127
+ ### Step 1: 更新文件
128
+
129
+ 1. `pyproject.toml` + `src/df_test_framework/__init__.py` 版本号
127
130
  2. `CHANGELOG.md` - 简洁摘要
128
131
  3. `docs/releases/vX.X.X.md` - 详细发布说明
129
132
  4. `docs/guides/xxx.md` - 功能使用指南(如有新功能)
133
+ 5. `cli/templates/` - 脚手架模板(如有影响)
134
+
135
+ ### Step 2: 代码质量检查(必须全部通过)
136
+
137
+ ```bash
138
+ uv run ruff check --fix src/ tests/ # lint 检查
139
+ uv run ruff format src/ tests/ # 格式化
140
+ uv run pytest -v --ignore=tests/test_messengers/ # 测试(排除 MQ)
141
+ ```
142
+
143
+ 如果有格式化改动,合并到发布 commit 中。
144
+
145
+ ### Step 3: 提交发布
146
+
147
+ ```bash
148
+ git add <相关文件>
149
+ git commit -m "chore(release): 发布 vX.X.X 版本"
150
+ git push origin master
151
+ ```
130
152
 
131
153
  **Commit Message**: `<type>(<scope>): <subject>`
132
154
  - Type: feat/fix/docs/test/refactor/chore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: df-test-framework
3
- Version: 4.0.3
3
+ Version: 4.1.0
4
4
  Summary: 基于交互模式的现代化测试自动化框架,支持多种测试场景
5
5
  Project-URL: Homepage, https://github.com/yourorg/df-test-framework
6
6
  Project-URL: Repository, https://github.com/yourorg/df-test-framework
@@ -77,16 +77,17 @@ from df_test_framework.drivers.web.playwright import (
77
77
  from df_test_framework import BrowserManager, BrowserType
78
78
 
79
79
  # 创建浏览器管理器
80
- browser_mgr = BrowserManager(
80
+ manager = BrowserManager(
81
81
  browser_type=BrowserType.CHROMIUM,
82
82
  headless=False
83
83
  )
84
84
 
85
- # 启动浏览器
86
- browser_mgr.start()
85
+ # 启动浏览器(v4.1.0: 只创建 playwright + browser)
86
+ manager.start()
87
87
 
88
- # 创建页面
89
- page = browser_mgr.new_page()
88
+ # 创建隔离的上下文和页面
89
+ ctx = manager.new_context()
90
+ page = ctx.new_page()
90
91
  page.goto("https://example.com")
91
92
 
92
93
  # 操作页面
@@ -96,35 +97,38 @@ page.click("button[type='submit']")
96
97
  # 截图
97
98
  page.screenshot(path="screenshot.png")
98
99
 
99
- # 关闭浏览器
100
- browser_mgr.close()
100
+ # 关闭资源
101
+ page.close()
102
+ ctx.close()
103
+ manager.stop()
101
104
  ```
102
105
 
103
106
  ### 核心方法
104
107
 
105
108
  #### 生命周期管理
106
- - `start()` - 启动浏览器
107
- - `close()` - 关闭浏览器
108
- - `new_page()` - 创建新页面
109
- - `new_context(**kwargs)` - 创建新上下文
109
+ - `start()` - 启动 Playwright 进程和浏览器实例,返回 `Browser`
110
+ - `stop()` - 关闭浏览器并清理 Playwright 进程
111
+ - `new_context(storage_state=None, **extra_options)` - 创建隔离的浏览器上下文(v4.1.0)
110
112
 
111
- #### 页面管理
112
- - `get_page(index=0)` - 获取页面
113
- - `get_pages()` - 获取所有页面
114
- - `close_page(page)` - 关闭页面
113
+ #### 属性
114
+ - `browser` - 获取浏览器实例(只读,未启动时抛出 RuntimeError)
115
115
 
116
116
  ### 配置选项
117
117
 
118
118
  ```python
119
- browser_mgr = BrowserManager(
119
+ manager = BrowserManager(
120
120
  browser_type=BrowserType.CHROMIUM, # 浏览器类型
121
121
  headless=False, # 是否无头模式
122
122
  slow_mo=0, # 操作延迟(ms)
123
123
  viewport={"width": 1920, "height": 1080}, # 视口大小
124
- locale="zh-CN", # 语言
125
- timezone_id="Asia/Shanghai", # 时区
126
- storage_state="path/to/state.json", # storageState 认证状态(v4.0.3)
124
+ timeout=30000, # 默认超时时间(ms)
125
+ record_video="off", # 视频录制(off/on/on-failure)
126
+ video_dir="reports/videos", # 视频保存目录
127
127
  )
128
+
129
+ # v4.1.0: 创建带认证状态的上下文
130
+ ctx = manager.new_context(storage_state="path/to/state.json")
131
+ page = ctx.new_page()
128
132
  ```
129
133
 
130
134
  ---
@@ -366,14 +370,15 @@ class SearchResultsPage(BasePage):
366
370
  @pytest.fixture
367
371
  def browser():
368
372
  """浏览器fixture"""
369
- browser_mgr = BrowserManager(headless=True)
370
- browser_mgr.start()
371
- yield browser_mgr
372
- browser_mgr.close()
373
+ manager = BrowserManager(headless=True)
374
+ manager.start()
375
+ yield manager
376
+ manager.stop()
373
377
 
374
378
  def test_search_functionality(browser):
375
379
  """测试搜索功能"""
376
- page = browser.new_page()
380
+ ctx = browser.new_context()
381
+ page = ctx.new_page()
377
382
 
378
383
  # 访问首页
379
384
  home_page = HomePage(page)
@@ -388,6 +393,9 @@ def test_search_functionality(browser):
388
393
 
389
394
  # 截图
390
395
  results_page.screenshot("search_results.png")
396
+
397
+ page.close()
398
+ ctx.close()
391
399
  ```
392
400
 
393
401
  ---
@@ -1,8 +1,8 @@
1
1
  # 认证与 Session 管理指南
2
2
 
3
- > **版本要求**: df-test-framework >= 3.19.0(HTTP),>= 4.0.3(UI
4
- > **更新日期**: 2026-03-01
5
- > **最新版本**: v4.0.3
3
+ > **版本要求**: df-test-framework >= 3.19.0(HTTP),>= 4.0.3(UI),>= 4.1.0(Browser Session 复用)
4
+ > **更新日期**: 2026-03-03
5
+ > **最新版本**: v4.1.0
6
6
 
7
7
  ---
8
8
 
@@ -421,7 +421,7 @@ del http_client.client.cookies["JSESSIONID"]
421
421
  |------|------------------|-----------------|
422
422
  | **认证执行** | 框架自动调登录 API | 项目写登录逻辑(UI 流程多变) |
423
423
  | **状态缓存** | session 级别缓存 token | session 级别缓存 storageState JSON |
424
- | **状态注入** | 中间件注入 Authorization header | BrowserManager 注入 storage_state 到 context |
424
+ | **状态注入** | 中间件注入 Authorization header | context fixture 注入 storage_state 到 BrowserContext |
425
425
  | **跳过认证** | `skip_auth=True` | `browser.new_context()`(不带 storage_state) |
426
426
  | **多角色** | 多个 API 实例 | 多个 storage_state fixture |
427
427
 
@@ -1,6 +1,6 @@
1
1
  # Fixtures 使用指南
2
2
 
3
- > **最后更新**: 2026-01-17
3
+ > **最后更新**: 2026-03-03
4
4
  > **适用版本**: v3.0.0+
5
5
 
6
6
  ---
@@ -318,10 +318,10 @@ async def test_login(async_page):
318
318
 
319
319
  #### `browser` / `async_browser` - 浏览器实例
320
320
 
321
- **Scope**: `function`
322
- **版本**: v3.0.0+ / v4.0.0+
321
+ **Scope**: `session`
322
+ **版本**: v3.0.0+ / v4.0.0+(v4.1.0 提升为 session scope)
323
323
 
324
- Playwright 浏览器实例,用于获取浏览器信息或创建多个上下文。
324
+ Playwright 浏览器实例,整个测试会话共享。用于获取浏览器信息或创建多个上下文。
325
325
 
326
326
  ```python
327
327
  def test_browser_info(browser):
@@ -335,7 +335,7 @@ def test_browser_info(browser):
335
335
  **Scope**: `function`
336
336
  **版本**: v3.0.0+ / v4.0.0+
337
337
 
338
- 浏览器上下文,用于管理 cookies、存储等。
338
+ 浏览器上下文,每个测试独立隔离。v4.1.0 起自动注入 `storage_state` 认证状态。
339
339
 
340
340
  ```python
341
341
  def test_with_cookies(context):
@@ -352,20 +352,20 @@ def test_with_cookies(context):
352
352
 
353
353
  #### `browser_manager` / `async_browser_manager` - 浏览器管理器
354
354
 
355
- **Scope**: `function`
356
- **版本**: v3.0.0+ / v4.0.0+
355
+ **Scope**: `session`
356
+ **版本**: v3.0.0+ / v4.0.0+(v4.1.0 提升为 session scope)
357
357
 
358
- 完整的浏览器管理器,包含 browsercontextpage
358
+ 浏览器管理器,管理 Playwright 进程和浏览器实例。v4.1.0 起只管理 playwright + browser(session 级别复用),context/page 由独立 fixture 管理。
359
359
 
360
360
  ```python
361
361
  def test_with_manager(browser_manager):
362
362
  """使用浏览器管理器"""
363
- page = browser_manager.page
363
+ # 创建隔离的 context(通常由框架 fixture 自动完成)
364
+ ctx = browser_manager.new_context()
365
+ page = ctx.new_page()
364
366
  page.goto("https://example.com")
365
-
366
- # 访问配置
367
- base_url = browser_manager.base_url
368
- print(f"Base URL: {base_url}")
367
+ page.close()
368
+ ctx.close()
369
369
  ```
370
370
 
371
371
  **配置示例**:
@@ -724,13 +724,15 @@ redis_client # session
724
724
  async_redis_client # session
725
725
  runtime # session
726
726
  storage_state # session(v4.0.3,认证状态路径)
727
+ browser_manager # session(v4.1.0,浏览器管理器)
728
+ browser # session(v4.1.0,浏览器实例)
727
729
 
728
730
  # Function 级别(每个测试独立)
729
731
  test_runtime # function
730
- page # function
732
+ context # function(浏览器上下文,每测试隔离)
733
+ page # function(页面实例,每测试隔离)
734
+ async_context # function
731
735
  async_page # function
732
- browser # function
733
- context # function
734
736
  uow # function
735
737
  cleanup # function
736
738
  prepare_data # function
@@ -1104,7 +1106,8 @@ def test_user_order_flow(user_api, order_api):
1104
1106
  | `async_redis_client` | session | v4.0.0+ | 异步 Redis 客户端 |
1105
1107
  | `page` | function | v3.0.0+ | 同步 Playwright 页面 |
1106
1108
  | `async_page` | function | v4.0.0+ | 异步 Playwright 页面 |
1107
- | `browser` | function | v3.0.0+ | 同步浏览器实例 |
1109
+ | `browser` | session | v3.0.0+(v4.1.0 提升) | 同步浏览器实例 |
1110
+ | `browser_manager` | session | v3.0.0+(v4.1.0 提升) | 浏览器管理器 |
1108
1111
  | `context` | function | v3.0.0+ | 同步浏览器上下文 |
1109
1112
  | `runtime` | session | v3.37.0+ | 运行时上下文 |
1110
1113
  | `test_runtime` | function | v3.44.0+ | 测试专用运行时 |
@@ -1125,6 +1128,7 @@ def test_user_order_flow(user_api, order_api):
1125
1128
 
1126
1129
  ## 版本历史
1127
1130
 
1131
+ - **v4.1.0** (2026-03-03): Browser Session 复用,`browser_manager`/`browser` 提升为 session scope,context/page 保持 function scope 每测试隔离
1128
1132
  - **v4.0.0** (2026-01-16): 全面异步化,新增 `async_http_client`、`async_database`、`async_redis_client`、`async_page` 等异步 fixtures
1129
1133
  - **v3.45.0** (2025-12): 新增 `@api_class` 和 `@actions_class` 装饰器,API/Actions 自动加载
1130
1134
  - **v3.44.0** (2025-11): 新增 `test_runtime` fixture,测试专用事件作用域
@@ -1,7 +1,7 @@
1
1
  # Web UI 测试使用手册
2
2
 
3
- > **最后更新**: 2026-03-01
4
- > **适用版本**: v3.0.0+(同步 AppActions),v4.0.0+(异步 AsyncAppActions),v4.0.3+(storageState 认证状态)
3
+ > **最后更新**: 2026-03-03
4
+ > **适用版本**: v3.0.0+(同步 AppActions),v4.0.0+(异步 AsyncAppActions),v4.0.3+(storageState 认证状态),v4.0.4+(pytest_config CLI 参数一致性),v4.1.0+(Browser Session 复用)
5
5
 
6
6
  ## 概述
7
7
 
@@ -16,6 +16,12 @@
16
16
  > - ✅ 性能提升 2-3 倍
17
17
  > - ✅ 更好的资源管理(async with 上下文管理器)
18
18
  >
19
+ > **v4.1.0 架构优化**:
20
+ > - ✅ Browser Session 复用:`browser_manager`/`browser` 提升为 session scope,整个测试会话只启动一次浏览器
21
+ > - ✅ Context/Page 每测试隔离:`context`/`page` 保持 function scope,每个测试独立
22
+ > - ✅ 对齐 Playwright 官方最佳实践(pytest-playwright 插件模式)
23
+ > - ✅ storageState 下沉到 context 级别注入,更符合 Playwright 设计
24
+ >
19
25
  > 本指南主要介绍**同步版本**(向后兼容)。异步版本使用方法请参考:
20
26
  > - [v4.0.0 发布说明](../releases/v4.0.0.md) - 异步 UI 测试概述
21
27
  > - [五层架构详解](../architecture/五层架构详解.md#layer-2-capabilities) - AsyncAppActions 详细说明
@@ -135,7 +141,7 @@ WEB__BASE_URL=https://web.example.com # Web 地址
135
141
 
136
142
  ## 3. 认证状态管理(storageState)
137
143
 
138
- > **版本**: v4.0.3+
144
+ > **版本**: v4.0.3+(基础功能),v4.0.4+(pytest_config CLI 参数一致性)
139
145
 
140
146
  绝大多数 UI 测试的前提是「用户已登录」。v4.0.3 原生支持 Playwright storageState,`page` 自动携带认证状态,测试零感知。
141
147
 
@@ -147,7 +153,7 @@ WEB__BASE_URL=https://web.example.com # Web 地址
147
153
  |------|------------------|-----------------|
148
154
  | **认证执行** | 框架自动调登录 API | 项目写登录逻辑(UI 登录流程多变) |
149
155
  | **状态缓存** | session 级别缓存 token | session 级别缓存 storageState JSON |
150
- | **状态注入** | 中间件自动注入 Authorization header | BrowserManager 自动注入 storage_state 到 context |
156
+ | **状态注入** | 中间件自动注入 Authorization header | context fixture 自动注入 storage_state 到 BrowserContext |
151
157
  | **项目责任** | 提供 credentials 配置 | 提供 `storage_state` fixture |
152
158
 
153
159
  ### 3.2 使用方式
@@ -160,9 +166,9 @@ import pytest
160
166
  from df_test_framework.testing import AuthSetup
161
167
 
162
168
  @pytest.fixture(scope="session")
163
- def storage_state(tmp_path_factory, settings):
169
+ def storage_state(tmp_path_factory, settings, request):
164
170
  """Session 级别认证状态 — 整个测试 session 只登录一次"""
165
- with AuthSetup(settings, tmp_path_factory.mktemp("auth")) as auth:
171
+ with AuthSetup(settings, tmp_path_factory.mktemp("auth"), pytest_config=request.config) as auth:
166
172
  auth.page.goto(f"{auth.base_url}/login")
167
173
  auth.page.fill("#username", settings.business.admin_username)
168
174
  auth.page.fill("#password", settings.business.admin_password)
@@ -171,6 +177,8 @@ def storage_state(tmp_path_factory, settings):
171
177
  return auth.save()
172
178
  ```
173
179
 
180
+ > **v4.0.4**: `pytest_config=request.config` 使 AuthSetup 自动读取 `--headed`/`--browser`/`--slowmo` 命令行参数,确保 auth 浏览器与测试浏览器模式一致。如果不传此参数,auth 浏览器始终使用 `settings.web` 中的配置,当用户通过 `--headed` 切换到有头模式时,auth 浏览器仍为无头模式,可能因 User-Agent 不一致导致认证状态失效。
181
+
174
182
  之后所有测试的 `page` 自动已认证:
175
183
 
176
184
  ```python
@@ -186,7 +194,16 @@ def test_dashboard(page):
186
194
 
187
195
  ```python
188
196
  class AuthSetup:
189
- def __init__(self, settings, state_dir): ...
197
+ def __init__(self, settings, state_dir, **overrides):
198
+ """
199
+ Args:
200
+ settings: 框架设置对象(读取 web.base_url / web.headless / web.viewport)
201
+ state_dir: storageState 文件保存目录
202
+ **overrides: 关键字参数覆盖,支持:
203
+ - pytest_config: pytest.Config 对象,自动读取 --headed 等 CLI 参数(v4.0.4)
204
+ - headless (bool): 显式指定无头模式(优先级高于 pytest_config)
205
+ - viewport (dict): 视口大小
206
+ """
190
207
 
191
208
  # 属性
192
209
  page # 临时浏览器页面,用于执行登录操作
@@ -198,6 +215,12 @@ class AuthSetup:
198
215
  """保存 storageState 到 JSON 文件,返回路径"""
199
216
  ```
200
217
 
218
+ **配置优先级**(从高到低):
219
+ 1. 显式关键字参数(`headless=False`)
220
+ 2. CLI 参数(通过 `pytest_config` 读取 `--headed`/`--browser`/`--slowmo`)
221
+ 3. 配置文件(`settings.web.headless`/`settings.web.viewport`)
222
+ 4. 默认值(`headless=True`,`viewport=1920x1080`)
223
+
201
224
  异步版本 `AsyncAuthSetup` 用法相同,使用 `async with`。
202
225
 
203
226
  ### 3.4 四种认证场景
@@ -253,9 +276,9 @@ def test_unauthenticated_redirect(browser):
253
276
 
254
277
  ```python
255
278
  @pytest.fixture(scope="session")
256
- def user_storage_state(tmp_path_factory, settings):
279
+ def user_storage_state(tmp_path_factory, settings, request):
257
280
  """普通用户认证状态"""
258
- with AuthSetup(settings, tmp_path_factory.mktemp("auth-user")) as auth:
281
+ with AuthSetup(settings, tmp_path_factory.mktemp("auth-user"), pytest_config=request.config) as auth:
259
282
  # 普通用户登录逻辑...
260
283
  return auth.save()
261
284
 
@@ -284,10 +307,10 @@ def test_admin_vs_user(page, browser, user_storage_state):
284
307
  | Fixture | 作用域 | 描述 |
285
308
  |---------|--------|------|
286
309
  | `storage_state` | session | 认证状态路径(v4.0.3,默认 None) |
287
- | `browser_manager` | function | 浏览器管理器(自动注入 storage_state) |
288
- | `browser` | function | 浏览器实例 |
289
- | `context` | function | 浏览器上下文(隔离) |
290
- | `page` | function | 页面实例 |
310
+ | `browser_manager` | session | 浏览器管理器(v4.1.0 Session 复用) |
311
+ | `browser` | session | 浏览器实例(v4.1.0 Session 复用) |
312
+ | `context` | function | 浏览器上下文(每测试隔离,自动注入 storage_state) |
313
+ | `page` | function | 页面实例(每测试隔离) |
291
314
  | `app_actions` | function | 基础业务操作(v3.45.0) |
292
315
  | `goto` | function | 页面导航助手 |
293
316
  | `screenshot` | function | 截图助手 |
@@ -948,10 +971,13 @@ class LoginActions(AppActions):
948
971
  默认情况下,测试在无头模式下运行(不显示浏览器窗口)。开发调试时可以显示浏览器窗口:
949
972
 
950
973
  ```bash
951
- # 方式 1: 环境变量配置
974
+ # 方式 1: 命令行参数(推荐,v4.0.2+)
975
+ uv run pytest tests/ui/ --headed -v
976
+
977
+ # 方式 2: 环境变量配置
952
978
  WEB__HEADLESS=false uv run pytest tests/ui/ -v
953
979
 
954
- # 方式 2: 配置文件
980
+ # 方式 3: 配置文件
955
981
  # config/environments/local.yaml
956
982
  web:
957
983
  headless: false
@@ -967,7 +993,10 @@ uv run pytest tests/ui/ --env=local -v
967
993
  减慢操作速度,便于观察每个步骤:
968
994
 
969
995
  ```bash
970
- # 每个操作延迟 1000 毫秒(1 秒)
996
+ # 方式 1: 命令行参数(推荐,v4.0.2+)
997
+ uv run pytest tests/ui/ --headed --slowmo 1000 -v
998
+
999
+ # 方式 2: 每个操作延迟 1000 毫秒(1 秒)
971
1000
  WEB__SLOW_MO=1000 uv run pytest tests/ui/ -v
972
1001
 
973
1002
  # 或在配置文件中设置
@@ -1125,6 +1154,11 @@ def test_login_flow(page, base_url):
1125
1154
  测试不同浏览器的兼容性:
1126
1155
 
1127
1156
  ```bash
1157
+ # 命令行参数(推荐,v4.0.2+)
1158
+ uv run pytest tests/ui/ --browser firefox -v
1159
+ uv run pytest tests/ui/ --browser webkit -v
1160
+
1161
+ # 环境变量
1128
1162
  # Chromium(默认)
1129
1163
  WEB__BROWSER_TYPE=chromium uv run pytest tests/ui/ -v
1130
1164
 
@@ -1321,5 +1355,8 @@ class LoginPage(BasePage):
1321
1355
  - [v3.43.0 发布说明](../releases/v3.43.0.md) - 现代 UI 测试最佳实践
1322
1356
  - [v3.44.0 发布说明](../releases/v3.44.0.md) - 事件驱动架构
1323
1357
  - [v3.45.0 发布说明](../releases/v3.45.0.md) - @actions_class 装饰器
1358
+ - [v4.0.3 发布说明](../releases/v4.0.3.md) - storageState 认证状态
1359
+ - [v4.0.4 发布说明](../releases/v4.0.4.md) - pytest_config CLI 参数一致性
1360
+ - [v4.1.0 发布说明](../releases/v4.1.0.md) - Browser Session 复用 + Context/Page 隔离
1324
1361
  - [架构设计文档](../architecture/README.md)
1325
1362
  - [Playwright 官方文档](https://playwright.dev/python/)
@@ -0,0 +1,135 @@
1
+ # v4.0.4 发布说明
2
+
3
+ **发布日期**: 2026-03-02
4
+ **类型**: 补丁版本(Patch Release)
5
+ **主题**: AuthSetup 支持 pytest_config — 确保 auth 浏览器与测试浏览器 CLI 参数一致
6
+
7
+ ---
8
+
9
+ ## 概述
10
+
11
+ v4.0.4 解决了一个实际场景中的 User-Agent 不一致问题:当用户通过 `--headed` 命令行参数切换到有头模式调试时,auth 浏览器仍使用无头模式,两者 User-Agent 不同,可能导致服务端认为 storageState 无效。
12
+
13
+ **解决方案**: `AuthSetup` / `AsyncAuthSetup` 新增 `pytest_config` 参数,自动读取 `--headed`/`--browser`/`--slowmo` 命令行参数,确保 auth 浏览器与测试浏览器模式完全一致。
14
+
15
+ ---
16
+
17
+ ## 新增功能
18
+
19
+ ### 1. pytest_config 参数支持
20
+
21
+ `AuthSetup` 和 `AsyncAuthSetup` 构造函数新增 `pytest_config` 关键字参数:
22
+
23
+ ```python
24
+ @pytest.fixture(scope="session")
25
+ def storage_state(tmp_path_factory, settings, request):
26
+ with AuthSetup(
27
+ settings,
28
+ tmp_path_factory.mktemp("auth"),
29
+ pytest_config=request.config, # v4.0.4: 自动读取 CLI 参数
30
+ ) as auth:
31
+ auth.page.goto(f"{auth.base_url}/login")
32
+ auth.page.fill("#username", "admin")
33
+ auth.page.fill("#password", "admin123")
34
+ auth.page.click("button[type=submit]")
35
+ auth.page.wait_for_url("**/dashboard")
36
+ return auth.save()
37
+ ```
38
+
39
+ 异步版本:
40
+
41
+ ```python
42
+ @pytest.fixture(scope="session")
43
+ async def storage_state(tmp_path_factory, settings, request):
44
+ async with AsyncAuthSetup(
45
+ settings,
46
+ tmp_path_factory.mktemp("auth"),
47
+ pytest_config=request.config,
48
+ ) as auth:
49
+ await auth.page.goto(f"{auth.base_url}/login")
50
+ # ...
51
+ return await auth.save()
52
+ ```
53
+
54
+ ### 2. 配置优先级
55
+
56
+ AuthSetup 的配置参数按以下优先级解析(从高到低):
57
+
58
+ | 优先级 | 来源 | 示例 |
59
+ |--------|------|------|
60
+ | 1 | 显式关键字参数 | `AuthSetup(..., headless=False)` |
61
+ | 2 | CLI 参数(通过 pytest_config) | `--headed` / `--browser firefox` / `--slowmo 500` |
62
+ | 3 | 配置文件 | `settings.web.headless` / `settings.web.viewport` |
63
+ | 4 | 默认值 | `headless=True`,`viewport=1920x1080` |
64
+
65
+ ### 3. 支持的 CLI 参数
66
+
67
+ | CLI 参数 | AuthSetup 字段 | 说明 |
68
+ |---------|----------------|------|
69
+ | `--headed` | `headless=False` | 显示浏览器窗口 |
70
+ | `--browser <type>` | `browser_type` | 浏览器类型(chromium/firefox/webkit) |
71
+ | `--slowmo <ms>` | `slow_mo` | 操作延迟毫秒数 |
72
+
73
+ ---
74
+
75
+ ## 问题背景
76
+
77
+ ### User-Agent 不一致导致认证失败
78
+
79
+ Chromium 在无头模式和有头模式下发送不同的 User-Agent:
80
+
81
+ ```
82
+ # 无头模式
83
+ Mozilla/5.0 ... HeadlessChrome/...
84
+
85
+ # 有头模式
86
+ Mozilla/5.0 ... Chrome/...
87
+ ```
88
+
89
+ 如果 auth 浏览器(无头)登录后保存 storageState,而测试浏览器(有头,通过 `--headed`)使用该 storageState,服务端可能因 User-Agent 变化而拒绝认证。
90
+
91
+ **v4.0.4 之前**: 需要手动传 `headless=False` 给 AuthSetup(容易遗忘)。
92
+ **v4.0.4 之后**: 传 `pytest_config=request.config` 即可,AuthSetup 自动匹配测试浏览器的模式。
93
+
94
+ ---
95
+
96
+ ## 设计说明
97
+
98
+ ### 为什么 AuthSetup 不能自动获取 pytest_config?
99
+
100
+ `AuthSetup` 是框架提供的普通 Python 类,不在 pytest fixture 依赖注入体系内。而 `storage_state` 是项目实现的 fixture,由项目决定传入哪些参数。
101
+
102
+ 对比:
103
+
104
+ | 组件 | 类型 | 能否自动获取 pytest_config |
105
+ |------|------|--------------------------|
106
+ | `browser_manager` | 框架 fixture | 能,声明 `request` 依赖,pytest 自动注入 |
107
+ | `storage_state` | 项目 fixture | 能,但需要项目自己传给 AuthSetup |
108
+ | `AuthSetup` | 普通类 | 不能,不在 pytest DI 体系内 |
109
+
110
+ 这保持了 AuthSetup 作为工具类的纯粹性 — 它不依赖 pytest,也可以在非 pytest 环境中使用。
111
+
112
+ ---
113
+
114
+ ## 改动文件
115
+
116
+ | 文件 | 改动 |
117
+ |------|------|
118
+ | `testing/fixtures/auth.py` | AuthSetup / AsyncAuthSetup 支持 `pytest_config` 参数 |
119
+ | `cli/templates/project/ui_conftest.py` | 脚手架模板更新 storage_state 示例 |
120
+ | `cli/templates/project/full_conftest.py` | 同上 |
121
+
122
+ ---
123
+
124
+ ## 向后兼容
125
+
126
+ - `pytest_config` 参数完全可选,不传时行为与 v4.0.3 一致
127
+ - 无破坏性变更
128
+
129
+ ---
130
+
131
+ ## 相关文档
132
+
133
+ - [Web UI 测试使用手册](../guides/web-ui-testing.md#3-认证状态管理storagstate)
134
+ - [v4.0.3 发布说明](v4.0.3.md) — AuthSetup 首次引入
135
+ - [v4.0.2 发布说明](v4.0.2.md) — `--headed`/`--browser`/`--slowmo` CLI 参数