JMeter ашиглан performance тест хийх
2B | +1% better today | dev.005
Бид нарын хийсэн нөгөө гоё апп, вэбсайт, том систем маань шаардлагын дагуу, зөв, алдаагүй ажиллаж байна уу гэдгийг шалгахын тулд performance тестийг хийх хэрэгтэй болдог. Тэгвэл тэр “Performance тест” гэж яг юуг хэлдэг юм бэ?
Definition : Performance Testing is defined as a type of software testing to ensure that software applications will perform well under their expected workload.
Ерөнхийдөө бол тухайн аппликэйшн нь хийх ёстой зүйлээ сайн хийж чадаж байна уу гэдгийг шалгах тестийн төрөл гэсэн үг. Энэ тест нь дараах 3 дээр фокусладаг
- Хурд (Speed) : Хариу өгөх нь хурдан эсэх
- Өргөжих боломж (Scalability) : Хэр олон хэрэглэгч ашиглах
- Тогтвортой байдал (Stability) : Их бага ачааллаас үл хамааран тогтвортой ажиллах
Тэгвэл энэ тестийг яагаад хийх ёстой гэж? Нэгжийн тест (Unit Test), Интеграцийн тест (Integration Test), Хэрэглэгчийн тест (User Acceptance Test) хийчихсэн байхад хангалттай юм биш үү?
ҮГҮЙ. Хангалттай БИШ!!!
Учир нь аппликэйшнийг богино хугацаанд хэт ачааллах, урт хугацааны туршид тасралтгүй ажиллуулах, тооцоолсноос олон хэрэглэгч хэрэглэх зэрэг үед ямар нэг алдаа гарч ирэх магадлал өндөр байдаг. Тийм болохоор эртнээс тийм тохиолдол гарч магадгүй эсэхийг шалган, болсон ч хариу ямар арга хэмжээ авахаа тодорхойлох нь чухал.
Performance тестийн төрлүүд нь :
- Stress : Жирийн үеэс давсан ачаалал ирэх тохиолдол
- Spike : Stress тестийн төрөл (subset), богино хугацаанд ХЭТ их ачаалал
- Scalability : Ачаалал ихсэх үед хүсэлт авч чадах эсэх
- Load : Жирийн болон ачаалал өндөр үе
- Endurance : Load тестийн төрөл (subset), урт хугацааны турш ачаалах
- Volume : Тодорхой performance-г барин хэр олон хэрэглэгч авч чадах
Тэгвэл энэ performance тестийг хийдэг Apache JMeter, LoadRunner, WebLOAD, LoadUI, LoadView, NeoLoad гэх мэт олон хэрэгслүүд байдгаас өнөөдөр хамгийн алдартай нэг нь болох JMeter-н талаар ярих болно.
JMeter гэж юу вэ?
100% дээр Java хийгдсэн, нээлттэй эхийн програм. Функционал тестийг их хэмжээний ачаалал дор хэрхэн ажиллахыг шалгадаг. Анх вэб аппликэйшн тестлэхэд зориулагдсан боловч одоо өөр олон нэмэлт боломжтой болсон.
- Үндсэн вэб апп-с гадна FTP, SOAP, TCP, LDAP, Mail, Database via JDBC гэх мэт өөр тест боломжуудтай
- Documentation, Plugins болон Tutorial ихтэй
JMeter хэрхэн ажилладаг вэ?
- Тест явуулахад эхлээд request үүсгэж, server-лүү хүсэлтээ шиднэ.
- Server-с хүсэлтийн дагуу боловсруулалт хийж хариу өгнө
- JMeter хүсэлтийн хариуг хадгалж авна
- Шаардлагатай бол response assertion хийнэ - JMeter статистик гаргах бөгөөд тестийг цааш үргэлжлүүлнэ
гэх мэтчилэн тестийн төлөвлөгөөний (test plan) дагуу ажиллаж дуусаад үр дүнгийн report-г гаргана.
JMeter-г ажиллуулах
Дараах заавар нь Ubuntu 18.04 машинд зориулсан болно. Бусад системүүд ч бас онцын ялгаагүй бөгөөд заавар нь Google-д бий.
1. Install Java
Машин дээр чинь Java байгаа эсэхийг шалгаад байхгүй бол энэ зааврын дагуу суулгаарай.
2. Download JMeter
Одоо гол юмаа суулгах хэрэгтэй. Apache JMeter-н өөрсдийнх нь албан ёсны вэб хуудасруу орон архивласан хувилбарыг татаж авах хэрэгтэй.
Ubuntu-н хувьд архивласан файлаа задлаад л болоо. Аппликэйшнээ асаахын тулд тухайн газартаа bin хавтасруу орон ./jmeter.sh
команд өгөхөд болно.
Одоо ямар тест хийх вэ гэдгээ л тохируулчихвал бүх юм болчихно тэр. Хамгийн энгийнээр webhook.site руу GET хүсэлт явуулж үзье. Тэгэхийн тулд test plan-аа үүсгэх хэрэгтэй. Тестийн бүх үйлдлүүдийг агуулагч.
Test plan : This consists of all the steps JMeter would execute. It may contain 1 or more Thread Groups, Logic Controllers, Samplers, Pre-Processor, Post-Processor & Assertions.
1. Эхлээд Thread Group нэмнэ.
Нэг thread нь 1 хэрэглэгч гэсэн үг.
2. Дараа нь controller нэмнэ.
Sampler хэрхэн ажиллах тохиргоо. Хамгийн түгээмэл нь Runtime Controller.
3. Controller-н дараа хамгийн чухал Sampler сонгож нэмнэ.
Ямар хүсэлт шидэхээ сонгоно (request). Ихэвчлэн HTTP request.
4. Араас нь Assertion нэмж болно.
Явуулсан хүсэлтийн хариу зөв эсэхийг шалгахад зориулсан.
5. Тэгээд Listener нэмж өгснөөр хүсэлт явуулах үед юу болж байгааг хянах боломжтой болно.
Жишээ нь явуулсан хүсэлтийг харахын тулд View Results Tree ашиглана.
6. Start товчийг дарснаар тест эхэлнэ.
За тэгээд энэ хүрчихсэн бол JMeter ашиглаад тест хийчихлээ л гэсэн үг. Гэхдээ мэдээж хамгийн энгийн хэлбэр нь бөгөөд цаашлаад олон янзын тохиргоо, сонголтууд болон best practice-ууд бий.
Үндсэн тохиргоо дээр заавал мэдэх шаардлагатай хэдэн зүйлс бий. Тэр дундаас нэг чухал зүйл нь
— Thread Count : Хэдэн хэрэглэгчээр хүсэлт явуулах
— Loop Count : Нэг хэрэглэгч/thread хэдэн удаа хүсэлтээ явуулах
Best practices
Дараах best practice нь олон хүмүүсийн, нийтлэлийн давхцлаас гаргаж ирсэн бөгөөд бүтэн жагсаалт биш болно.
CLI mode :
-n : CLI mode-р ажиллуулах
-t : JMX тестийн файл
./jmeter.sh -n -t demo-1.jmx
Parameterize test :
Тестийн оролтуудаа динамикаар өөрчлөх боломж
// Test duration default 60 seconds if NOT set
DURATION=${__P(duration,60)}
Sharing variables :
Ямар нэг утга, тохиргоог thread хооронд хуваалцах/share
// Sharing for local threads (use variable)
vars.get("HOST");
vars.put("MSG","Successful");// Sharing for multiple threads (use property)
String value = JMeterUtils.getPropDefault("name","");
JMeterUtils.setProperty("name", "value");
Regular Expression Extractor :
Хүсэлтийн хариунаас мэдээлэл авах үед хэрэглэнэ. Аль болох бага хэмжээтэй байвал зүгээр бөгөөд XPath Extractor-с бага resource хэрэглэдэг.
// extract what’s between value=" and "
// .+? => extract any character (except newline chars: \n \r)
Regex Expression: value="(.+?)"
Response assertion :
Хүсэлтийн хариуг хянах зориулалттай.
View Results Tree :
Шидсэн хүсэлтийн хариуг request/response-н мэдээллийг харах боломж. Тест төлөвлөгөөгөө гаргаж байх үед ашиглах нь зөв. Жинхэнэ тестийн үед Disable эсвэл Errors ONLY болгож байгаад CLI mode-р ажиллуулах нь зөв.
Generate report :
-e : HTML report гаргахын тулд
-l : JTL (JMeter Text Logs) файлын нэр
-o : Үүсэх файлын байрлах хавтас
./jmeter.sh -n -t demo-1.jmx -l demo-1.jtl -e -o HTML-report-dir/
JavaTest sampler :
Тухайн JMeter тест ажиллуулж байгаа машин нь хэр их request шидэж чадахыг үзэх зориулалттай Sampler-н төрөл.
Жишээ болгож AWS : EC2 t2.micro, t2.small, t2.medium instance дээр туршиж үзэхэд дараах хариу гарсан болно.
- t2.micro : 1 vCPU & 1 GB RAM = ~4k/s [768m RAM for JMeter]
- t2.small : 1 vCPU & 2 GB RAM = ~12k/s [1g RAM for JMeter]
- t2.medium : 2 vCPU & 4 GB RAM = ~20k/s [3g RAM for JMeter]
Ажлын машин маань бас ойролцоогоор 10'000 threads үүсгэж чадан ~28k хүсэлтийг авч чадаж байна лээ. (4 CPU & 8GB RAM)
За тэгээд энэ хүргээд өнөөдрийн нийтлэлээ дуусгая. Зарим нэг туршилт (demo)-г доорх presentation дээрээс хараад GitHub : Gist-с кодыг нь хараад өөрөө туршиж үзэж болно шүү. Цаашаа ярих зүйл зөндөө л байна. Дараа илүү ахисан түвшний гэмээр Distributed Testing, Plugins, Constant Throughput Timer, Throughput Controller, Concurrency Thread Group, Read from & Write to CSV file нтрийн талаар бичнэ ээ.
Presentation on Canva :