Најбољи начини за тестирање апликација без сервера

Без сервера је више од модела извршења рачунарства у облаку. То мења начин на који планирамо, градимо и примењујемо апликације. Али то такође мења начин на који тестирамо наше апликације.

Упознајте Алека. Алек је обичан ЈаваСцрипт програмер, у последње време фокусиран на Ноде.јс.

Током последњих неколико месеци, његови добри пријатељи, Анна и Јефф, увек причају о тој ствари без сервера. Иако су с времена на време досадни, свиђа му се идеја апликација без сервера. Чак је у неком тренутку применио неколико једноставних функција на АВС Ламбда и Азуре.

У неком тренутку, Алекс и његов тим су добили нови пројекат. После неке анализе, Алекс је помислио да би то било савршено за бескућнике. Идеју је представио свом тиму. Неки од чланова тима били су узбуђени, једном од њих се то није свидело, али већина није имала чврсто мишљење. Тако су одлучили да покушају - пројекат није био превелик, а ризик је био низак.

Тим је читао о послу без сервера и стекао је идеју како да структурира своју нову апликацију. Али нико није био сигуран како би без сервера требало да се уклопе у свој заједнички процес развоја.

У том тренутку њихов процес изгледа овако:

  1. Они анализирају нову особину.
  2. За мање сложене карактеристике започињу кодом, затим га покрећу локално и на крају додају неке тестове.
  3. За сложеније функције раде своју верзију ТДД-а: почињу са тестовима, затим пишу код и тестирају га локално.
  4. Када је функција спремна, она прелази на алатку ЦИ која је поставља у окружење за тестирање.
  5. Тада КА тим узима нову функцију за још један круг ручног тестирања. Ако све изгледа добро, апликација пролази кроз ЦИ до продукције.

Одлучили су да крену корак по корак, а затим реше проблеме како су се сусретали.

Одабрали су малу особину, а како је било једноставно, почели су са кодом. Када је део за кодирање био спреман, погодили су прву препреку: како локално покретати апликације без сервера?

Локално тестирање

Са апликацијама без сервера не управљате инфраструктуром. Звучи сјајно, али како онда локално покренути своју апликацију? Можете ли то и учинити?

У зависности од апликације и добављача без сервера, неке делове апликације можете покретати локално. Да бисте то урадили, можете да користите неке од следећих алата и техника:

  • Основни алати за Азуре функције (за Азуре функције)
  • АВС САМ ЦЛИ (за АВС Ламбда апликације направљене помоћу АВС САМ)
  • Алати независних произвођача (тј. Лоцалстацк)
  • доцкер-ламбда за локалну симулацију АВС Ламбда
  • Покрените функцију Ноде.јс локално

Листа наравно није потпуна - има више алата, а нове алате видимо готово свакодневно.

Већина ових алата има одређена ограничења. Могу да симулирају функције без сервера и неколико других услуга, као што је АПИ Гатеваи. Али шта је са дозволама, слојем ауторизације и осталим услугама?

Локално тестирање помаже у брзим валидацијама како би се осигурало да ваша функција ради. Али да ли постоји бољи начин да се осигура да апликација без сервера ради како је предвиђено? Да, има. Први и најважнији корак је: писање тестова.

Тако су Алек и његов тим покушали своју прву функцију локално, и како се чинило да ради. Затим су прешли на следећи корак.

Аутоматизовани тестови

Алек и његов тим су се управо пребацили на Јест ради тестирања њихових Ноде.јс апликација. Они и даље раде пуно предњег дела, па желе да користе исте алате за цели стек кад год могу. Да ли могу да користе Јест и за тестирање апликација без сервера? И шта би требало да тестирају?

Након брзе истраге, схватили су да могу да користе своје омиљене алате за тестирање Ноде.јс. Јест, Јасмине, Моцха и други добро раде са серверима.

Шта треба да тестирате у апликацији без сервера?

Са својим апликацијама Ноде.јс, Алекс и његов тим прате трослојну пирамиду аутоматизације теста. Испитну пирамиду први пут је споменуо Мике Цохн у својој књизи „Успети са агилним“.

Као што тест пирамида дефинише, они имају:

  • Много јединичних тестова, јер су најјефтинији (најбржи за писање и покретање)
  • Мање интеграционих тестова, јер су скупљи и потребно им је више времена за покретање
  • Неколико УИ тестова, јер су најскупљи (потребан је неки ГУИ алат) и најспорији за покретање

Поред ових, они такође имају ручно тестирање засновано на сесијама, које је урадио њихов КА тим.

Како бессервер утиче на пирамиду аутоматизације теста?

Одговор зависи од нивоа. Али испитна пирамида мање личи на египатске, а више на мајанске пирамиде.

На слој јединичних тестова то не утиче пуно. Јединствени тестови су и даље најјефтинији за писање и извођење, али јединице могу бити мање.

Слој за интеграцијске тестове постаје важнији него икад, јер се апликације без сервера у великој мери ослањају на интеграције. Такође је јефтиније, јер је постојање базе података без сервера само за тестирање јефтино. Дакле, у „тест пирамиди“ без сервера морате да имате више тестова интеграције.

Слој ГУИ тестова је такође јефтинији и бржи због јефтиније паралелизације.

Ручни слој за тестирање остаје исти. Али без сервера вам могу помоћи да га мало побољшате. О томе ћемо ићи касније.

Алекс и његов тим су коначно имали идеју где да се фокусирају. Следећи проблем је био како написати функцију која ће их лакше тестирати.

Како написати тестиране функције без сервера

Док пишете функцију без сервера, морате размислити о следећим ризицима:

  • Ризици конфигурације Да ли су база података и табела тачни? Или, имате ли права приступа?
  • Технички ризици тока послаДа ли рашчлањујете и користите долазни захтев како би требало? Или се правилно бавите успешним одговорима и грешкама?
  • Ризици пословне логикеЈесте ли поштовали сва правила пословне логике која постоји у вашој апликацији?
  • Ризици интеграције Да ли правилно читате структуру долазног захтева? Или налог правилно складиштите у бази података?

Да бисте потврдили да ваша функција без сервера ради исправно, треба да тестирате све ове ризике.

Можете да тестирате сваки од ових као и за интеграционе тестове. Али подешавање и конфигурисање услуге сваки пут када желите да тестирате један од ових ризика није оптимално. Као што мој пријатељ Александар Симовић воли да каже:

Замислите да се тако тестирало аутомобиле. То би значило да бисте сваки пут када желите да тестирате један вијак или чак огледало у аутомобилу, морали да саставите, а затим раставите цео аутомобил.

Да бисте апликацију учинили проверивијом, јасно решење је поделити своју функцију на неколико мањих.

Један од сјајних начина за то је примена Хексагоналне архитектурена ваше функције без сервера.

Хексагонална архитектура, или луке и адаптери , је облик архитектуре апликација који промовише раздвајање забринутости кроз слојеве одговорности. Како објашњава његов творац Алистаир Цоцкбурн:

Омогућите да апликацију подједнако покрећу корисници, програми, аутоматизоване тестне или групне скрипте и да је развијају и тестирају изоловано од њених евентуалних уређаја и база података у току.

Па, како се то односи на функције без сервера?

Како Алек и његов тим користе АВС, завршили су са структуром попут следеће:

  • Функција пословне логике излаже неколико „портова“ (или очекује мало аргумената). На пример, један за долазни догађај, један за трајно складиштење и један за обавештења.
  • Имају два адаптера за догађај који покреће функцију, један за прави АВС Ламбда окидач и други за локално тестирање.
  • Имају неколико адаптера за трајно складиштење и обавештења. На пример, ДинамоДБ адаптер за сто и адаптер у меморији.

Алекс и његов тим били су срећни што су кренули напред. Али пре него што кренемо даље, погледајмо како Хексагонална архитектура утиче на сваки ниво тест пирамиде.

Јединствено тестирање

Јединствени тестови су остали исти. Али лакше је писати јединствене тестове због Хексагоналне архитектуре. Они могу једноставно да користе локални адаптер или макету као адаптер за изолацију да тестирају функцијски пословни слој.

Интеграционо тестирање

Интеграциони тестови су имали много користи од Хексагоналне архитектуре. Били су у могућности да у потпуности тестирају интеграције које поседују. Интеграције независних произвођача симулирају се са другим адаптерима.

Како то функционише у пракси?

Свака од својих без сервера функција има ламбда.јс и маин.јс фајлове. Главна датотека садржи пословну логику функције без сервера. А ламбда.јс фајл је задужен за повезујем адаптере и позивајући се на маин.јс фајл.

Главна датотека има сопствене јединице и тестове интеграције. Али његови интеграциони тестови не тестирају потпуну интеграцију са крајњим услугама, попут АВС С3, јер би их то успорило. Уместо тога, користе адаптер у меморији да тестирају функцију интеграцијом складишта датотека.

АВС С3 интеграција се врши путем ФилеРепоситори-а , који има своју јединицу и тестове интеграције. Провере интеграционих тестова користе АВС С3 да би били сигурни да крајња интеграција заиста функционише.

За разлику од маин.јс , датотека ламбда.јс нема тестове, јер већину времена има само неколико редова кода.

Овај приступ је попут технике коју МиндМуп тим користи за тестирање функција без сервера. Помоћу ње можете лако да тестирате интеграције својих функција, а да свеједно убрзате интеграцијске тестове.

ГУИ тестирање

Док су Алек и његов тим правили позадину апликације, ниво ГУИ тестова није био релевантан. Али како су сазнали више о безсерверском серверу, схватили су да могу да га користе за побољшање нивоа ГУИ тестова за друге апликације на којима су радили.

УИ тестови су скупи и спори, јер се покрећу у прегледачу. Али, бес сервери су јефтини и брзо се скалирају.

Ако би могли да покрећу прегледач у АВС Ламбда, стекли би јефтину паралелизацију. То би учинило њихове тестове корисничког интерфејса јефтинијим и бржим.

Али, да ли можете да покренете прегледач, попут Цхроме-а, унутар функције без сервера?

Да! А лако је уз помоћ алата као што су Цхромелесс без сервера, Цхромелесс и Пуппетеер.

Комбинација прегледача без сервера и без главе може нам донети нову генерацију алата за тестирање корисничког интерфејса. Неке од њих већ можемо видети и испробати, као што је Аппраисе.

ЦИ / ЦД

Док су Алек и његов тим тестирали своју прву функцију без сервера, било је време да се код примени у окружење за тестирање. То је отворило ново питање: како могу да користе ЦИ / ЦД алате за примену своје апликације без сервера?

Одговор је једноставан: они могу да користе ЦИ алат за покретање тестова и примену апликације. Да бисте применили апликацију, користите било који популарни алат, као што су Цлаудиа.јс, АВС САМ и Фрамеворк без сервера.

И даље можете да користите свој омиљени алат за ЦИ (попут Јенкинса, ТрависЦИ или СемапхореЦИ), или ако желите да се придржавате АВС-а, можете испробати АВС ЦодеБуилд.

Ручно тестирање

Чак и путем ручног тестирања на које сервери не утичу директно, тим је пронашао начин да побољша свој КА процес.

Фазе и примене апликација без сервера су јефтине и често се брзо постављају. Такође, без сервера не плаћате апликацију ако је нико не користи.

То значи да поседовање окружења за тестирање никада није било јефтиније!

Такође, без сервера често можете промовисати функцију из једне фазе у другу. То значи да ваш КА тим може тестирати функцију, а када потврде да ради, исту функцију можете промовисати у продукцију.

Поред тестирања

Алек и његов тим су своју прву функцију без сервера послали у предпродукцију, а тим је био срећан што су научили како да тестирају апликације без сервера.

Наставили су да користе сервер без сервера на пројекту и упознали га са неколико других пројеката. Алекс се придружио својим пријатељима Ани и Џефу, као трећи, понекад досадни проповедник без сервера. И живели су срећно до краја живота.

Пост-скрипта

Али иако је њихова апликација била добро тестирана, нешто се догодило преко ноћи.

Након истраге, открили су да се једна од интеграција променила. Сазнали су да је тестирање важно за апликације без сервера, али није довољно.

Како апликације без сервера у великој мери зависе од интеграција, ризик се са вашег кода пребацује на интеграције. А да бисте могли да ухватите промене интеграције и брзо реагујете, вашој апликацији је потребан одговарајући надзор.

Срећом, на тржишту је свакодневно све више алата за надзор без сервера. Неке од добрих и популарних опција су ИОпипе, Тхундра, Дасхбирд и Епсагон.

Али, апликације без сервера често имају дебелог клијента, што значи да позадинско надгледање није довољно. Треба вам сличан алат за предњи крај. Ово тржиште такође има пуно лепих алата, као што су Сентри и Роллбар.

Али у духу без сервера створили смо апликацију за праћење грешака отвореног кода названу Десоле. То је апликација без сервера коју можете да инсталирате на свој АВС налог. Омогућава организацијама да прате изузетке и грешке у апликацијама, а да не морају да бирају између погодности софтвера као услуге и сигурности решења за самостално хостовање. Можете га погледати овде: //десоле.ио.

Све илустрације су креиране помоћу апликације СимплеДиаграмс4.

Ако желите да сазнате више о тестирању и изградњи апликација без сервера помоћу Ноде.јс и АВС, погледајте „Апликације без сервера са Ноде.јс“, књигу коју сам написао са Александром Симовићем за Маннинг Публицатионс:

Апликације без сервера са Ноде.јс

Убедљив увод у постављање без сервера помоћу Цлаудиа.јс. ввв.маннинг.цом

Књига ће вас научити више о тестирању без сервера, са примерима кода, али такође ћете научити како да направите и отклоните грешке у АПИ-ју без сервера (са ДБ-ом и потврдом идентитета) помоћу Ноде и Цлаудиа.јс. И научићете како да направите цхатботове, за Фацебоок Мессенгер и СМС (користећи Твилио) и Алека вештине.