Test rýchlosti HTTP pre REST SMS služby
Potrebujete zmerať výkon vašej SMS služby založenej na HTTP? Test rýchlosti HTTP pre REST SMS služby je výkonný nástroj navrhnutý na vyhodnotenie rýchlosti a spoľahlivosti vašich JSON/REST API endpointov. Tento stiahnuteľný nástroj vám umožňuje simulovať SMS požiadavky vo veľkom objeme, sledovať úspešnosť a počítať požiadavky za sekundu – čím vám pomôže optimalizovať výkon servera pri zaťažení. Nech už testujete výkon lokálneho vývojového prostredia alebo benchmarkujete produkčnú SMS bránu, tento nástroj poskytuje jasné metriky pre celkový počet požiadavok, súbežné pripojenia a efektivitu HTTP Keep-Alive. Stiahnite si hotové riešenie v C# alebo integrujte poskytnutý zdrojový kód do vášho testovacieho pracovného postupu pre presnú analýzu výkonu API.
Stiahnuť HttpSpeedTest.zip Príklad použitia
Zdrojový kód
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 testovacia správa.", "Testovanie výkonu HTTP servera.", "Meranie počtu požiadavok za sekundu pre JSON API.", "Náhodný obsah správy pre testovanie zaťaženia.", "Ďalšia testovacia správa s odlišným obsahom.", "Kontrola kapacity servera pri zaťažení.", "Koľko požiadavok dokáže server spracovať?", "Stresové testovanie SMS API endpointu.", "Táto správa bola automaticky vygenerovaná.", "Posledná testovacia správa v sade." }; static async Task Main(string[] args) { Console.WriteLine("Testovač výkonu HTTP servera pre JSON API"); Console.WriteLine("---------------------------------------"); if (args.Length < 3) { Console.WriteLine("Použitie: ProgramVysvetlenie kódu[useKeepAlive]"); Console.WriteLine("Príklad: Program http://198.50.122.178:8080 1000 50 true"); Console.WriteLine("Príklad: Program https://api.example.com/sms 5000 100 false"); Console.WriteLine("Prí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í to byť platná HTTP alebo HTTPS URL."); return; } if (!int.TryParse(args[1], out int totalRequests) || totalRequests <= 0) { Console.WriteLine("Neplatná hodnota totalRequests. Musí to byť kladné celé číslo."); return; } if (!int.TryParse(args[2], out int concurrentRequests) || concurrentRequests <= 0) { Console.WriteLine("Neplatná hodnota concurrentRequests. Musí to byť kladné celé číslo."); return; } bool useKeepAlive = args.Length > 3 && bool.TryParse(args[3], out bool keepAlive) && keepAlive; Console.WriteLine($"Parametre testu:"); Console.WriteLine($"- Základná URL: {baseUrl}"); Console.WriteLine($"- Celkový počet požiadavok: {totalRequests}"); Console.WriteLine($"- Súbežné požiadavky: {concurrentRequests}"); Console.WriteLine($"- HTTP Keep-Alive: {(useKeepAlive ? "Povolené" : "Zakázané")}"); 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("Začíname 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žiadavka zlyhala so stavom: {response.StatusCode}"); } } catch (Exception ex) { System.Threading.Interlocked.Increment(ref completedRequests); System.Threading.Interlocked.Increment(ref failedRequests); Console.WriteLine($"Požiadavka zlyhala: {ex.Message}"); } finally { semaphore.Release(); } })); } await Task.WhenAll(tasks); stopwatch.Stop(); Console.WriteLine("\nTest dokončený!"); Console.WriteLine($"Celkový čas: {stopwatch.Elapsed.TotalSeconds:F2} sekúnd"); Console.WriteLine($"Dokončené požiadavky: {completedRequests}"); Console.WriteLine($"Úspešné požiadavky: {successfulRequests}"); Console.WriteLine($"Zlyhané požiadavky: {failedRequests}"); Console.WriteLine($"Požiadavky 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)]; } }
1. Prehľad
Táto konzolová aplikácia v jazyku C# testuje zaťaženie HTTP(S) SMS API endpointu odosielaním súbežných JSON požiadaviek, meraním výkonnostných metrík ako:
- Požiadavky za sekundu (RPS)
- Úspešnosť/neúspešnosť
- Celkový čas vykonania
A. Nastavenie a konfigurácia
Generovanie náhodných dát:
sampleMessages
: Preddefinovaná sada vzorových SMS správ pre realistické testovanie.GenerateRandomPhoneNumber()
: Vytvára fiktívne telefónne čísla (napr.+1234567890
).GetRandomMessage()
: Vyberie náhodnú správu zsampleMessages
.
Argumenty príkazového riadka:
Program <baseUrl> <totalRequests> <concurrentRequests> [useKeepAlive]
- Validuje vstupy (formát URL, kladné celé čísla pre počty požiadaviek).
- Konfiguruje nastavenia HTTP klienta (časový limit, keep-alive, user-agent).
B. Konfigurácia HTTP klienta
HttpClient
prispôsobenie:
MaxConnectionsPerServer
: Obmedzuje paralelné pripojenia k serveru.ConnectionClose
/keep-alive
: Prepína HTTP trvalé pripojenia.- Časový limit: 30 sekúnd na požiadavku.
- Hlavičky: Nastaví
User-Agent
aAccept: application/json
.
C. Vykonanie testu zaťaženia
Riadenie súbežnosti:
- Používa
SemaphoreSlim
na obmedzenie súbežných požiadaviek (napr. 50 naraz). - Async/await (
Task.Run
) pre neblokujúce I/O operácie.
Postup požiadavky:
- Serializuje JSON payload s náhodnými telefónnymi číslami/správami:
{ "sender": "+0000000", "gsm": "+1234567890", "text": "Ahoj, toto je testovacia správa.", "usrClient": "Pruebas", "pasClient": "Pruebas" }
- Odosiela POST požiadavku na špecifikovaný endpoint.
- Sleduje úspechy/neúspechy pomocou
Interlocked
pre bezpečné počítadlá vlákien.
D. Metriky a reportovanie
- Stopky: Meria celkovú dobu trvania testu.
- Výstupné metriky:
- Celkový uplynutý čas.
- Dokončené/úspešné/zlyhané požiadavky.
- Požiadavky za sekundu (RPS):
totalRequests / elapsedTime
.
- Bezpečnosť vlákien:
Interlocked.Increment
zabezpečuje atomické aktualizácie počítadiel naprieč vláknami.SemaphoreSlim
zabraňuje preťaženiu serveru alebo klienta.
- Spracovanie chýb:
- Zachytáva výnimky (napr. časové limity, sieťové chyby) a zaznamenáva zlyhania.
- Validuje HTTP stavové kódy (
IsSuccessStatusCode
).
- Optimalizácia výkonu:
- Opätovne používa
HttpClient
(najlepšia prax pre vyhnutie sa vyčerpaniu TCP portov). - Konfigurovateľný keep-alive pre simuláciu reálnych scenárov.
- Opätovne používa
Na testovanie SMS API na http://localhost:8080/sms
s 1 000 celkovými požiadavkami (50 súbežných, keep-alive povolený):
Program http://localhost:8080/sms 1000 50 true
Výstup:
Test dokončený! Celkový čas: 12.34 sekúnd Dokončené požiadavky: 1000 Úspešné požiadavky: 980 Zlyhané požiadavky: 20 Požiadavky za sekundu: 81.045. Prečo je to dôležité
- Benchmarking: Identifikuje úzke miesta API (napr. limity serveru, sieťové oneskorenia).
- Regresné testovanie: Zaisťuje, že výkon sa po aktualizáciách nezhorší.
- Plánovanie kapacity: Určuje maximálne zaťaženie, ktoré služba zvládne.
- Pridať logiku opakovania pre prechodné zlyhania.
- Podpora autentifikácie (OAuth/API kľúče).
- Export výsledkov do CSV/JSON pre analýzu.
Tento nástroj je ideálny pre vývojárov a DevOps tímy validujúce výkonnosť SMS brány pred nasadením.
HTTP Speed Test for REST SMS Services poskytuje robustné, ľahko použiteľné riešenie pre benchmarking výkonu a spoľahlivosti SMS API endpointov. Simuláciou reálneho prevádzkového zaťaženia s konfigurovateľnou súbežnosťou, generovaním náhodných správ a podrobnými výkonnostnými metrikami pomáha tento nástroj vývojárom a QA tímom identifikovať úzke miesta, validovať škálovateľnosť a optimalizovať odozvu API. Či už testujete nové nasadenie alebo audit existujúcej SMS brány, zahrnutý zdrojový kód v jazyku C# ponúka flexibilitu pre prispôsobenie, kým predkompilovaný spustiteľný súbor poskytuje rýchle, akčné poznatky. Stiahnite si tento nástroj ešte dnes a zaistite, aby vaša SMS služba spĺňala očakávania výkonu pri zaťažení—a poskytovala bezproblémový zážitok koncovým používateľom.
More information