HTTP test brzine za REST SMS usluge
Trebate izmjeriti performanse svoje SMS usluge temeljene na HTTP-u? HTTP test brzine za REST SMS usluge moćan je alat dizajniran za procjenu brzine i pouzdanosti vaših JSON/REST API krajnjih točaka. Ova alata za preuzimanje omogućuje vam simuliranje SMS zahtjeva velikog obima, praćenje stope uspjeha i izračun zahtjeva u sekundi—pomažući vam optimizirati performanse poslužitelja pod opterećenjem. Bilo da testirate opterećenje lokalnog razvojnog okruženja ili mjerite performanse produkcijskog SMS pristupnika, ovaj alat pruža jasne metrike za ukupne zahtjeve, istovremene veze i učinkovitost HTTP Keep-Alivea. Preuzmite gotovo rješenje u C#-u ili integrirajte dostupni izvorni kod u svoj tijek testiranja za preciznu analizu performansi API-ja.
Preuzimanje
HttpSpeedTest.zipPrimjer korištenja
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 = { "Pozdrav, ovo je testna poruka.", "Testiranje performansi HTTP poslužitelja.", "Mjerenje zahtjeva u sekundi za JSON API.", "Nasumični sadržaj poruke za testiranje opterećenja.", "Još jedna testna poruka s drugačijim sadržajem.", "Provjera kapaciteta poslužitelja pod opterećenjem.", "Koliko zahtjeva može poslužitelj podnijeti?", "Stresno testiranje SMS API krajnje točke.", "Ova poruka je automatski generirana.", "Zadnja testna poruka u skupu primjera." }; static async Task Main(string[] args) { Console.WriteLine("Tester performansi JSON API-ja HTTP poslužitelja"); Console.WriteLine("---------------------------------------"); if (args.Length < 3) { Console.WriteLine("Upotreba: Program[koristiKeepAlive]"); Console.WriteLine("Primjer: Program http://198.50.122.178:8080 1000 50 true"); Console.WriteLine("Primjer: Program https://api.example.com/sms 5000 100 false"); Console.WriteLine("Primjer: 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("Nevažeći osnovni URL. Mora biti valjan HTTP ili HTTPS URL."); return; } if (!int.TryParse(args[1], out int totalRequests) || totalRequests <= 0) { Console.WriteLine("Nevažeća vrijednost za ukupniZahtjevi. Mora biti pozitivan cijeli broj."); return; } if (!int.TryParse(args[2], out int concurrentRequests) || concurrentRequests <= 0) { Console.WriteLine("Nevažeća vrijednost za istovremeniZahtjevi. Mora biti pozitivan cijeli broj."); return; } bool useKeepAlive = args.Length > 3 && bool.TryParse(args[3], out bool keepAlive) && keepAlive; Console.WriteLine($"Parametri testa:"); Console.WriteLine($"- Osnovni URL: {baseUrl}"); Console.WriteLine($"- Ukupni zahtjevi: {totalRequests}"); Console.WriteLine($"- Istovremeni zahtjevi: {concurrentRequests}"); Console.WriteLine($"- HTTP Keep-Alive: {(useKeepAlive ? "Omogućeno" : "Onemogućeno")}"); 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("Početak testiranja..."); 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 = GenerirajNasumičniBrojTelefona(), text = DohvatiNasumičnuPoruku(), 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($"Zahtjev nije uspio sa statusom: {response.StatusCode}"); } } catch (Exception ex) { System.Threading.Interlocked.Increment(ref completedRequests); System.Threading.Interlocked.Increment(ref failedRequests); Console.WriteLine($"Zahtjev nije uspio: {ex.Message}"); } finally { semaphore.Release(); } })); } await Task.WhenAll(tasks); stopwatch.Stop(); Console.WriteLine("\nTestiranje završeno!"); Console.WriteLine($"Ukupno vrijeme: {stopwatch.Elapsed.TotalSeconds:F2} sekundi"); Console.WriteLine($"Završeni zahtjevi: {completedRequests}"); Console.WriteLine($"Uspješni zahtjevi: {successfulRequests}"); Console.WriteLine($"Neuspješni zahtjevi: {failedRequests}"); Console.WriteLine($"Zahtjeva u sekundi: {totalRequests / stopwatch.Elapsed.TotalSeconds:F2}"); } static string GenerirajNasumičniBrojTelefona() { return $"+{random.Next(100, 999)}{random.Next(1000000, 9999999)}"; } static string DohvatiNasumičnuPoruku() { return sampleMessages[random.Next(sampleMessages.Length)]; } }
Objašnjenje koda
1. PregledOva C# konzolna aplikacija testira opterećenje HTTP(S) SMS API krajnje točke slanjem istovremenih JSON zahtjeva, mjereći metriku performansi poput:
- Zahtjeva u sekundi (RPS)
- Stope uspjeha/neuspjeha
- Ukupno vrijeme izvršavanja
2. Ključne komponente
A. Postavljanje i konfiguracija
Generiranje nasumičnih podataka:
sampleMessages
: Unaprijed definirani skup SMS uzoraka za realistično testiranje.GenerateRandomPhoneNumber()
: Stvara lažne telefonske brojeve (npr.+1234567890
).GetRandomMessage()
: Bira nasumičnu poruku izsampleMessages
.
Argumenti naredbenog retka:
Program <baseUrl> <totalRequests> <concurrentRequests> [useKeepAlive]
- Provjerava unose (URL format, pozitivni cijeli brojevi za broj zahtjeva).
- Konfigurira postavke HTTP klijenta (vremensko ograničenje, keep-alive, user-agent).
B. Konfiguracija HTTP klijenta
HttpClient
Prilagodba:
MaxConnectionsPerServer
: Ograničava paralelne veze sa serverom.ConnectionClose
/keep-alive
: Uključuje/isključuje trajne HTTP veze.- Vremensko ograničenje: 30 sekundi po zahtjevu.
- Zaglavlja: Postavlja
User-Agent
iAccept: application/json
.
C. Izvršavanje testa opterećenja
Kontrola istovremenosti:
- Koristi
SemaphoreSlim
za ograničavanje istovremenih zahtjeva (npr. 50 odjednom). - Async/await (
Task.Run
) za neblokirajuće I/O operacije.
Tok zahtjeva:
- Serijalizira JSON teret s nasumičnim telefonskim brojevima/porukama:
{ "sender": "+0000000", "gsm": "+1234567890", "text": "Pozdrav, ovo je testna poruka.", "usrClient": "Pruebas", "pasClient": "Pruebas" }
- Šalje POST zahtjev na određenu krajnju točku.
- Prati uspjehe/neuspjehe koristeći
Interlocked
za sigurne brojače u nitima.
D. Metrike i izvješćivanje
- Stopwatch: Mjeri ukupno trajanje testa.
- Izlazne metrike:
- Ukupno proteklo vrijeme.
- Dovršeni/uspješni/neuspješni zahtjevi.
- Zahtjevi u sekundi (RPS):
totalRequests / elapsedTime
.
3. Tehničke značajke
- Sigurnost niti:
Interlocked.Increment
osigurava atomska ažuriranja brojača preko niti.SemaphoreSlim
sprječava preopterećenje servera ili klijenta.
- Rukovanje greškama:
- Hvata iznimke (npr. vremenska ograničenja, mrežne greške) i bilježi neuspjehe.
- Provjerava HTTP statusne kodove (
IsSuccessStatusCode
).
- Optimizacije performansi:
- Ponovno koristi
HttpClient
(najbolja praksa za izbjegavanje iscrpljivanja TCP portova). - Konfigurabilni keep-alive za simulaciju stvarnih scenarija.
- Ponovno koristi
4. Primjer upotrebe
Za testiranje SMS API-ja na http://localhost:8080/sms
s 1.000 ukupnih zahtjeva (50 istovremenih, keep-alive omogućen):
Program http://localhost:8080/sms 1000 50 true
Izlaz:
Test završen! Ukupno vrijeme: 12.34 sekunde Dovršeni zahtjevi: 1000 Uspješni zahtjevi: 980 Neuspješni zahtjevi: 20 Zahtjevi u sekundi: 81.04
5. Zašto je ovo važno
- Mjerenje performansi: Identificira uska grla API-ja (npr. ograničenja servera, mrežno kašnjenje).
- Regresijsko testiranje: Osigurava da se performanse ne pogoršavaju nakon ažuriranja.
- Planiranje kapaciteta: Određuje maksimalno opterećenje koje servis može podnijeti.
6. Moguća poboljšanja
- Dodavanje logike ponovnog pokušaja za prolazne neuspjehe.
- Podrška za autentifikaciju (OAuth/API ključevi).
- Izvoz rezultata u CSV/JSON za analizu.
Ovaj alat je idealan za developere i DevOps timove koji žele provjeriti performanse SMS pristupnika prije implementacije.
Zaključak
HTTP test brzine za REST SMS usluge pruža robusno, jednostavno rješenje za mjerenje performansi i pouzdanosti SMS API krajnjih točaka. Simuliranjem stvarnog prometa s konfigurabilnom istovremenošću, generiranjem nasumičnih poruka i detaljnim metrikama performansi, ovaj alat pomaže developerima i QA timovima identificirati uska grla, provjeriti skalabilnost i optimizirati odzivnost API-ja. Bilo da testirate opterećenje nove implementacije ili revidirate postojeći SMS pristupnik, uključeni C# izvorni kod nudi fleksibilnost za prilagodbu, dok unaprijed izgrađena izvršna datoteka pruža brze, djelotvorne uvide. Preuzmite alat danas kako biste osigurali da vaša SMS usluga ispunjava očekivanja performansi pod opterećenjem—i pružite besprijekorno iskustvo krajnjim korisnicima.
More information