NBomber yordamida .NET dasturini test qilish
NBomber - bu .NET dasturlarini turli xil nagruzka ostida test qilishga mo’ljallangan ochiq kodli tizim. NBomber shaxsiy foydalanish uchun bepul, dasturchilar uchun qulay va kengaytirilishi mumkin. NBomber-dan foydalanib, siz tizimlaringizning ishonchliligi, barqarorligini va performance-ini sinab ko'rishingiz va muammolarni oldindan aniqlab statistik ma'lumotlarni olishingiz mumkin. NBomber-ning asosiy xususiyatlaridan biri ma'lumotlar bazasi so'rovi, API so`rovlar yoki xabar brokeri kabi har qanday tizimni sinab ko'rish imkoniyatini ta'minlaydi.
Amaliy qadamlar
- .NET ilovasini yaratish
- NBomber-ni o'rnatish
- Test senariysi va bosqichini belgilash
- Testni ishga tushirish
.NET ilovasini yaratish
Men misol tariqasida .Net Web Api va uni test qilish uchun .Net Console ilovasini yarataman. Bu mavzudan tashqarida bo’lganligi uchun, batafsil to’xtalib o’tmayman. To’liq kodni bu yerdan ko’rishingiz mumkin.
NBomber-ni o'rnatish
NBomber va Http so`rovlar uchun qo’shimcha Nuget kutubxonasini o’rnatamiz:
Install-Package NBomber
Install-Package NBomber.Http
Test senariysi va bosqichini belgilash
Bosqichlar (Step) test senariyini qismlarga bo'lish va ularni alohida o'lchashga mo’ljallangan. Agar siz senariyni qismlarga bo'lishingiz shart bo'lmasa, hech qanday bosqichlarsiz faqat senariydan foydalanish ham mumkin. Ushbu misolda men bitta metodni test qilaman va shuning uchun senariyni bosqichlarga bo’lmagan holda yarataman va "/weatherforecast" API metodini test qilish senariysini belgilab olaman.
Senariy testlarini qurishda eng muhim rol o'ynaydi. Senariy foydalanuvching odatiy xatti-harakatini ifodalaydi. Boshqacha qilib aytganda, bu virtual foydalanuvchilar amal qiladigan ish jarayonidir.
using NBomber.Contracts.Stats;
using NBomber.CSharp;
using var httpClient = new HttpClient
{
BaseAddress = new Uri("http://localhost:5009"),
};
var scenario = Scenario.Create("fetch_weatherforecast_scenario", async context =>
{
try
{
var response = await httpClient.GetAsync("weatherforecast");
return response.IsSuccessStatusCode
? Response.Ok()
: Response.Fail();
}
catch
{
return Response.Fail();
}
})
Ushbu maqoladagi senariy testning qancha davom etishini, 1 soniyada bosqichlar necha marta bajarilishi va qancha vaqt qizishini belgilash imkonini beradi. Quyidagi kod qizdirish davomiyligini 1 daqiqaga, sekundiga 1 so'rovga o'rnatadi va sinov 11 daqiqa davom etadi (qizitish uchun 1 daqiqa, haqiqiy sinov uchun 10 daqiqa).
scenario
.WithWarmUpDuration(TimeSpan.FromSeconds(60))
.WithLoadSimulations(
Simulation.Inject(rate: 1, interval: TimeSpan.FromSeconds(1), during: TimeSpan.FromMinutes(10)));
NBomber Runner va hisobotlarni sozlash
Testni ishga tushirishdan oldin NBomber-ni yuklab, oldindan belgilangan senariyni ro'yxatdan o'tkazish kerak. Senariyni ro'yxatdan o'tkazish bilan birga, qanday hisobot formatlarini va hisobotlar qayerda saqlanishi kerakligini ham belgilash mumkin. NBomber hisobotni 4 ta formatini qo'llab-quvvatlaydi: Text, Csv, Html, Markdown
NBomberRunner
.RegisterScenarios(scenario)
.WithReportFileName("fetch_weatherforecast_report")
.WithReportFolder("weatherforecast_reports")
.WithReportFormats(ReportFormat.Html, ReportFormat.Md)
.Run();
Hisobotlar
Ilova ishlayotgan vaqtda u sinovlarning borishi haqida konsolga ba'zi asosiy telemetriyalarni yozadi
Ilova tugallangandan so'ng, konsol muvaffaqiyatli/muvaffaqiyatsiz qadamlar sarhisobi va har bir qadam uchun ba'zi ma'lumotlarni ko'rsatadi.
Nihoyat, agar siz yuklash bosqichida hisobot formatlarini sozlagan bo'lsangiz, sizda test bajarilishi haqida qo'shimcha ma'lumot beruvchi 1 yoki undan ortiq hisobot yaratiladi. Ushbu demo uchun hisobotlarni bin katalogidagi “weatherforecast_reports” papkasida topish mumkin.