Uji beban API sareng Locust

Uji beban API sareng Locust

Uji beban API sareng Locust: Intro

Anjeun meureun geus dina kaayaan ieu sateuacan: Anjeun nulis kode nu ngalakukeun hiji hal, hiji endpoint contona. Anjeun nguji titik tungtung anjeun nganggo Tukang Pos atanapi Insomnia, sareng sadayana tiasa dianggo. Anjeun lulus dina titik tungtung ka developer sisi klien, anu lajeng meakeun API sarta deploys aplikasi. Tapi teras, API gagal nalika pangguna nganggo aplikasi éta.

Ieu tiasa janten kaayaan anu ngaganggu pisan, teu kedah mahal pikeun usaha. Éta sababna pamekar parangkat lunak ngalaksanakeun rupa-rupa tés dina sistem parangkat lunak pikeun mastikeun aranjeunna ngalaksanakeun sakumaha anu diharapkeun. API henteu béda. Sateuacan nyebarkeun, anjeun kedah ngalakukeun sahenteuna tés kinerja sareng tés kaamanan.

Tés kinerja tiasa dikelompokkeun kana tés fungsionalitas sareng tés beban. Tes fungsionalitas mangrupikeun naon anu biasana anjeun anggo Tukang Pos atanapi Insomnia. Aranjeunna mastikeun yén API anjeun tiasa dianggo sakumaha anu anjeun ngarepkeun. Tes beban, di sisi anu sanés, langkung prihatin kumaha kinerja API anjeun kalayan pamakean dunya nyata sareng beban puncak, sareng éta mangrupikeun tulisan ieu. Hayu urang nempo tés beban dina leuwih jéntré.

Naon Dupi API Load Testing?

Uji beban API mangrupikeun jinis tés anu dianggo ku pamekar pikeun simulasi beban normal sareng puncak dina titik tungtung. Uji coba sapertos ieu ngamungkinkeun para pangembang ngévaluasi kinerja dunya nyata tina hiji API sateuacan dipasang. Éta ngabantosan aranjeunna ngaidentipikasi kapasitas operasi maksimal sistem, bottlenecks upami aya, sareng degradasi kinerja. Uji beban API biasana dilakukeun ku nyiptakeun pangguna virtual teras dianggo pikeun nguji fungsionalitas API sakaligus. 

Uji beban API ngukur métrik sapertos waktos réspon, pangguna sakaligus, tingkat throughput, tingkat panggunaan sumberdaya, Mean Time Between Failure (MTBF), Mean Time To Failure (MTTF), sareng saterasna. Sadaya métrik ieu tiasa dianggo pikeun nangtoskeun kumaha laksanakeun API.

Jinis Uji Beban

Aya sababaraha jinis tés beban, masing-masing nganggo kasus panggunaan. Hayu urang tingali sababaraha di antarana.

Uji beban: Ieu mangrupikeun bentuk dasar tina uji beban. Éta dianggo pikeun ngévaluasi kinerja sistem (dina hal ieu, API) dina beban normal sareng beban puncak anu diperkirakeun.

Uji Stress: Hal ieu dipaké pikeun ngaevaluasi kinerja sistem dina beban anu beurat pisan. Tujuan tina tés ieu nyaéta pikeun ningali naha sistem pulih saatos gagal, sareng sabaraha lami waktosna. Beban biasana ramped up lalaunan nepi ka ngaleuwihan kamampuhan sistem.

Uji Spike: Ieu rada sarupa jeung tés stress, iwal beban beurat dilarapkeun ujug-ujug, sabalikna lalaunan ramping eta up. Tes jenis ieu ngagambarkeun naon anu lumangsung nalika aya spike ngadadak dina jumlah rata-rata pangguna atanapi sémah anjeun, atanapi nalika aya serangan DDOS dina sistem anjeun.

Uji soak: Tés ieu henteu sapertos anu sanés di luhur. Éta nempatkeun sistem anjeun sahandapeun 80% (atanapi sakitarna) tina beban normal sareng ngantepkeunana pikeun waktos anu panjang, sebutkeun 12 dugi ka 14 jam. Tés jinis ieu nangtukeun kumaha dipercaya sistem dina waktosna.

Muat Uji API anjeun sareng Locust

Pamekar ngagaduhan aksés kana sababaraha pilihan pikeun nguji beban API na. Sababaraha alat uji beban umum nyaéta Gatling, JMeter, sareng Locust. Kami bakal difokuskeun Locust dina tulisan ieu.

Locust mangrupikeun alat uji beban sumber terbuka berbasis python anu dianggo ku perusahaan top sapertos Google, Microsoft, sareng Riot Games pikeun nguji API na. Dina tulisan ieu, urang bakal nunjukkeun kumaha ngamuat uji API. 

Pikeun tutorial ieu, kuring bakal nyiptakeun API saderhana sareng Flask. Anjeun tiasa ngiringan sareng kuring atanapi ngan ukur nyiptakeun API anjeun sareng Node, atanapi kerangka naon waé anu anjeun resep.

syarat

Python 3

Setup & Pamasangan

Mimiti, anjeun kedah nyetél lingkungan virtual dina PC anjeun supados anjeun henteu ngaganggu lingkungan Python global anjeun. Jang ngalampahkeun éta, ngajalankeun paréntah di handap ieu. Catet yén paréntah ieu dilarapkeun ka terminal Windows.

$ proyék mkdir

$ cd / d jalur \ ka \ proyék

$ python -m venv venv

$ venv\Scripts\activate

 

Kahiji, urang dijieun a proyek diréktori. Teras we robah diréktori urang ayeuna ka proyek. Kami teras nyiptakeun sareng ngaktipkeun lingkungan virtual pikeun Python di jero diréktori éta. 

Ayeuna, urang ngaléngkah ka pamasangan Flask(urang bakal make eta pikeun nyieun titik tungtung pikeun beban dites) jeung Lalang sorangan. 

 

Pikeun masang Flask, jalankeun. Pastikeun anjeun dina proyek dimana anjeun nyiptakeun lingkungan virtual.

$ pip install flask

 

Pikeun masang Locust, jalankeun

$ pip masang locust

 

Saatos éta, ketik paréntah di handap ieu. Pastikeun anjeun aya dina anjeun proyek diréktori nalika anjeun ngalakukeun ieu.

$ copy nul __init__.py

$aplikasi mkdir

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Paréntah ieu nyiptakeun sababaraha file anu bakal kami anggo pikeun nyiptakeun titik tungtung kami nganggo Flask. Anjeun ogé tiasa nyiptakeun file ieu nganggo file explorer anjeun. Tapi naon anu pikaresepeun dina éta? Saatos éta, salin kodeu di handap ieu kana app.py

ti flask impor Flask, jsonify, pamundut

aplikasi = Flask(__ngaran__)

modél_mobil = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

pesawat_model = [

  { 'merek': 'Boeing', 'model': '747' }

]

 

@app.route('/mobil')

def get_cars():

  balikkeun jsonify(car_models)

@app.route('/pesawat')

def get_planes ():

  balikkeun jsonify (plane_models)

lamun __ngaran__ == '__utama__':

    app.run(debug=True)  

 

Kodeu luhur ngandung métode meunang_mobil dipaké pikeun meunangkeun daptar merek mobil jeung model maranéhanana, jeung get_planes dipaké pikeun meunangkeun daptar merek pesawat jeung model maranéhanana. Pikeun ngamuat uji titik ieu, urang kedah ngajalankeun app.py. Jang ngalampahkeun éta ngajalankeun paréntah di handap ieu.

$ python path\to\app.py

Sakali anjeun ngajalankeun éta, anjeun kedah ningali sapertos kieu:

Uji beban API 1

Upami anjeun nyalin URL tina terminal sareng ngetik mobil or planes sanggeus /, Anjeun kudu bisa ningali data aya. Nanging, tujuan kami nyaéta pikeun nguji titik tungtung ku locust, sanés nganggo browser. Ku kituna hayu urang ngalakukeun éta. Jalankeun paréntah di handap ieu dina akar file anjeun proyek diréktori.

 

$ copy nul locust_test.py

 

Ieu nyiptakeun file 'locust_test.py' dina akar anjeun proyek diréktori. Saatos éta, buka file sareng témpél kodeu di handap ieu. Kami bakal ngajelaskeun sakedap.

 

waktos impor

ti locust impor HttpUser, tugas, antara

 

kelas UserBehaviour(HttpUser):

    wait_time = antara(5, 10)

 

    @tugas

    def get_cars(diri):

        self.client.get('/cars')

    

    @tugas

    def get_planes (diri):

        self.client.get('/planes')

 

Ieu mangrupikeun conto dasar tina ngagunakeun Locust pikeun nguji API. Kahiji, urang nyieun kelas Pamakéan Paripolah, anu tiasa dipasihan nami anu pas tapi kedah diperpanjang HttpUser. HttpUser nyaéta kelas anu ngurus instantiating sababaraha pamaké maya pikeun ngalaksanakeun tugas urang tangtukeun dina Pamakéan Paripolah kelas. 

Hiji tugas dieusian ku decorating metoda jeung @tugas tukang ngahias. Urang ogé boga fungsi disebut antawis() anu ngamungkinkeun urang nangtukeun sauntuyan detik pikeun ngadagoan saencan ngaéksekusi tugas salajengna. Anjeun tiasa ningali yén kami ditugaskeun sauntuyan 5 ka 10 detik pikeun éta dina kode kami. 

Pikeun ngajalankeun kode, pastikeun anjeun masih di lingkungan maya Anjeun. Upami anu anjeun damel dianggo ku server anu nyayogikeun API, buka terminal énggal, ganti diréktori anjeun ka anjeun proyek diréktori, sareng aktipkeun lingkungan virtual anu anjeun jieun. Anjeun tiasa mendakan paréntah pikeun ngaktipkeun lingkungan virtual di luhur. Ayeuna, lebetkeun paréntah di handap ieu dina terminal anjeun.

 

$ locust -f locust_test.py

 

Anjeun kedahna ningali sapertos kieu:

Uji beban API 2

Sacara standar, panganteur wéb locust aya di http://localhost/8089. Upami anjeun nganjang ka halaman wéb, anjeun kedah ningali antarmuka sapertos kieu:

Uji beban API 3

Tina antarbeungeut, urang tiasa netepkeun jumlah pangguna, tingkat spawn (pamaké didamel per detik), sareng Host. Anjeun tiasa kéngingkeun alamat host anjeun ku mariksa terminal dimana server dijalankeun. Bisi kami, éta dina port 5000. Lamun anjeun klik dina Mulai ngagimbung, Anjeun bakal dibere panganteur di handap.

Uji beban API 4

Ieu nunjukkeun anjeun rupa-rupa métrik anu mangpaat sapertos jumlah pamundut anu gagal, waktos rata-rata pikeun pamundut, waktos minimum pikeun pamundut, pamundut per detik, sareng saterasna. Sakali anjeun wareg jeung naon nu katingali, anjeun tiasa klik tombol eureun. 


di sagigireun statistik tab, aya a grafik tab nu nembongkeun leuwih inpormasi dina wangun grafik, saperti gambar di handap.

Aya total requests per grafik detik, grafik waktos respon, jeung jumlah pamaké grafik, kabéh plotted ngalawan waktu. Ngagunakeun grafik, anjeun bisa nangtukeun sabaraha pamaké nu bisa ditarima keur waktu respon tetep, atawa anjeun bisa niténan grafik Anjeun pikeun waktos respon konstan sanajan ngaronjatna jumlah pamaké, sarta wawasan séjén kawas éta. Upami anjeun hoyong bagikeun ieu stats kalawan batur, Anjeun bisa ngundeur laporan ti Unduh Data tab.

Pikeun nyimpulkeun...

Nguji beban API anjeun mangrupikeun kagiatan anu penting dina prosés pamekaran anjeun, janten pastikeun éta kalebet dina siklus desain anjeun. Ku jalan kitu, anjeun ogé tiasa ngalaksanakeun jinis tés beban anu sanés ku ngarobih nilai pikeun jumlah pangguna sareng tingkat spawn. 

Upami anjeun hoyong ngalakukeun tés spike, tangtukeun nilai anu ageung (sebutkeun 2000) pikeun jumlah pangguna, teras nilai anu sami ageung pikeun tingkat spawn anjeun (contona 500). Ieu ngandung harti yén dina 4 detik, anjeun bakal gaduh sadaya 2000 pangguna nyiptakeun sareng ngaksés titik tungtung anjeun. Tés setrés bakal sami, tapi kalayan nilai anu langkung handap pikeun tingkat spawn. Pikeun milarian sadayana anu anjeun tiasa laksanakeun, pariksa Locust dokuméntasi