Source code for net_benchmark.http_bench.tests.test_analysis

from net_benchmark.http_bench.analysis import HTTPAnalyzer
from net_benchmark.http_bench.core import HTTPProtocol, HTTPResult, QueryStatus


[docs] def test_create_dataframe(sample_results): analyzer = HTTPAnalyzer(sample_results) df = analyzer.df assert len(df) == 2 assert set(df.columns) >= {"target", "total_ms", "status", "completed"}
[docs] def test_get_target_statistics(sample_results): analyzer = HTTPAnalyzer(sample_results) stats = analyzer.get_target_statistics() assert len(stats) == 1 # both results for same target s = stats[0] assert s.total_requests == 2 assert s.successful_requests == 1 assert s.success_rate == 50.0 assert s.avg_latency == 100.0 assert s.avg_ttfb_ms == 50.0 assert s.http2_rate == 100.0 assert s.cdn_fingerprint == "Cloudflare" assert s.cache_control_present == 1 assert s.etag_present == 1 assert s.last_modified_present == 1 assert s.age_present == 1
[docs] def test_consistency_single_sample(): """Test that consistency is 100% with one success.""" r = create_success_result(total_ms=50) analyzer = HTTPAnalyzer([r]) stats = analyzer.get_target_statistics() assert len(stats) == 1 assert stats[0].consistency_score == 100.0 assert stats[0].jitter == 0.0
[docs] def test_get_overall_statistics(sample_results): analyzer = HTTPAnalyzer(sample_results) overall = analyzer.get_overall_statistics() assert overall["total_requests"] == 2 assert overall["successful_requests"] == 1 assert overall["overall_success_rate"] == 50.0 assert overall["overall_avg_latency"] == 100.0 assert overall["overall_avg_ttfb"] == 50.0 assert overall["fastest_target"] == "https://example.com" assert overall["assertion_pass_rate"] == 50.0 # one passed, one no assertions
[docs] def test_get_ttfb_statistics(sample_results): analyzer = HTTPAnalyzer(sample_results) ttfb = analyzer.get_ttfb_statistics() assert len(ttfb) == 1 assert ttfb[0]["avg_ttfb_ms"] == 50.0
[docs] def test_get_protocol_distribution(sample_results): analyzer = HTTPAnalyzer(sample_results) dist = analyzer.get_protocol_distribution() protocols = {d["protocol"] for d in dist} assert protocols == {"HTTP/2", "unknown"}
[docs] def test_get_security_summary(sample_results): analyzer = HTTPAnalyzer(sample_results) sec = analyzer.get_security_summary() assert sec["security_header_counts"]["strict-transport-security"] == 1 assert "Cloudflare" in sec["cdn_distribution"]
[docs] def test_get_status_code_distribution(sample_results): analyzer = HTTPAnalyzer(sample_results) codes = analyzer.get_status_code_distribution() assert any(c["status_code"] == 200 for c in codes)
[docs] def test_get_error_statistics(sample_results): analyzer = HTTPAnalyzer(sample_results) errors = analyzer.get_error_statistics() assert "Request timeout" in errors
[docs] def create_success_result(total_ms: float) -> HTTPResult: return HTTPResult( target="https://example.com", method="GET", start_time=1.0, end_time=1.0 + total_ms / 1000.0, total_ms=total_ms, status=QueryStatus.SUCCESS, iteration=1, attempt_number=1, http_status_code=200, protocol=HTTPProtocol.HTTP2, )