Testaamisen pieniä oivalluksia: Python & JMeter
Kohta puoli vuotta automaatiokehittäjänä Knowitilla! Erityisen paljon olen tehnyt suorituskyky- ja kuormitustestausta käyttäen Javaan perustuvaa Apache JMeteriä. Vannoutuneena Pythonin kannattajana karsastin aluksi jo nimessä olevaa J:tä. Ajattelin, että opetteluun menisi paljon aikaa.
Alkuihmetyksen jälkeen testien tekeminen vaikutti melko simppeliltä: post-request, get-request ja niin edelleen. Yleensä automatisoitava testi on suoraviivainen sarja toimintoja, joiden simuloiminen onnistuu perusmenetelmillä.
Hiljattain törmäsin kuitenkin tapaukseen, jossa testiajon kulku riippui melko monimutkaisella tavalla muuttujista, joihin käsiksi pääseminen ei onnistunut tavallisilla JMeterin samplereilla. Samplereiden avulla voi kätevästi tehdä esimerkiksi http-pyyntöjä tai SQL-kyselyitä, mutta monimutkaisempien toimintojen suorittaminen on hankalaa. Toisaalta JMeterin BeanShell Processor -toiminnolla voi kirjoittaa mielivaltaisia Java-skriptejä testiin ja siten tehdä periaatteessa mitä tahansa.
Voi jos osaa. Oma Java-osaamiseni on kuitenkin korkeintaan tyydyttävällä tasolla. Noh, työtä pelkäämättömällä asenteella lähdin kuitenkin kirjoittamaan tarvittavaa logiikkaa. Muutaman tunnin uurastuksen jälkeen tilanne näytti pahalta. Kyllähän tämä Pythonilla sujuisi käden käänteessä, mutta Javassa jopa print ”Hello World” on System.out.print(”Hello World”).
Sitten tajusin voivani suorittaa BeanShell Processorissa komentorivin käskyjä. Voisin siis tehdä hankalan osan Pythonilla, suorittaa sen Beanshellillä ja tallentaa syntyvän tulosteen JMeterin muuttujaan. Nice! Ohessa on esimerkki toimivasta JMeter-Python-integraatiosta.
Esimerkissä käyttäjä määrittää suoritettavan Python-ohjelman nimen, sille syötettävän muuttujan (joka voi olla lista argumentteja), sekä sijainnin suhteessa testiskriptiin. Saatava tuloste tallennetaan JMeterin muuttujaan, joka myöhemmin ohjaa testien suorittamista.
Olin varsin innoissani saadessani tämän toimimaan. En ainoastaan siksi, että tämä ratkaisi käsillä olleen ongelman, vaan lisäksi koska tämä mahdollistaa Pythonin kaikkien hienojen kirjastojen ja ominaisuuksien käytön JMeterissä, joka puolestaan on mainio työkalu suorituskyky- ja kuormitustesteihin.
Juhani Teeriniemi on Aalto-yliopistosta valmistunut Tekniikan tohtori, joka keskittyy Knowitilla ohjelmistorobotiikan, testiautomaation ja suorituskykytestauksen kehittämiseen.
Lisää Knowitista: