Uusin Tech Radar -kysely osoitti, että Apache JMeter on suosituin kuormitustestauksen työkalu Cinian ohjelmistoprojekteissa. Locustista on tullut sille varteenotettava vaihtoehto: sen käyttö on noussut kahdessa vuodessa läheltä nollaa jopa 40 %:iin projekteista.
Kutsuimme kaksi automaatiotestauksen asiantuntijaa puntaroimaan kuormitustestauksen vaatimuksia ja sitä, miten JMeter ja Locust haasteisiin vastaavat.
Nico Ådahl työskentelee Test Automation Specialistina vaativien ohjelmistoprojektien parissa. Senior Software Engineer Saara Sinervä suunnittelee ja toteuttaa testausta pitkissä hankkeissa: tällä hetkellä IoT-projektissa, jossa mittauslaitteet ovat ohjelmistoratkaisun ytimessä.
JMeter ja Locust pähkinänkuoressa
Apache JMeter on Java-pohjainen desktop-sovellus, jota voi käyttää usean tyyppisten asiakas-/palvelinsovellusten, kuten verkkopalvelujen, tietokantojen ja FTP-palvelinten kuormitustestaamiseen. Se on lisenssivapaa avoimen lähdekoodin työkalu. Graafiseen käyttöliittymään (GUI) pohjautuva JMeter ei edellytä koodiosaamista. Ominaisuudet saattavat asettaa rajoitteita, kun on tarve rakentaa monimutkaisia testiskriptejä tai testata suuria käyttäjäkuormia.
Locust on Python-pohjainen automaatiotestauksen työkalu kuormitustestaukseen ja käyttäjäsimulaatioiden tekemiseen (ns. swarm testing). JMeterin tavoin sekin pohjautuu avoimeen lähdekoodiin ja on käytettävissä maksutta. Locust mahdollistaa korkeidenkin käyttäjäkuormien testaamisen. Tarjolla on dokumentaatioita ja valmiita kirjastoja, joiden avulla luonnistuvat sekä yksinkertaiset että kompleksiset testit. Locustin käyttö edellyttää silti aina jonkin verran koodaustaitoa.
“Avoimen lähdekoodin teknologioilla tehdyt kuormitustestikokonaisuudet ovat täysin siirrettävissä, eli ei muodostu toimittajaloukkua. Voit laittaa testit ajoon missä tahansa, jos se on asiakkaan projektissa tarpeen. Jos valitset jonkin maksullisen teknologian automaattiseen suorituskykytestaukseen, olet usein sidottu siihen. Siksi meillä on päädytty käyttämään juuri avoimen lähdekoodin vaihtoehtoja”, Nico Ådahl avaa.
Miten kuormitustestauksen tarpeet määritellään?
“Parasta on, jos testaus on mukana jo alkuvaiheen keskusteluissa asiakkaan kanssa. Jo silloin pystyy näkemään, millainen käyttäjäkunta sovelluksella tulee olemaan ja minkälaisia vaatimuksia suorituskyvylle asetetaan”, Ådahl kuvailee.
“Yhdessä asiakkaan kanssa määrittelemme, minkälaista kuormaa järjestelmän pitää kestää”, Saara Sinervä täydentää. “IoT-projektissa, jossa nyt olen mukana, tehtiin ensimmäinen, proof of concept -tyyppinen kuormitustestaus jo hyvin alkuvaiheessa. Tarkoituksena oli varmistaa, että itse rakennettu, kokonaan uudenlainen arkkitehtuuri toimii, kuten pitää. Toisaalta olen ollut tekemässä chat-sovellusta, jossa käyttäjäkuormitusta simuloitiin vasta aika loppupäässä kehitystä, kun arkkitehtuurin perusasiat oli jo muilla tavoin koeteltu.”
Lue myös: Arkkitehdin suunnitelmat validoidaan testaajan työpöydällä
JMeter riittää hyvin, kun käyttäjiä on rajallinen määrä
Monet Cinian ohjelmistoratkaisuista on räätälöity suljetulle joukolle tietyssä roolissa toimivia ammattilaisia. Silloin käyttäjäpiikit eivät ole testaajalle suuri huolenaihe:
“Pienimmillään yksittäisellä sovelluksella saattaa olla vain kourallinen käyttäjiä. Kustomoiduissa ammattilaispuolen ohjelmistoratkaisuissa ei yleensäkään puhuta miljoonista vaan ennemmin sadoista tai tuhansista käyttäjistä. Tällaisissa projekteissa kuormitustestausta pystyy hyvin tekemään käyttäjämäärillä, jota JMeter yhdellä instanssilla tukee. Toki jos mukana olisi hyvin paljon IoT-laitteita, jotka lähettävät dataa järjestelmään, sitä puolta olisi testattava. Datamäärät ovat kerrallaan pieniä, mutta aiheuttaisiko suuri määrä transaktioita backendiin haasteita?”
Locust skaalautuu käyttäjämäärien suhteen JMeteriä resurssitehokkaammin, Ådahl vertaa: “Se ei varaa yhtä threadia per käyttäjä, vaan event-pohjaisuuden avulla jo yhdellä prosessorilla (CPU) voidaan simuloida tuhansia käyttäjiä.”
Locust valikoitui Sinervän IoT-projektitiimin työkaluksi jo ensimmäisten arkkitehtuurisuunnitelmien perusteella: “Vaikka dataa liikkuisi laitetta kohden vähän, niin IoT-järjestelmissä kuorma ei ole aina tasainen. Sitä voi tulla purskeittain. Ja jos teemme järjestelmää, jossa yksittäinen mittari voi lähettää kymmeniä viestejä sekunnissa, ja mittareita on 10 000 tai 100 000, datan määrä ylipäänsä nousee jo aika suureksi.”
Siitymä omista konesaleista pilveen ei ratkaise kaikkia kapasiteettiongelmia, Sinervä muistuttaa: “Pilvialustoilla toimivat järjestelmät skaalautuvat periaatteessa loputtomasti, mutta käytännössä ne rajat pitää asettaa, sillä asiakkaan kukkaro on rajallinen. Kapasiteettia ei kannata varata pilvestä liikaakaan, ja siksi kuormitustestausta tarvitaan.”
JMeterin käyttöliittymä on graafinen, Locust perustuu Pythoniin
JMeteriä voi virittää konepellin alta, mutta päivittäinen työskentely tapahtuu graafisessa käyttöliittymässä (GUI).
“Työkaluna JMeter on hyvin simppeli käyttää ja sillä saa asioita aikaan kohtuunopeasti”, Ådahl kuvailee. “Se on yksi ensimmäisistä tähän tarkoituksiin kehitetyistä teknologioista ja on siksi monelle testaajalle ennestään tuttu. Se on toimintavarma ja moneen kertaan koeteltu. Vaikka se on Java-pohjainen, varsinaista Java-osaamista ei vaadita, sillä testiskriptien rakentaminen tapahtuu käyttöliittymässä. Locustissa vastaavaa, graafista käyttöliittymää ei ole. Jotkut toisaalta tykkäävät siitä juuri sen vuoksi. Työkaluna Locust on uudempi, ja kokeilemme parhaillaan sen soveltuvuutta eri projekteihin.”
Sinervälle Locust on tullut viime vuosien aikana JMeteriä tutummaksi: “Locust on lopulta aika kevyt käyttää. Kunhan kuormitustestien peruslogiikan sai ohjelmoitua Pythonilla, sitä on ollut helppoa varioida. Pythonin haltuunotto ei ole vaikeaa. Nykyisinhän se taitaa olla ensimmäisiä koodikieliä, joita ohjelmoinnin peruskursseilla käydään läpi.”
“Kun puhutaan testiautomaatiosta yleisemmin, Robot Framework on meillä Cinialla käytetyin työkalu. Se on Python-pohjainen, ja sitäkin kautta Locustin käyttö kuormitustestauksessa on alkanut nousta JMeterin vaihtoehdoksi”, Ådahl kommentoi.
Reaaliaikaista raportointia
Vaikka itse testaaminen automatisoituu, kuormitustestausten raporttien tulkinta on vielä pitkälti ihmistyötä.
Locustissa raportti muodostuu visuaalisesti selaimessa toimivalle, reaaliaikaiselle html-sivulle, johon kuvaajat piirtyvät, Sinervä kertoo:
“Kun olet speksannut käyttäjien määrän, Locust kasvattaa pikkuhiljaa kuorman täyteen. Pystyt näkemään esimerkiksi keskiarvon vasteajasta ja pyyntöjen määrän sekuntia kohti. Voit analysoida jokaista viestiä tulkitaksesi, mikä laite on lähettänyt virheviestin. Analyysia tehdään myös pilvialustan, kuten Azuren, lokeista. Locustin raportti pitää itse muistaa arkistoida, se ei tallennu automaattisesti.”
Ådahl jatkaa: “Myös JMeterissä on hyvät ja monipuoliset raportointityökalut, joiden avulla pääsee kohtalaisen vaivattomasti kaivamaan esiin pullonkaulat ja muut huomiota herättävät viiveet transaktioissa.”
JMeter vai Locust: Työkalu projektin vaatimuksista käsin
“Kuormitustestauksen tarpeet riippuvat täysin projektin laajuudesta ja vaatimuksista”, Ådahl summaa. Sopivin työkalu on valittava aina projektin tarpeista ja arkkitehtuurista käsin.
“Ketterään ohjelmistokehitykseen kuuluu, että testaus on mukana mahdollisimman alkuvaiheesta alkaen”, Sinervä muistuttaa. “Mitä aiemmin bugit löytää, sen parempi.”