run method

  1. @override
Future<BenchmarkResult> run()
override

Ejecuta el benchmark y retorna métricas

Implementation

@override
Future<BenchmarkResult> run() async {
  final measurements = <Duration>[];
  final uri = Uri.parse(endpoint);

  for (int i = 0; i < iterations; i++) {
    final stopwatch = Stopwatch()..start();

    try {
      // ✅ USAR HTTP NATIVO - El interceptor global los captura automáticamente
      final client = http.Client();

      late final http.Response response;

      switch (httpMethod.toUpperCase()) {
        case 'GET':
          response = await client.get(uri, headers: headers);
          break;
        case 'POST':
          response = await client.post(uri, headers: headers, body: requestBody);
          break;
        case 'PUT':
          response = await client.put(uri, headers: headers, body: requestBody);
          break;
        default:
          throw UnsupportedError('HTTP method $httpMethod not supported');
      }

      stopwatch.stop();

      // Solo medir requests exitosos
      if (response.statusCode >= 200 && response.statusCode < 300) {
        measurements.add(stopwatch.elapsed);
      }

      client.close();

      // Delay realista entre requests
      await Future.delayed(const Duration(milliseconds: 25));

    } catch (e) {
      stopwatch.stop();
      // Incluir errores en mediciones para reflejar overhead total
      measurements.add(stopwatch.elapsed);
    }
  }

  return BenchmarkResult(
    testName: name,
    iterations: iterations,
    measurements: measurements,
    metadata: {
      'endpoint': endpoint,
      'method': httpMethod,
      'hasPayload': requestBody != null,
      'payloadSize': requestBody?.length ?? 0,
      'headerCount': headers?.length ?? 0,
      'successfulRequests': measurements.length,
    },
  );
}