Skip to content

Test Execution Report

Generated: May 15, 2026 01:37:47 UTC

📊 Test Suite Summary

Metric Value
Total Tests 336
Passed 336 ✅
Failed 0 ❌
Errors 0 ⚠️
Skipped 0 ⏭️
Success Rate 100.0%
Total Duration 31.28s

📝 Test Results by Python Version

Unit Tests (Python 3.10)

Summary: 66/66 passed • Duration: 5.63s

test_api

  • test_health_check (0.021s)
  • test_get_weather_missing_parameters (0.022s)
  • test_liveness_probe (0.008s)
  • test_get_weather_missing_city (0.009s)
  • test_readiness_probe (0.209s)
  • test_get_weather_success (0.010s)
  • test_get_weather_client_error (0.019s)
  • test_post_weather_missing_body (0.012s)
  • test_post_weather_client_error (0.017s)
  • test_post_weather_invalid_json (0.009s)
  • test_invalid_endpoint (0.008s)
  • test_weather_cache_invalidation (0.033s)
  • test_weather_caching_same_bucket (0.015s)
  • test_cache_with_different_locations (0.011s)
  • test_cache_duration_configuration (0.001s)
  • test_invalid_content_type_post (0.009s)
  • test_oversized_request_body (0.010s)
  • test_cache_size_configuration (0.001s)
  • test_malformed_json_body (0.011s)
  • test_cache_zero_duration (0.010s)
  • test_invalid_http_method (0.008s)
  • test_x_request_id_header (0.008s)
  • test_weather_coordinates_missing_params (0.011s)
  • test_weather_coordinates_endpoint (0.391s)
  • test_weather_coordinates_invalid_latitude (0.012s)
  • test_recent_searches_get (0.009s)
  • test_recent_searches_delete (0.009s)
  • test_versioned_weather_get (0.465s)
  • test_versioned_weather_post (0.010s)
  • test_post_weather_missing_fields (0.011s)
  • test_post_weather_success (0.010s)
  • test_weather_coordinates_invalid_longitude (0.006s)

test_client

  • test_weather_client_initialization (0.041s)
  • test_extract_weather_from_json_invalid_json (0.043s)
  • test_extract_humidity (0.043s)
  • test_get_weather_request_exception (0.046s)
  • test_extract_weather_from_json_missing_keys (0.039s)
  • test_weather_client_context_manager (0.036s)
  • test_extract_wind_speed (0.038s)
  • test_fahrenheit_to_celsius_conversion (0.068s)
  • test_extract_temperature (0.050s)
  • test_extract_weather_from_json_success (0.039s)
  • test_get_weather_with_json_extraction (0.041s)
  • test_extract_temperature_not_found (0.046s)
  • test_extract_weather_from_json_no_script_tag (0.037s)
  • test_get_weather_fallback_to_html (0.045s)
  • test_extract_condition (0.038s)
  • test_extract_weather_json_empty_forecast (0.041s)
  • test_extract_condition_not_found (0.044s)
  • test_extract_humidity_not_found (0.040s)
  • test_humidity_extraction_with_parent_element (0.039s)
  • test_extract_weather_json_no_hourly (0.037s)
  • test_extract_wind_speed_not_found (0.038s)
  • test_async_get_weather_by_coordinates_geocode_failure (0.138s)
  • test_get_weather_by_coordinates_geocode_failure (0.004s)
  • test_get_weather_by_coordinates_geocode_exception (0.003s)
  • test_async_get_weather_by_coordinates_success (0.128s)
  • test_extract_weather_json_empty_hourly (0.037s)
  • test_mph_to_kmh_conversion (0.037s)
  • test_extract_weather_json_exception (0.037s)
  • test_ms_to_kmh_conversion (0.037s)
  • test_async_get_weather_by_coordinates_geocode_exception (0.049s)

test_models

  • test_location_with_coordinates (0.001s)
  • test_weather_data_creation (0.001s)
  • test_weather_data_validation (0.001s)
  • test_location_creation (0.001s)

Unit Tests (Python 3.11)

Summary: 66/66 passed • Duration: 4.72s

test_api

  • test_health_check (0.031s)
  • test_get_weather_missing_parameters (0.033s)
  • test_get_weather_success (0.038s)
  • test_liveness_probe (0.012s)
  • test_post_weather_missing_fields (0.018s)
  • test_readiness_probe (0.190s)
  • test_get_weather_missing_city (0.010s)
  • test_post_weather_missing_body (0.012s)
  • test_post_weather_success (0.013s)
  • test_post_weather_client_error (0.020s)
  • test_post_weather_invalid_json (0.010s)
  • test_invalid_endpoint (0.012s)
  • test_weather_caching_same_bucket (0.017s)
  • test_weather_cache_invalidation (0.019s)
  • test_cache_with_different_locations (0.016s)
  • test_cache_size_configuration (0.002s)
  • test_invalid_content_type_post (0.008s)
  • test_cache_duration_configuration (0.001s)
  • test_malformed_json_body (0.011s)
  • test_invalid_http_method (0.010s)
  • test_oversized_request_body (0.011s)
  • test_x_request_id_header (0.010s)
  • test_cache_zero_duration (0.014s)
  • test_weather_coordinates_endpoint (0.676s)
  • test_weather_coordinates_missing_params (0.014s)
  • test_weather_coordinates_invalid_latitude (0.013s)
  • test_recent_searches_get (0.011s)
  • test_recent_searches_delete (0.010s)
  • test_versioned_weather_get (0.323s)
  • test_versioned_weather_post (0.012s)
  • test_get_weather_client_error (0.015s)
  • test_weather_coordinates_invalid_longitude (0.007s)

test_client

  • test_extract_weather_from_json_invalid_json (0.049s)
  • test_get_weather_request_exception (0.051s)
  • test_extract_humidity (0.052s)
  • test_weather_client_initialization (0.048s)
  • test_weather_client_context_manager (0.042s)
  • test_extract_weather_from_json_missing_keys (0.046s)
  • test_fahrenheit_to_celsius_conversion (0.071s)
  • test_extract_wind_speed (0.045s)
  • test_extract_temperature (0.045s)
  • test_get_weather_with_json_extraction (0.048s)
  • test_extract_weather_from_json_success (0.046s)
  • test_extract_temperature_not_found (0.051s)
  • test_extract_condition (0.043s)
  • test_extract_weather_from_json_no_script_tag (0.044s)
  • test_get_weather_fallback_to_html (0.061s)
  • test_extract_condition_not_found (0.046s)
  • test_extract_humidity_not_found (0.045s)
  • test_extract_weather_json_empty_forecast (0.047s)
  • test_humidity_extraction_with_parent_element (0.048s)
  • test_async_get_weather_by_coordinates_geocode_failure (0.112s)
  • test_extract_wind_speed_not_found (0.047s)
  • test_extract_weather_json_no_hourly (0.046s)
  • test_get_weather_by_coordinates_geocode_failure (0.004s)
  • test_get_weather_by_coordinates_geocode_exception (0.004s)
  • test_async_get_weather_by_coordinates_success (0.119s)
  • test_mph_to_kmh_conversion (0.043s)
  • test_extract_weather_json_empty_hourly (0.046s)
  • test_ms_to_kmh_conversion (0.043s)
  • test_extract_weather_json_exception (0.046s)
  • test_async_get_weather_by_coordinates_geocode_exception (0.043s)

test_models

  • test_location_creation (0.001s)
  • test_location_with_coordinates (0.001s)
  • test_weather_data_creation (0.001s)
  • test_weather_data_validation (0.003s)

Unit Tests (Python 3.12)

Summary: 66/66 passed • Duration: 6.90s

test_api

  • test_health_check (0.022s)
  • test_get_weather_missing_parameters (0.022s)
  • test_liveness_probe (0.008s)
  • test_get_weather_success (0.022s)
  • test_get_weather_missing_city (0.009s)
  • test_readiness_probe (0.322s)
  • test_post_weather_missing_fields (0.019s)
  • test_get_weather_client_error (0.017s)
  • test_post_weather_missing_body (0.010s)
  • test_post_weather_success (0.010s)
  • test_invalid_endpoint (0.008s)
  • test_post_weather_invalid_json (0.012s)
  • test_weather_caching_same_bucket (0.015s)
  • test_weather_cache_invalidation (0.016s)
  • test_cache_with_different_locations (0.016s)
  • test_cache_size_configuration (0.001s)
  • test_cache_duration_configuration (0.001s)
  • test_malformed_json_body (0.009s)
  • test_oversized_request_body (0.008s)
  • test_invalid_content_type_post (0.007s)
  • test_invalid_http_method (0.008s)
  • test_x_request_id_header (0.008s)
  • test_cache_zero_duration (0.010s)
  • test_weather_coordinates_endpoint (0.536s)
  • test_weather_coordinates_missing_params (0.009s)
  • test_weather_coordinates_invalid_latitude (0.009s)
  • test_recent_searches_get (0.009s)
  • test_recent_searches_delete (0.008s)
  • test_versioned_weather_get (0.650s)
  • test_versioned_weather_post (0.007s)
  • test_post_weather_client_error (0.010s)
  • test_weather_coordinates_invalid_longitude (0.006s)

test_client

  • test_extract_humidity (0.046s)
  • test_get_weather_request_exception (0.047s)
  • test_extract_weather_from_json_invalid_json (0.046s)
  • test_weather_client_initialization (0.042s)
  • test_extract_wind_speed (0.042s)
  • test_fahrenheit_to_celsius_conversion (0.043s)
  • test_extract_weather_from_json_missing_keys (0.051s)
  • test_weather_client_context_manager (0.064s)
  • test_extract_temperature_not_found (0.048s)
  • test_extract_weather_from_json_success (0.049s)
  • test_get_weather_with_json_extraction (0.047s)
  • test_extract_temperature (0.043s)
  • test_extract_condition_not_found (0.041s)
  • test_extract_weather_from_json_no_script_tag (0.040s)
  • test_get_weather_fallback_to_html (0.050s)
  • test_extract_condition (0.040s)
  • test_extract_weather_json_empty_forecast (0.051s)
  • test_extract_humidity_not_found (0.040s)
  • test_humidity_extraction_with_parent_element (0.041s)
  • test_async_get_weather_by_coordinates_geocode_failure (0.130s)
  • test_extract_wind_speed_not_found (0.042s)
  • test_extract_weather_json_no_hourly (0.039s)
  • test_get_weather_by_coordinates_geocode_failure (0.006s)
  • test_get_weather_by_coordinates_geocode_exception (0.007s)
  • test_async_get_weather_by_coordinates_success (0.105s)
  • test_mph_to_kmh_conversion (0.038s)
  • test_extract_weather_json_empty_hourly (0.038s)
  • test_ms_to_kmh_conversion (0.040s)
  • test_extract_weather_json_exception (0.037s)
  • test_async_get_weather_by_coordinates_geocode_exception (0.036s)

test_models

  • test_location_with_coordinates (0.002s)
  • test_location_creation (0.001s)
  • test_weather_data_creation (0.002s)
  • test_weather_data_validation (0.001s)

Security Tests (Python 3.10)

Summary: 46/46 passed • Duration: 3.84s

TestAPIRateLimiting

  • test_multiple_valid_requests (0.029s)
  • test_multiple_invalid_requests (0.033s)

TestAPISecurityGET

  • test_path_traversal_attempts (0.033s)
  • test_oversized_input (0.056s)
  • test_sql_injection_attempts (0.036s)
  • test_command_injection_attempts (0.018s)
  • test_xss_attempts (0.015s)
  • test_empty_parameters (0.009s)
  • test_null_bytes (0.007s)
  • test_whitespace_only_parameters (0.010s)

TestAPISecurityPOST

  • test_malformed_json (0.037s)
  • test_non_string_types (0.024s)
  • test_non_dict_json (0.023s)
  • test_sql_injection_in_json (0.010s)
  • test_xss_in_json (0.010s)
  • test_oversized_json_values (0.011s)

TestHTTPErrorHandlers

  • test_404_not_found (0.009s)
  • test_405_method_not_allowed (0.011s)
  • test_413_payload_too_large (0.033s)
  • test_415_unsupported_media_type (0.010s)
  • test_400_bad_request_missing_required_fields (0.019s)
  • test_null_bytes_in_input (0.006s)
  • test_empty_request_body_post (0.008s)
  • test_very_long_query_string (0.025s)
  • test_invalid_json_syntax (0.022s)
  • test_content_type_without_charset (0.363s)
  • test_unicode_normalization_attack (0.008s)
  • test_trailing_slash_handling (0.013s)
  • test_multiple_content_types (0.008s)
  • test_header_injection_attempts (0.006s)
  • test_double_slash_in_path (0.009s)
  • test_url_encoding_in_parameters (0.499s)
  • test_repeated_parameters (0.712s)
  • test_parameter_without_value (0.009s)
  • test_case_sensitive_endpoints (0.007s)
  • test_cors_preflight_request (0.006s)
  • test_response_headers_present (0.006s)

TestInputValidation

  • test_non_string_type (0.003s)
  • test_valid_input (0.004s)
  • test_whitespace_only (0.004s)
  • test_empty_string (0.005s)
  • test_none_value (0.001s)
  • test_special_characters_rejected (0.001s)
  • test_whitespace_trimming (0.001s)
  • test_exceeds_max_length (0.001s)
  • test_unicode_cities_allowed (0.001s)

Security Tests (Python 3.11)

Summary: 46/46 passed • Duration: 4.45s

TestAPIRateLimiting

  • test_multiple_valid_requests (0.038s)
  • test_multiple_invalid_requests (0.043s)

TestAPISecurityGET

  • test_path_traversal_attempts (0.036s)
  • test_oversized_input (0.059s)
  • test_sql_injection_attempts (0.034s)
  • test_command_injection_attempts (0.023s)
  • test_xss_attempts (0.019s)
  • test_empty_parameters (0.013s)
  • test_null_bytes (0.006s)
  • test_whitespace_only_parameters (0.012s)

TestAPISecurityPOST

  • test_malformed_json (0.042s)
  • test_non_string_types (0.029s)
  • test_sql_injection_in_json (0.014s)
  • test_xss_in_json (0.011s)
  • test_non_dict_json (0.026s)
  • test_oversized_json_values (0.013s)

TestHTTPErrorHandlers

  • test_405_method_not_allowed (0.014s)
  • test_404_not_found (0.011s)
  • test_413_payload_too_large (0.030s)
  • test_400_bad_request_missing_required_fields (0.025s)
  • test_content_type_without_charset (0.428s)
  • test_invalid_json_syntax (0.024s)
  • test_415_unsupported_media_type (0.010s)
  • test_unicode_normalization_attack (0.015s)
  • test_empty_request_body_post (0.014s)
  • test_very_long_query_string (0.023s)
  • test_header_injection_attempts (0.007s)
  • test_multiple_content_types (0.011s)
  • test_trailing_slash_handling (0.018s)
  • test_double_slash_in_path (0.010s)
  • test_case_sensitive_endpoints (0.013s)
  • test_url_encoding_in_parameters (0.389s)
  • test_repeated_parameters (0.557s)
  • test_parameter_without_value (0.011s)
  • test_null_bytes_in_input (0.004s)
  • test_cors_preflight_request (0.008s)
  • test_response_headers_present (0.009s)

TestInputValidation

  • test_whitespace_only (0.004s)
  • test_non_string_type (0.004s)
  • test_empty_string (0.004s)
  • test_valid_input (0.005s)
  • test_exceeds_max_length (0.001s)
  • test_none_value (0.001s)
  • test_unicode_cities_allowed (0.001s)
  • test_whitespace_trimming (0.002s)
  • test_special_characters_rejected (0.001s)

Security Tests (Python 3.12)

Summary: 46/46 passed • Duration: 5.74s

TestAPIRateLimiting

  • test_multiple_valid_requests (0.031s)
  • test_multiple_invalid_requests (0.030s)

TestAPISecurityGET

  • test_path_traversal_attempts (0.023s)
  • test_sql_injection_attempts (0.024s)
  • test_oversized_input (0.046s)
  • test_command_injection_attempts (0.019s)
  • test_xss_attempts (0.015s)
  • test_null_bytes (0.005s)
  • test_empty_parameters (0.008s)
  • test_whitespace_only_parameters (0.010s)

TestAPISecurityPOST

  • test_malformed_json (0.031s)
  • test_non_string_types (0.022s)
  • test_sql_injection_in_json (0.011s)
  • test_xss_in_json (0.009s)
  • test_non_dict_json (0.019s)
  • test_oversized_json_values (0.008s)

TestHTTPErrorHandlers

  • test_405_method_not_allowed (0.010s)
  • test_404_not_found (0.007s)
  • test_413_payload_too_large (0.035s)
  • test_400_bad_request_missing_required_fields (0.020s)
  • test_415_unsupported_media_type (0.007s)
  • test_null_bytes_in_input (0.005s)
  • test_invalid_json_syntax (0.018s)
  • test_very_long_query_string (0.022s)
  • test_empty_request_body_post (0.011s)
  • test_content_type_without_charset (0.483s)
  • test_unicode_normalization_attack (0.011s)
  • test_multiple_content_types (0.006s)
  • test_header_injection_attempts (0.006s)
  • test_trailing_slash_handling (0.014s)
  • test_double_slash_in_path (0.008s)
  • test_url_encoding_in_parameters (0.354s)
  • test_parameter_without_value (0.008s)
  • test_repeated_parameters (0.465s)
  • test_response_headers_present (0.008s)
  • test_cors_preflight_request (0.005s)
  • test_case_sensitive_endpoints (0.009s)

TestInputValidation

  • test_empty_string (0.004s)
  • test_non_string_type (0.004s)
  • test_whitespace_only (0.004s)
  • test_valid_input (0.006s)
  • test_none_value (0.001s)
  • test_special_characters_rejected (0.002s)
  • test_whitespace_trimming (0.001s)
  • test_exceeds_max_length (0.001s)
  • test_unicode_cities_allowed (0.001s)

This report is auto-generated from CI/CD pipeline execution. Generated by scripts/generate_reports.py.