Greitaveikos testavimas - klevas.mif.vu.ltadamonis/tikv/1314r/pr/PerformanceLoadStress... · –...

Preview:

Citation preview

Greitaveikos testavimas

Artūras Mačiulis

MIF, Vilnius, 2013

Ar tikrai vykdomas greitaveikos testavimas IT projektuose?

● SODRA● LAMA BPO● Vilniaus transporto elektroninio bilieto sistema● VMI● t.t.

Bet padėtis gerėja

● Jau atsiranda pranešimai– “Dėl per didelio užklausų kiekio, sistema negali

apdoroti Jūsų užklausos”

– “Jūsų užklausą apdorosime vėliau”

– “Bandykite dar kartą”

O dabar rimčiau

● Kada vykdome greitaveikos testavimą?– Dažniausiai tik prieš projekto paleidimą, kai kažkas

turi pamatyti greitaveikos rezultatus ir leisti diegtis po testavimo rezultatų

● arba pagerinus sistemos veikimo rezultatus● arba pakeitus reikalavimus..

O kada būtų gerai daryti greitaveikos testavimą

● Sistemos gyvavimo metu – kad naujas funkcionalumas ar klaidos pataisymas ypač nesulėtino sistemos

● Migruojant į naujas architektūrinių komponentų versijas (DB, App serverius)

O ar darome?

Bet va gavom užduotį

● Ištestuoti išleidžiamą mūsų suprogramuotą sistemą

8

Matome, kad yra šios greitaveikos testavimo kategorijos

● Greitaveikos testas (angl. “Performance test”)● Apkrovos testas (angl. “Load test”)● Stresinės situacijos testas (angl. “Stress

test”)

9

Greitaveikos testavimas (angl. “Performance test”)

● Nustatomas arba tikrinamas PĮ greitis, plečiamumas ir stabilumas tikrinant kaip jie veikia

● Tikrinam pasiekimą iki reikalavimų

10

Apkrovos testas(angl. “Load test”)

● patikrinamas veikimas normaliomis sąlygomis bei didžiausio apkrovimo sąlygomis– “Empty task”

● Randami buferio perpildymai, šiukšlės darbinėje atmintyje (“memory leaks”) ar blogas atminties valdymas

11

Stresinės situacijos testas (angl. “Stress test”)

● nustatoma arba tikrinama PĮ elgsena, kai apkrova siekia maximumą arba virš jo– ir kaip po to sistema atsistato

12

Kurį / kuriuos darysime?

13

Va tokia padėtis

● Architektai “paskaičiavo”, kad 2 serverių po 16 CPU, 64 GB RAM ir greitų diskų turėtų pakakti reikalavimams įgyvendinti (bet jų dar nėra – ech tas PM ir tie vėluojantys užsakymai...)

● Testavimo aplinka turi “serveriuką” su 4 CPU, 4 GB RAM

14

O kas belieka

● Mėginam reikalavimus pasiekti arba bent jau artėti prie jų testavimo aplinkoje

● Nepamirštant Amdahl'o dėsnio– Gijų varžymasis ir sinchronizavimas, IO

15

Pirmiausia pamėginam ištestuoti komponentų greitaveiką

● Randam TPS (transactions per second)● Tinklo parametrai (vidinis ir išorinis tinklas) –

latency, throughput, response time

16

Wait!

● Reikia tam pasiruošti!– Konfigūracijos

● OS● Sistemos parametrai

– Pritaikyti sistemą● Loginimas● Profaileriai

– Saugykla, kur saugosim konfigūracijų pasikeitimus pagal laiką bei testavimo rezultatus

17

O gal nedarom?

18

OK, darom. Mėginam JMeter

● Nemokamas● “Pure” Java● JMeter negali veikti kaip naršyklė● Turi tiek grafinę, tiek komandinės eilutės

sąsają● JMeter plėtiniai

– https://code.google.com/p/jmeter-plugins

19

JMeter vaizdas

20

JMeter standartiškai turi

● Gijų grupes (thread groups)● Logikos valdiklius (logic controllers)● Užklausų vykdytojus (samplers)● Įvykių apdorotojus (listeners)● Laikmačius (timers)● Sąlygų tikrintojus (assertions)● Konfigūracijas (configurations)

21

Gijų grupė

22

JMeter gijų

grupės plėtiniai

23

JMeter gijų

grupės plėtiniai

24

Logikos valdikliai

● Loop Controller● Once Only Controller● Random Controller● Random Order Controller● Runtime Controller● If Controller● While Controller● Switch Controller● ForEach Controller● Include Controller● Transaction Controller● Recording Controller

25

Užklausų vykdytojai

● FTP Request● HTTP Request● JDBC Request● Java Request● SOAP/XML-RPC Request● LDAP Request● Access Log Sampler● TCP Sampler● JMS Publisher / Subscriber/ Point-to-Point● JUnit Request● Mail Reader Sampler● SMTP Sampler● OS Process Sampler

26

JMeter leidžia testuose apsirašyti kintamuosius ir funkcijas

● ${VARIABLE}● ${__functionName(var1,var2,var3)}

– __threadNum

– __javaScript

– __regexFunction

– __Xpath

– __Random

– __RandomString

27

Pradžiai to pakaks vykdant greitaveikos testavimą

● Testuosime tik izoliuotas sistemos vietas– Testai turi būti statitiški

– Rasime rezultatus ir jie bus matuojami paleidus tą patį testą tuo pačiu scenarijumi

● Problemos– Bendra aplinka su kitomis sistemomis, dalinami resursai

– Cache'inimas - šiuo momentu jis turėtų būti išjungtas, jeigu įmanoma

– Integracijas geriausia “mockinti”

28

Apkrovos testavimui reikia pamėginti sugeneruoti kuo realesnę apkrovą

● Galimybės, kaip galima pasiekti duomenis, reikalingus testavimo pradžiai:– CSV failas

– JDBC

– LDAP

– Kita (priklausomai nuo to kaip ir kur saugomi duomenys)

29

Galim pasiimti duomenis iš CSV failo

30

JDBC užklausa

31

Išorinė integracija

● Mūsų sistema integracijai su kitomis sistemos gali teikti paslaugas per skirtingus protokolus:– SOAP

– JMS

– SMTP

– TCP / UDP

● Galim apsimesti klientais

32

SOAP užklausa

33

JMS pranešimas

34

TCP / UDP prisijungimų vykdymas

35

OS komandų kvietimas

36

Tada mėginam analizuoti rezultatus

37

Rezultatų gavimas ir apdorojimas

● Pirmiausia būtų gerai įsitiktinti, kad testai veikia tinkamai ir be klaidų– Rezultatų peržiūra

– Atsakymų kodų tikrinimas

– Sąlygų tikrintojai (REGEXP, Xpath)

● Statistinė duomenų analizė– Reiktų pasiruošti tokią aplinką, kad būtų galima

greitai ir be didelių analizių matyti pokyčius

38

Rezultatų medžio peržiūra

39

Standartinis rezultatų grafikas (naudoti retai)

40

Transakcijos per sekundę

41

Apjungti rezultatai

42

Ko turėtume siekti vykdydami šį testavimą

● Rasti “butelio kamštelius” ir juos pašalinti● Pažiūrėti kaip elgiasi sistema, kai nebeatlaiko

apkrovos (ir padaryti pranešimą, kad sistema jau “nebegali”)

● Patikrinti galimybę skaliuoti sistemą

43

Gauta žinutė iš PM

● Gauti produkciniai serveriai!

44

Pamėginam išskirstytą testavimą

● Testuojant su vienu klientu testavimą gali riboti tinklo pralaidumas

● Nepavyksta sukelti didelės apkrovos galingam serveriui

● Surenkami realistiškesni rezultatai

45

Veikimo schema

46

Vykdymo eiga

● Startuojami visi tarnai● Paleidžiamas šeimininkas

– jmeter.properties nurodomi tarnų IP adresai

● Sukuriamas testas su įvykiu apdorotojais, apjungiančiais testavimo rezultatus

● Galima startuoti po vieną šeimininką arba visus iš karto

47

Nuotolinio tarno paleidimas

48

Apribojimai ir patarimai

● Testavimo šeimininkas ir tarnai privalo būti tame pačiame potinklyje● Galima stebėti tinklo parametrus● Jeigu serveris nėra multi-procesorinis arba klasteris tai dažniausiai

pakanka 1 arba 2 klientų● Vienas JMeter klientas (kompiuteryje su 2-3Ghz CPU) gali vykdyti

300-600 gijų priklausomai nuo testo. Tik testams, kurie naudoja XML duomenų struktūras, tai negalioja, nes XML apdorojimas reikalauja daug procesoriaus resursų, todėl tai sulėtėja nuo 4 iki 10 kartų

● Stres testo metu geriausia palikti įjungtus tik svarbiausius įvykių apdorotojus

49

Serverių klasterio (angl. “cluster”) stebėjimas

● Standartiškai JMeter neturi galimybės stebėti testuojamų serverių statistikos išskyrus Tomcat serverį

● Naudingas sistemos plečiamumo testavimui● Galimybė patikrinti, ar apkrova skirstoma tolygiai● Serverio apkrovos parametrų rodymas: CPU,

RAM ir diskinės atminties, diskinio kaupiklio ir tinklo įeities ir išvesties parametrų stebėjimas

50

Serverių klasterio stebėjimo schema

51

52

Tai ką ryt diegiam į produkciją?

53

O kaip be alternatyvų...

● Blitz.io (“debesyse”, skirtas WEB)● AgileLoad (“debesyse”)● HP Load Runner● Visual Studio 2010 Ultimate edition● Ir kiti.

54

Išvados apie JMeter

● JMeter nemokamas, atviras, funkcionalus ir aktyviai palaikomas (daug problemų jau išspręsta, bet kyla ir naujų..)

● JMeter mėgsta galingus kompiuterius● Išskirstyto testavimo palaikymas padeda ištestuoti

galingus serverius● Galima naudoti ne tik greitaveikos testavimui (funkciniai,

integraciniai testai)● Testavimui nėra būtinos programavimo kalbos žinios● Pakankamai sudėtingas didelių testų palaikymas

55

Išvados apie greitaveikos testavimą

● Rajus laikui ir pastangoms – ekonominiai svertai dėl kainos

● Pasiektas rezultatas gali būti to vertas ir nauda neabejotina

● Be to reikia turėti kantrybės..

56

Literatūra

● http://www.softwaretestinghelp.com/what-is-performance-testing-load-testing-stress-testing/

● http://msdn.microsoft.com/en-us/library/bb924375.aspx

● http://jmeter.apache.org/● https://code.google.com/p/jmeter-plugins/● Paveikslai: http://google.lt

57

Klausimai?

Ar žinote, kad šiandien “Pasaulinė sveikinimosi diena”?

Recommended