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-Agent
aAccept: application/json
.
C. Provedení testu zatížení
Řízení souběžnosti:
- Používá
SemaphoreSlim
k 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í
Interlocked
pro 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.Increment
zajišťuje atomické aktualizace čítačů napříč vlákny.SemaphoreSlim
zabraň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.
More information