Test rychlosti HTTP pro REST SMS služby
Potřebujete změřit výkon vaší SMS služby založené na HTTP? Test rychlosti HTTP pro REST SMS služby je výkonný nástroj určený k vyhodnocení rychlosti a spolehlivosti vašich JSON/REST API endpointů. Tato stahovatelná utilita vám umožňuje simulovat SMS požadavky ve vysokém objemu, sledovat úspěšnost a počítat požadavky za sekundu – pomůže vám optimalizovat výkon serveru pod zátěží. Ať už testujete výkon lokálního vývojového prostředí nebo benchmarkujete produkční SMS bránu, tento nástroj poskytuje jasné metriky pro celkový počet požadavků, souběžná připojení a efektivitu HTTP Keep-Alive. Stáhněte si připravené řešení v C# nebo integrujte poskytnutý zdrojový kód do vašeho testovacího workflow pro přesnou analýzu výkonu API.
Stáhnout
HttpSpeedTest.zipPříklad použití
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static readonly Random random = new Random();
static readonly string[] sampleMessages = {
"Ahoj, toto je testovací zpráva.",
"Testování výkonu HTTP serveru.",
"Měření počtu požadavků za sekundu pro JSON API.",
"Náhodný obsah zprávy pro testování zátěže.",
"Další testovací zpráva s odlišným obsahem.",
"Kontrola kapacity serveru pod zátěží.",
"Kolik požadavků server zvládne?",
"Zátěžové testování SMS API endpointu.",
"Tato zpráva je automaticky generována.",
"Poslední testovací zpráva v sadě."
};
static async Task Main(string[] args)
{
Console.WriteLine("Testovač výkonu JSON API HTTP serveru");
Console.WriteLine("---------------------------------------");
if (args.Length < 3)
{
Console.WriteLine("Použití: Program [useKeepAlive]");
Console.WriteLine("Příklad: Program http://198.50.122.178:8080 1000 50 true");
Console.WriteLine("Příklad: Program https://api.example.com/sms 5000 100 false");
Console.WriteLine("Příklad: Program http://localhost/innotest/innotest.php 50 10 false");
return;
}
string baseUrl = args[0];
if (!Uri.TryCreate(baseUrl, UriKind.Absolute, out Uri uriResult) ||
(uriResult.Scheme != Uri.UriSchemeHttp && uriResult.Scheme != Uri.UriSchemeHttps))
{
Console.WriteLine("Neplatná základní URL. Musí být platná HTTP nebo HTTPS URL.");
return;
}
if (!int.TryParse(args[1], out int totalRequests) || totalRequests <= 0)
{
Console.WriteLine("Neplatná hodnota totalRequests. Musí být kladné celé číslo.");
return;
}
if (!int.TryParse(args[2], out int concurrentRequests) || concurrentRequests <= 0)
{
Console.WriteLine("Neplatná hodnota concurrentRequests. Musí být kladné celé číslo.");
return;
}
bool useKeepAlive = args.Length > 3 && bool.TryParse(args[3], out bool keepAlive) && keepAlive;
Console.WriteLine($"Testovací parametry:");
Console.WriteLine($"- Základní URL: {baseUrl}");
Console.WriteLine($"- Celkový počet požadavků: {totalRequests}");
Console.WriteLine($"- Souběžné požadavky: {concurrentRequests}");
Console.WriteLine($"- HTTP Keep-Alive: {(useKeepAlive ? "Povoleno" : "Zakázáno")}");
Console.WriteLine();
var httpClientHandler = new HttpClientHandler
{
UseProxy = false,
MaxConnectionsPerServer = concurrentRequests
};
var httpClient = new HttpClient(httpClientHandler)
{
Timeout = TimeSpan.FromSeconds(30),
BaseAddress = new Uri(baseUrl)
};
if (useKeepAlive)
{
httpClient.DefaultRequestHeaders.ConnectionClose = false;
httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
}
else
{
httpClient.DefaultRequestHeaders.ConnectionClose = true;
}
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "+
"(KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36");
httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
var stopwatch = Stopwatch.StartNew();
var tasks = new List(concurrentRequests);
var completedRequests = 0;
var successfulRequests = 0;
var failedRequests = 0;
Console.WriteLine("Spouštím test...");
var semaphore = new System.Threading.SemaphoreSlim(concurrentRequests, concurrentRequests);
var jsonOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = false
};
for (int i = 0; i < totalRequests; i++)
{
await semaphore.WaitAsync();
tasks.Add(Task.Run(async () =>
{
try
{
var requestData = new
{
sender = "+0000000",
gsm = GenerateRandomPhoneNumber(),
text = GetRandomMessage(),
usrClient = "Pruebas",
pasClient = "Pruebas"
};
var json = JsonSerializer.Serialize(requestData, jsonOptions);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(baseUrl, content);
System.Threading.Interlocked.Increment(ref completedRequests);
if (response.IsSuccessStatusCode)
{
System.Threading.Interlocked.Increment(ref successfulRequests);
}
else
{
System.Threading.Interlocked.Increment(ref failedRequests);
Console.WriteLine($"Požadavek selhal se stavem: {response.StatusCode}");
}
}
catch (Exception ex)
{
System.Threading.Interlocked.Increment(ref completedRequests);
System.Threading.Interlocked.Increment(ref failedRequests);
Console.WriteLine($"Požadavek selhal: {ex.Message}");
}
finally
{
semaphore.Release();
}
}));
}
await Task.WhenAll(tasks);
stopwatch.Stop();
Console.WriteLine("\nTest dokončen!");
Console.WriteLine($"Celkový čas: {stopwatch.Elapsed.TotalSeconds:F2} sekund");
Console.WriteLine($"Dokončené požadavky: {completedRequests}");
Console.WriteLine($"Úspěšné požadavky: {successfulRequests}");
Console.WriteLine($"Neúspěšné požadavky: {failedRequests}");
Console.WriteLine($"Požadavků za sekundu: {totalRequests / stopwatch.Elapsed.TotalSeconds:F2}");
}
static string GenerateRandomPhoneNumber()
{
return $"+{random.Next(100, 999)}{random.Next(1000000, 9999999)}";
}
static string GetRandomMessage()
{
return sampleMessages[random.Next(sampleMessages.Length)];
}
}
Vysvětlení kódu
1. PřehledTato konzolová aplikace v C# testuje zatížení HTTP(S) SMS API endpointu odesíláním souběžných JSON požadavků a měří výkonnostní metriky jako:
- Požadavky za sekundu (RPS)
- Úspěšnost/neúspěšnost
- Celkový čas provedení
2. Klíčové komponenty
A. Nastavení a konfigurace
Generování náhodných dat:
sampleMessages: Předdefinovaná sada vzorových SMS zpráv pro realistické testování.GenerateRandomPhoneNumber(): Vytváří falešná telefonní čísla (např.+1234567890).GetRandomMessage(): Vybere náhodnou zprávu zsampleMessages.
Argumenty příkazového řádku:
Program <baseUrl> <totalRequests> <concurrentRequests> [useKeepAlive]
- Ověřuje vstupy (formát URL, kladná čísla pro počty požadavků).
- Konfiguruje nastavení HTTP klienta (časový limit, keep-alive, user-agent).
B. Konfigurace HTTP klienta
HttpClient přizpůsobení:
MaxConnectionsPerServer: Omezuje paralelní připojení k serveru.ConnectionClose/keep-alive: Přepíná trvalá HTTP připojení.- Časový limit: 30 sekund na požadavek.
- Hlavičky: Nastaví
User-AgentaAccept: application/json.
C. Provedení testu zatížení
Řízení souběžnosti:
- Používá
SemaphoreSlimk omezení souběžných požadavků (např. 50 najednou). - Async/await (
Task.Run) pro neblokující I/O operace.
Workflow požadavku:
- Serializuje JSON payload s náhodnými telefonními čísly/zprávami:
{ "sender": "+0000000", "gsm": "+1234567890", "text": "Hello, this is a test message.", "usrClient": "Pruebas", "pasClient": "Pruebas" } - Odešle POST požadavek na zadaný endpoint.
- Sleduje úspěchy/neúspěchy pomocí
Interlockedpro vláknově bezpečné čítače.
D. Metriky a reportování
- Stopky: Měří celkovou dobu trvání testu.
- Výstupní metriky:
- Celkový uplynulý čas.
- Dokončené/úspěšné/neúspěšné požadavky.
- Požadavky za sekundu (RPS):
totalRequests / elapsedTime.
3. Technické zajímavosti
- Vláknová bezpečnost:
Interlocked.Incrementzajišťuje atomické aktualizace čítačů napříč vlákny.SemaphoreSlimzabraňuje přetížení serveru nebo klienta.
- Zpracování chyb:
- Zachytává výjimky (např. časové limity, síťové chyby) a zaznamenává neúspěchy.
- Ověřuje HTTP stavové kódy (
IsSuccessStatusCode).
- Optimalizace výkonu:
- Znovu používá
HttpClient(osvědčený postup pro vyhnutí se vyčerpání TCP portů). - Konfigurovatelný keep-alive pro simulaci reálných scénářů.
- Znovu používá
4. Příklad použití
Pro testování SMS API na http://localhost:8080/sms s 1 000 celkovými požadavky (50 souběžných, keep-alive povoleno):
Program http://localhost:8080/sms 1000 50 true
Výstup:
Test dokončen! Celkový čas: 12.34 sekund Dokončené požadavky: 1000 Úspěšné požadavky: 980 Neúspěšné požadavky: 20 Požadavky za sekundu: 81.04
5. Proč je to důležité
- Benchmarking: Identifikuje úzká místa API (např. limity serveru, síťovou latenci).
- Regresní testování: Zajišťuje, že výkon se po aktualizacích nezhorší.
- Plánování kapacity: Určuje maximální zátěž, kterou služba zvládne.
6. Možná vylepšení
- Přidat logiku opakování pro přechodné chyby.
- Podpora autentizace (OAuth/API klíče).
- Export výsledků do CSV/JSON pro analýzu.
Tento nástroj je ideální pro vývojáře a DevOps týmy, kteří ověřují výkon SMS brány před nasazením.
Závěr
HTTP Speed Test pro REST SMS služby poskytuje robustní, snadno použitelné řešení pro benchmarkování výkonu a spolehlivosti SMS API endpointů. Simulací reálného provozu s konfigurovatelnou souběžností, generováním náhodných zpráv a podrobnými výkonnostními metrikami tento nástroj pomáhá vývojářům a QA týmům identifikovat úzká místa, ověřit škálovatelnost a optimalizovat odezvu API. Ať už testujete zatížení nového nasazení nebo auditujete existující SMS bránu, dodaný zdrojový kód v C# nabízí flexibilitu pro přizpůsobení, zatímco předpřipravený spustitelný soubor poskytuje rychlé, akční poznatky. Stáhněte si nástroj ještě dnes a zajistěte, že vaše SMS služba splňuje očekávání výkonu pod zátěží—a doručuje bezproblémový zážitek koncovým uživatelům.