Serversiz ilovalaringizni sinab ko'rishning eng yaxshi usullari

Serverless - bu bulutli hisoblash ijrosi modelidan ko'proq narsa. Ilovalarni rejalashtirish, qurish va tarqatish usulini o'zgartiradi. Ammo bu bizning ilovalarimizni sinab ko'rish usulimizni ham o'zgartiradi.

Aleks bilan tanishing. Alex - so'nggi paytlarda Node.js-ga ko'proq e'tibor qaratadigan oddiy JavaScript dasturchisi.

Bu Aleks

So'nggi bir necha oy ichida uning yaxshi do'stlari Anna va Jeff doimo bu serversiz narsa to'g'risida gaplashmoqdalar. Vaqti-vaqti bilan ular zerikarli bo'lsa ham, unga serversiz ilovalar g'oyasi yoqadi. U hatto ba'zi nuqtalarda AWS Lambda va Azure-ga bir nechta oddiy funktsiyalarni o'rnatgan.

Anna va Jeff doimo bu serversiz narsa haqida gapirishadi

Bir payt Aleks va uning jamoasi yangi loyihaga ega bo'lishdi. Bir oz tahlildan so'ng, Aleks bu serversiz uchun juda mos keladi deb o'yladi. U o'z fikrini jamoasiga taqdim etdi. Jamoa a'zolarining ba'zilari hayajonlanishdi, ulardan biriga yoqmadi, lekin ularning ko'plari qat'iy fikrga ega emasdilar. Shunday qilib, ular buni sinab ko'rishga qaror qilishdi - loyiha unchalik katta emas va xavf kam edi.

Alex jamoasi yangi loyihalarida serversiz foydalanish haqida bahslashmoqda

Jamoa serversizlar haqida o'qidi va ular yangi dasturni qanday tuzish haqida tushunchaga ega bo'ldilar. Ammo hech kim ular qanday qilib serversiz umumiy rivojlanish jarayonida moslashishi kerakligini bilmas edi.

Ayni paytda, ularning jarayoni quyidagicha:

  1. Ular yangi xususiyatni tahlil qiladilar.
  2. Kamroq murakkab xususiyatlar uchun ular kod bilan boshlanadi, so'ngra uni mahalliy ravishda ishga tushiradi va oxirida ba'zi sinovlarni qo'shadi.
  3. Keyinchalik murakkab funktsiyalar uchun ular TDD-ning o'z versiyalarini bajaradilar: ular sinovlardan boshlanadi, keyin kodni yozadi va uni mahalliy ravishda sinovdan o'tkazadi.
  4. Xususiyat tayyor bo'lganda, uni sinov muhitiga joylashtiradigan CI vositasiga o'tadi.
  5. Keyin QA guruhi qo'lda testning navbatdagi bosqichi uchun yangi xususiyatni oladi. Agar hamma narsa yaxshi bo'lsa, ilova CI-dan ishlab chiqarishga o'tadi.
Aleks jamoasining umumiy rivojlanish jarayoni

Ular bosqichma-bosqich boshlashga va keyin duch kelgan muammolarni hal qilishga qaror qildilar.

Ular kichik bir xususiyatni tanladilar va sodda bo'lgani kabi, ular kod bilan boshladilar. Kodlash qismi tayyor bo'lganda, ular birinchi to'siqni urishdi: serversiz dasturlarni qanday qilib mahalliy ravishda ishlaysiz?

Mahalliy sinov

Serversiz ilovalar bilan infratuzilmani boshqarolmaysiz. Ajoyib tuyuladi, lekin qanday qilib o'z arizangizni mahalliy ravishda ishlaysiz? Siz buni ham qila olasizmi?

Birinchi to'siq: qanday qilib serversiz dasturni mahalliy ravishda ishlaysiz?

Ilova va serversiz sotuvchingizga qarab, siz ilovangizning ba'zi qismlarini mahalliy ravishda boshqarishingiz mumkin. Buni amalga oshirish uchun quyidagi vositalar va texnikalardan foydalanishingiz mumkin:

  • Azure funktsiyalarining asosiy vositalari (Azure funktsiyalari uchun)
  • AWS SAM CLI (AWS SAM yordamida qurilgan AWS Lambda ilovalari uchun)
  • Uchinchi tomon vositalari (masalan, lokalstack)
  • AWS Lambda mahalliy simulyatsiyasi uchun docker-lambda
  • Node.js funktsiyasini mahalliy ravishda ishga tushiring

Albatta, ro'yxat to'liq emas - ko'proq vositalar mavjud va biz deyarli har kuni yangi vositalarni ko'rmoqdamiz.

Ushbu vositalarning aksariyati ma'lum cheklovlarga ega. Ular serversiz funktsiyalarni va API Gateway kabi bir qator boshqa xizmatlarni taqlid qilishlari mumkin. Ammo ruxsatnomalar, autentifikatsiya qatlami va boshqa xizmatlar haqida nima deyish mumkin?

Mahalliy sinov sizning funktsiyangiz ishlashiga ishonch hosil qilish uchun tezkor tasdiqlash bilan yordam beradi. Ammo serversiz ilovangiz maqsadga muvofiq ishlayotganiga ishonch hosil qilishning yaxshiroq usuli bormi? Ha bor. Birinchi va eng muhim qadam: testlarni yozish.

Shunday qilib, Aleks va uning jamoasi birinchi vazifalarini mahalliy darajada sinab ko'rishdi va u ishlayotganga o'xshaydi. Keyin ular keyingi bosqichga o'tdilar.

Avtomatik sinovlar

Aleks va uning jamoasi faqat Node.js dasturlarini sinab ko'rish uchun Jestga o'tdilar. Ular hali ham juda ko'p oldingi ishlarni qilmoqdalar, shuning uchun ular iloji boricha to'liq stek uchun bir xil vositalardan foydalanishni xohlashadi. Serversiz ilovalarni sinab ko'rish uchun ular ham Jest-dan foydalanishlari mumkinmi? Va ular nimani sinab ko'rishlari kerak?

Ikkinchi to'siq: serversiz avtomatik testga qanday ta'sir qiladi?

Tez tergovdan so'ng, ular o'zlarining sevimli Node.js sinov vositalaridan foydalanishlari mumkinligini tushunishdi. Jest, Jasmin, Mocha va boshqalar serversiz juda yaxshi ishlaydi.

Serversiz ilovada nimani sinab ko'rishingiz kerak?

Node.js dasturlari bilan Aleks va uning jamoasi uch bosqichli testlarni avtomatlashtirish piramidasini kuzatmoqdalar. Sinov piramidasini birinchi bo'lib Mayk Kon o'zining "Agile bilan muvaffaqiyatga erishish" kitobida eslatib o'tgan.

Sinov piramidasi belgilaganidek, ular quyidagilarga ega:

  • Birlik sinovlari juda ko'p, chunki ular eng arzon (yozish va ishga tushirish tez)
  • Kamroq integratsiya sinovlari, chunki ular qimmatroq va ular ishlashga ko'proq vaqt sarflashadi
  • Bir nechta UI testlari, chunki ular eng qimmat (ba'zi bir GUI vositalarini talab qiladi) va eng sekin ishlaydi

Bulardan tashqari, ularda o'zlarining QA guruhi tomonidan o'tkazilgan sessiyaga asoslangan testlar ham mavjud.

qo'lda sinov bilan piramida sinov

Serversiz sinov avtomatlashtirish piramidasiga qanday ta'sir qiladi?

Javob darajaga bog'liq. Ammo sinov piramidasi Misr piramidalariga va Mayya piramidalariga o'xshamaydi.

Qurilma sinov qatlamiga ko'p ta'sir ko'rsatmaydi. Birlik testlari hali ham yozish va ishlatish uchun eng arzon, ammo birliklar kichikroq bo'lishi mumkin.

Integratsiyalash testlari sathi har qachongidan ham muhimroq bo'lib bormoqda, chunki serversiz ilovalar integratsiyaga ko'proq ishonadi. Bu shunchaki arzon, chunki faqat sinov uchun serversiz ma'lumotlar bazasiga ega bo'lish arzon. Shunday qilib, serversiz "sinov piramidasi" da siz ko'proq integratsion testlardan o'tishingiz kerak.

GUI sinovlari qatlami ham arzonroq va tezroq, chunki ular yanada arzonroq parallelizatsiya tufayli.

Qo'lda sinov qatlami bir xil bo'lib qoladi. Ammo serversiz foydalanish sizga biroz yaxshilashga yordam beradi. Bu haqda keyinroq ma'lumotga o'tamiz.

Serversiz

Aleks va uning jamoasi oxir-oqibat qaerga e'tibor qaratish kerakligini tushunishdi. Keyingi muammo ularni osonroq sinab ko'rish uchun qanday funktsiyani yozish kerakligi edi.

Sinab bo'lmaydigan serversiz funktsiyalarni qanday yozish kerak

Serversiz funktsiyani yozish paytida siz quyidagi xatarlar haqida o'ylashingiz kerak:

  • Konfiguratsiya xavfi Ma'lumotlar bazasi va jadval to'g'ri emasmi? Yoki kirish huquqingiz bormi?
  • Texnik ish oqimlari xatarlari Siz kirayotgan so'rovni kerakli tarzda tahlil qilyapsizmi va ishlatyapsizmi? Yoki muvaffaqiyatli javoblar va xatolar bilan to'g'ri ishlayapsizmi?
  • Biznes mantiqiy xatarlari Siz murojaat qilgan barcha biznes mantiq qoidalariga amal qildingizmi?
  • Integratsiya xatarlari Siz kirayotgan so'rov tuzilishini to'g'ri o'qiyapsizmi? Yoki buyurtmani ma'lumotlar bazasida to'g'ri saqlayapsizmi?

Sizning serversiz funktsiyangiz to'g'ri ishlayotganligini tasdiqlash uchun siz ushbu barcha xavflarni sinab ko'rishingiz kerak.

Siz bularning har birini integratsiya testlarida bo'lgani kabi sinab ko'rishingiz mumkin. Ammo har safar ushbu xavflardan birini sinab ko'rishni xohlasangiz, xizmatni sozlash va sozlash maqsadga muvofiq emas. Mening do'stim Aleksandar Simovich aytishni yaxshi ko'radi:

Tasavvur qiling, agar avtoulovlarni sinovdan o'tkazish shu tarzda amalga oshirilgan bo'lsa. Bu shuni anglatadiki, har safar mashinada bitta vintni yoki hatto oynani sinashni xohlasangiz, butun mashinani yig'ib, demontaj qilishingiz kerak bo'ladi.

Ilovani sinab ko'rish uchun aniq vazifa sizning vazifangizni bir nechta kichiklarga bo'lishdir.

Buning ajoyib usullaridan biri bu olti burchakli arxitekturani serversiz funktsiyalaringizga qo'llashdir.

Olti burchakli Arxitektura yoki Portlar va Adapterlar mas'uliyat qatlamlari orqali muammolarni ajratishga yordam beradigan amaliy arxitektura shaklidir. Uni yaratuvchisi Alistair Kokburn quyidagicha izohlaydi:

Ilovaga foydalanuvchilar, dasturlar, avtomatlashtirilgan testlar yoki ommaviy skriptlar tomonidan bir xil darajada boshqarilishini va uning yakuniy ish vaqti qurilmalari va ma'lumotlar bazasidan ajratilgan holda ishlab chiqilishini va sinovdan o'tkazilishini ta'minlash.

Xo'sh, bu qanday qilib serversiz funktsiyalarga nisbatan qo'llaniladi?

Aleks va uning jamoasi AWS-dan foydalanganlarida, ular quyidagi kabi tuzilishga ega bo'lishdi:

  • Funktsiyaning biznes mantig'i ozgina "portlar" ni ochib beradi (yoki kam dalillarni kutadi). Masalan, biri kiruvchi voqea uchun, ikkinchisi doimiy saqlash uchun, ikkinchisi esa bildirishnoma uchun.
  • Ular funktsiyani ishga tushiradigan voqea uchun ikkita adapterga ega, ulardan biri haqiqiy AWS Lambda triggeri uchun, ikkinchisi esa mahalliy sinov uchun.
  • Ular doimiy saqlash va bildirishnomalar uchun bir nechta adapterlarga ega. Masalan, DynamoDB stol adapteri va xotira adapteri.
AWS Lambda funktsiyasining olti burchakli arxitekturasi

Aleks va uning jamoasi oldinga intilishlaridan mamnun edilar. Ammo harakat qilishdan oldin, olti burchakli arxitektura sinov piramidasining har bir bosqichiga qanday ta'sir qilishini ko'rib chiqaylik.

Birlikni sinovdan o'tkazish

Birlik testlari avvalgidek qoldi. Ammo olti burchakli arxitektura tufayli birlik sinovlarini yozish osonroq. Ular oddiygina mahalliy adapter yoki istehzo sifatida ishbilarmonlik qatlamini izolyatsiya holatida sinab ko'rish uchun adapter sifatida foydalanishlari mumkin.

Integratsion sinov

Integratsion testlar olti burchakli arxitekturadan ko'p foyda oldi. Ular o'zlari ega bo'lgan integratsiyani to'liq sinab ko'rishdi. Uchinchi tomon integratsiyalari boshqa adapterlar bilan taqlid qilinadi.

Bu amalda qanday ishlaydi?

Ularning har bir serversiz funktsiyalari lambda.js va main.js fayllariga ega. Asosiy fayl serversiz funktsiyaning biznes mantig'ini o'z ichiga oladi. Va lambda.js fayli adapterlarni ulash va main.js faylini chaqirish uchun javobgardir.

Asosiy fayl o'z birligi va integratsiya sinovlariga ega. Ammo uning integratsiya sinovlari AWS S3 kabi so'nggi xizmatlar bilan to'liq integratsiyani sinab ko'rmaydi, chunki bu ularni sekinlashtiradi. Buning o'rniga, ular funktsiyani fayllarni saqlash integratsiyasi bilan sinab ko'rish uchun xotira adapteridan foydalanadilar.

AWS S3 integratsiyasi o'zining birligi va integratsiya sinovlariga ega bo'lgan FileRepository orqali amalga oshiriladi. Integratsiya sinovlari tekshiruvi AWS S3-dan foydalanib, yakuniy integratsiya haqiqatan ham ishlayotganiga ishonch hosil qiladi.

Main.jsdan farqli o'laroq, lambda.js faylida testlar mavjud emas, chunki ko'p hollarda bir nechta satr kodlari mavjud.

Sinovlar bilan bitta AWS Lambda funktsiyasini ingl

Ushbu yondashuv MindMup komandasi serversiz funktsiyalarni sinash uchun foydalanadigan texnikaga o'xshaydi. Uning yordamida siz o'zingizning funktsiyalaringizning integratsiyasini osonlikcha sinab ko'rishingiz mumkin va baribir integratsiya sinovlarini tezroq qilishingiz mumkin.

GUI sinovi

Aleks va uning jamoasi ilova uchun orqa tomon qurayotganlarida, GUI sinovlari darajasi ahamiyatsiz edi. Ammo ular serversiz narsalar haqida ko'proq ma'lumotga ega bo'lishlari bilan ular o'zlari ishlayotgan boshqa ilovalar uchun GUI sinovlarini takomillashtirish uchun foydalanishlari mumkinligini tushunishdi.

UI sinovlari qimmat va sekin, chunki ular brauzerda ishlaydi. Ammo, serversiz arzon va u tezkor.

Agar ular AWS Lambda-da brauzerni ishlata olsalar, ular arzon parallelizatsiya imkoniyatiga ega bo'lishadi. Bu ularning UI testlarini arzonroq va tezroq qilishiga yordam beradi.

Ammo, siz serversiz funksiya ichida Chrome kabi brauzerni ishlata olasizmi?

Ha! Va bu Serverless Chrome, Chromeless va Kukla kabi vositalar yordamida oson.

UI testlarini parallellashtirish uchun AWS Lambda funktsiyalaridan foydalanish

Serversiz va boshsiz brauzerlarning kombinatsiyasi bizga UI sinov vositalarining yangi avlodini keltirishi mumkin. Biz allaqachon ulardan ba'zilarini ko'rishimiz va sinab ko'rishimiz mumkin, masalan, Appraise.

CI / CD

Aleks va uning jamoasi serversiz birinchi funktsiyasini sinab ko'rishar ekan, sinov muhitiga kodni yuborish vaqti keldi. Bu yangi savolni tug'dirdi: ular serversiz ilovalarni o'rnatish uchun CI / CD asboblaridan qanday foydalanishi mumkin?

Javob oddiy: ular CI vositasidan foydalanib, sinovlarni o'tkazish va dasturni joylashtirishlari mumkin. Ilovani o'rnatish uchun Claudia.js, AWS SAM va Serverless Framework kabi mashhur vositalardan foydalaning.

Siz hali ham o'zingizning sevimli CI vositangizdan (masalan, Jenkins, TravisCI yoki SemaphoreCI) foydalanishingiz mumkin yoki agar siz AWS bilan bog'lanmoqchi bo'lsangiz, AWS CodeBuild-ni sinab ko'rishingiz mumkin.

Qo'lda sinov o'tkazish

Qo'lda sinov orqali ham serversiz bevosita ta'sirlanmasa ham, jamoa o'zlarining QA jarayonini yaxshilash yo'lini topdilar.

Serversiz ilovaning bosqichlari va o'rnatilishi arzon va ko'pincha sozlashga juda tez. Bundan tashqari, serversiz holda, agar biror ilova ishlamasa, siz dastur uchun pul to'lamaysiz.

Bu shuni anglatadiki, sinov muhitiga ega bo'lish hech qachon arzon bo'lmagan!

Bundan tashqari, serversiz holda siz ko'pincha funktsiyani bir bosqichdan boshqasiga o'tkazishingiz mumkin. Bu sizning QA guruhingiz biron bir funktsiyani sinab ko'rishi mumkinligini anglatadi va ular uning ishlashini tasdiqlashganda, siz xuddi shu funktsiyani ishlab chiqarishga taklif qilishingiz mumkin.

Sinovdan tashqari

Alex va uning jamoasi serversiz birinchi funktsiyasini oldindan ishlab chiqarishga yuborishdi va jamoa serversiz ilovalarni sinab ko'rishni o'rganganlaridan xursand bo'lishdi.

Ular loyihada serversiz foydalanishni davom ettirishdi va uni boshqa bir qancha loyihalar bilan tanishtirishdi. Aleks o'zining do'stlari Anna va Jeffga uchinchi, ba'zan zerikarli va serversiz voiz sifatida qo'shildi. Va ular bundan keyin ham baxtli yashadilar.

Serversiz voizlar ekipaji yangi a'zoga ega bo'ldi

Post-skript

Ammo ularning ilovasi sinab ko'rilgan bo'lsa ham, bir kechada biror narsa yuz berdi.

Tekshiruvdan so'ng ular birlashmalarning biri o'zgarganligini aniqladilar. Ular serversiz ilovalar uchun sinovning muhimligini bilib oldilar, ammo bu etarli emas.

Serversiz ilovalar integratsiyaga juda bog'liq bo'lganligi sababli, xavf sizning kodingizdan integratsiyaga o'tadi. Integratsion o'zgarishlarni tezkorlik bilan kutib olish va iloji boricha tezkorlik bilan harakat qilish uchun, sizning ilovangiz tegishli nazoratga muhtoj.

Yaxshiyamki, bozorda har kuni serversiz monitoring vositalari tobora ko'proq mavjud. Yaxshi va ommabop variantlarning ba'zilari - IOpipe, Thundra, Dashbird va Epsagon.

Ammo, serversiz ilovalar ko'pincha qalin mijozga ega, bu esa orqa tomonning monitoringi etarli emasligini anglatadi. Old qismingiz uchun sizga shunga o'xshash vosita kerak. Ushbu bozorda Sentry va Rollbar kabi juda yaxshi vositalar mavjud.

Ammo serversiz ruhda biz Desole nomli xatolarni tekshiradigan ochiq manba dasturini yaratdik. Bu sizning AWS hisob qaydnomangizga o'rnatishingiz mumkin bo'lgan serversiz dastur. Bu tashkilotlarga dasturiy ta'minot sifatida xizmat qilish qulayligi va o'zi hal qiladigan echim xavfsizligini tanlashni talab qilmasdan, dasturiy istisnolar va xatolarni kuzatishga imkon beradi. Siz buni bu erda tekshirishingiz mumkin: https://desole.io.

Desole, ochiq manbali xatolarni kuzatish, AWS bilan mahkam birlashtirilgan
Barcha rasmlar SimpleDiagrams4 ilovasi yordamida yaratilgan.

Agar siz Node.js va AWS-dan foydalanib serversiz ilovalarni sinab ko'rish va qurish haqida ko'proq bilishni istasangiz, "Node.js bilan serversiz ilovalar" -ni, Aleksandar Simovic bilan yozgan kitobni nashr eting:

Kitob sizga kodli misollar bilan serversiz sinov haqida ko'proq ma'lumot beradi, ammo Node va Claudia.js-dan foydalanib haqiqiy serversiz API (ma'lumotlar bazasi va autentifikatsiya bilan) qanday tuzilishi va tuzatilishini ham bilib olasiz. Facebook Messenger va SMS (Twilio-dan foydalangan holda) va Alexa qobiliyatlari uchun chatbotlar yaratish usullarini o'rganasiz.