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) хийчихсэн байхад хангалттай юм биш үү?

ҮГҮЙ. Хангалттай БИШ!!!

Учир нь аппликэйшнийг богино хугацаанд хэт ачааллах, урт хугацааны туршид тасралтгүй ажиллуулах, тооцоолсноос олон хэрэглэгч хэрэглэх зэрэг үед ямар нэг алдаа гарч ирэх магадлал өндөр байдаг. Тийм болохоор эртнээс тийм тохиолдол гарч магадгүй эсэхийг шалган, болсон ч хариу ямар арга хэмжээ авахаа тодорхойлох нь чухал.

6 types of performance testing

Performance тестийн төрлүүд нь :

  1. Stress : Жирийн үеэс давсан ачаалал ирэх тохиолдол
  2. Spike : Stress тестийн төрөл (subset), богино хугацаанд ХЭТ их ачаалал
  3. Scalability : Ачаалал ихсэх үед хүсэлт авч чадах эсэх
  4. Load : Жирийн болон ачаалал өндөр үе
  5. Endurance : Load тестийн төрөл (subset), урт хугацааны турш ачаалах
  6. 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 хэрхэн ажилладаг вэ?

  1. Тест явуулахад эхлээд request үүсгэж, server-лүү хүсэлтээ шиднэ.
  2. Server-с хүсэлтийн дагуу боловсруулалт хийж хариу өгнө
  3. JMeter хүсэлтийн хариуг хадгалж авна
    - Шаардлагатай бол response assertion хийнэ
  4. JMeter статистик гаргах бөгөөд тестийг цааш үргэлжлүүлнэ

гэх мэтчилэн тестийн төлөвлөгөөний (test plan) дагуу ажиллаж дуусаад үр дүнгийн report-г гаргана.

Introduction to JMeter

JMeter-г ажиллуулах

Дараах заавар нь Ubuntu 18.04 машинд зориулсан болно. Бусад системүүд ч бас онцын ялгаагүй бөгөөд заавар нь Google-д бий.

1. Install Java
Машин дээр чинь Java байгаа эсэхийг шалгаад байхгүй бол энэ зааврын дагуу суулгаарай.

Install Java (JRE) : `sudo apt install -y default-jre`
Check for successful java installation : `java -- version`

2. Download JMeter
Одоо гол юмаа суулгах хэрэгтэй. Apache JMeter-н өөрсдийнх нь албан ёсны вэб хуудасруу орон архивласан хувилбарыг татаж авах хэрэгтэй.

JMeter download from official website

Ubuntu-н хувьд архивласан файлаа задлаад л болоо. Аппликэйшнээ асаахын тулд тухайн газартаа bin хавтасруу орон ./jmeter.sh команд өгөхөд болно.

Run JMeter from cli : `./jmeter.sh`
JMeter GUI console (1st time launch)

Одоо ямар тест хийх вэ гэдгээ л тохируулчихвал бүх юм болчихно тэр. Хамгийн энгийнээр 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 хэрэглэгч гэсэн үг.

Test Plan → Add → Thread Groups → Thread Group

2. Дараа нь controller нэмнэ.
Sampler хэрхэн ажиллах тохиргоо. Хамгийн түгээмэл нь Runtime Controller.

Test Plan → Thread Group → Add → Logic Controller → Runtime controller

3. Controller-н дараа хамгийн чухал Sampler сонгож нэмнэ.
Ямар хүсэлт шидэхээ сонгоно (request). Ихэвчлэн HTTP request.

Runtime Controller → Add → Sampler → HTTP Request

4. Араас нь Assertion нэмж болно.
Явуулсан хүсэлтийн хариу зөв эсэхийг шалгахад зориулсан.

HTTP Request → Add → Assertion→ Response assertion

5. Тэгээд Listener нэмж өгснөөр хүсэлт явуулах үед юу болж байгааг хянах боломжтой болно.
Жишээ нь явуулсан хүсэлтийг харахын тулд View Results Tree ашиглана.

Runtime Controller → Add → Listener → View Results Tree

6. Start товчийг дарснаар тест эхэлнэ.

JMeter sample run : View results Tree

За тэгээд энэ хүрчихсэн бол JMeter ашиглаад тест хийчихлээ л гэсэн үг. Гэхдээ мэдээж хамгийн энгийн хэлбэр нь бөгөөд цаашлаад олон янзын тохиргоо, сонголтууд болон best practice-ууд бий.

Үндсэн тохиргоо дээр заавал мэдэх шаардлагатай хэдэн зүйлс бий. Тэр дундаас нэг чухал зүйл нь
— Thread Count : Хэдэн хэрэглэгчээр хүсэлт явуулах
— Loop Count : Нэг хэрэглэгч/thread хэдэн удаа хүсэлтээ явуулах

Number of Threads (users) VS Loop Count

Best practices

Дараах best practice нь олон хүмүүсийн, нийтлэлийн давхцлаас гаргаж ирсэн бөгөөд бүтэн жагсаалт биш болно.

CLI mode :
-n
: CLI mode-р ажиллуулах
-t : JMX тестийн файл

Parameterize test :
Тестийн оролтуудаа динамикаар өөрчлөх боломж

Sharing variables :
Ямар нэг утга, тохиргоог thread хооронд хуваалцах/share

Regular Expression Extractor :
Хүсэлтийн хариунаас мэдээлэл авах үед хэрэглэнэ. Аль болох бага хэмжээтэй байвал зүгээр бөгөөд XPath Extractor-с бага resource хэрэглэдэг.

Response assertion :
Хүсэлтийн хариуг хянах зориулалттай.

Response assertion : by Response code

View Results Tree :
Шидсэн хүсэлтийн хариуг request/response-н мэдээллийг харах боломж. Тест төлөвлөгөөгөө гаргаж байх үед ашиглах нь зөв. Жинхэнэ тестийн үед Disable эсвэл Errors ONLY болгож байгаад CLI mode-р ажиллуулах нь зөв.

View Results Tree : Log/Display Only → Errors

Generate report :
-e : HTML report гаргахын тулд
-l : JTL (JMeter Text Logs) файлын нэр
-o : Үүсэх файлын байрлах хавтас

JavaTest sampler :
Тухайн JMeter тест ажиллуулж байгаа машин нь хэр их request шидэж чадахыг үзэх зориулалттай Sampler-н төрөл.

Add → Sampler → Java Request

Жишээ болгож 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)

t2.medium : ~20k/s with 3gb RAM for JMeter & 20 seconds rampup & 12000 threads (10k real)

За тэгээд энэ хүргээд өнөөдрийн нийтлэлээ дуусгая. Зарим нэг туршилт (demo)-г доорх presentation дээрээс хараад GitHub : Gist-с кодыг нь хараад өөрөө туршиж үзэж болно шүү. Цаашаа ярих зүйл зөндөө л байна. Дараа илүү ахисан түвшний гэмээр Distributed Testing, Plugins, Constant Throughput Timer, Throughput Controller, Concurrency Thread Group, Read from & Write to CSV file нтрийн талаар бичнэ ээ.

Presentation on Canva :

--

--

Билигүн.Б (Програмч аав)
2B +1% better 2day

I am who I am... || өөрийнхөөрөө байхаас ичихгүй