import requests
import time
import logging
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def measure_http_performance(url, num_requests=10, timeout=5):
"""
Measures the performance of HTTP responses for a given URL.
Args:
url (str): The URL to test.
num_requests (int): The number of requests to make.
timeout (int): Timeout in seconds for each request.
Returns:
dict: A dictionary containing the average response time,
minimum response time, maximum response time, and
success rate. Returns None if an error occurs.
"""
response_times = []
success_count = 0
for i in range(num_requests):
try:
start_time = time.time()
response = requests.get(url, timeout=timeout)
end_time = time.time()
response_time = end_time - start_time
response_times.append(response_time)
if response.status_code >= 200 and response.status_code < 300:
success_count += 1
logging.info(f"Request {i+1}: Success - Status Code: {response.status_code}, Response Time: {response_time:.4f}s")
else:
logging.warning(f"Request {i+1}: Failed - Status Code: {response.status_code}, Response Time: {response_time:.4f}s")
except requests.exceptions.RequestException as e:
logging.error(f"Request {i+1}: Error - {e}")
return None
if not response_times:
return None
avg_response_time = sum(response_times) / len(response_times)
min_response_time = min(response_times)
max_response_time = max(response_times)
success_rate = (success_count / num_requests) * 100
results = {
"average_response_time": avg_response_time,
"min_response_time": min_response_time,
"max_response_time": max_response_time,
"success_rate": success_rate
}
logging.info(f"Performance Results: {results}")
return results
if __name__ == '__main__':
# Example usage
target_url = "https://www.google.com" # Replace with your target URL
performance_data = measure_http_performance(target_url, num_requests=20)
if performance_data:
print("Performance Test Complete.")
print(performance_data)
else:
print("Performance Test Failed.")
Add your comment