Ittestjar Infrastruttura bħala Kodiċi ma Pulumi. Parti 2

Hi kollha. Illum naqsmu magħkom l-aħħar parti tal-artiklu. "Ittestjar tal-Infrastruttura bħala Kodiċi ma' Pulumi", li t-traduzzjoni tagħha ġiet ippreparata speċifikament għall-istudenti tal-kors "Prattiċi u għodod DevOps".

Ittestjar Infrastruttura bħala Kodiċi ma Pulumi. Parti 2

Ittestjar tal-iskjerament

Dan l-istil ta 'ttestjar huwa approċċ b'saħħtu u jippermettilna nwettqu ttestjar ta' kaxxa bajda biex nittestjaw il-ħidma interna tal-kodiċi tal-infrastruttura tagħna. Madankollu, tillimita xi ftit dak li nistgħu nittestjaw. It-testijiet isiru bbażati fuq il-pjan ta 'skjerament fil-memorja maħluq minn Pulumi qabel l-iskjerament attwali u għalhekk l-iskjerament innifsu ma jistax jiġi ttestjat. Għal każijiet bħal dawn, Pulumi għandu qafas ta 'test ta' integrazzjoni. U dawn iż-żewġ approċċi jaħdmu tajjeb flimkien!

Il-qafas tal-ittestjar tal-integrazzjoni Pulumi huwa miktub f'Go, li huwa kif nittestjaw il-biċċa l-kbira tal-kodiċi intern tagħna. Filwaqt li l-approċċ tal-ittestjar tal-unità diskuss qabel kien aktar bħall-ittestjar tal-kaxxa bajda, l-ittestjar tal-integrazzjoni huwa kaxxa sewda. (Hemm ukoll għażliet għal ttestjar intern rigoruż.) Dan il-qafas inħoloq biex jieħu programm Pulumi komplet u jwettaq diversi operazzjonijiet taċ-ċiklu tal-ħajja fuqu, bħall-iskjerament ta' munzell ġdid mill-bidu, l-aġġornament tiegħu b'varjazzjonijiet, u t-tħassir, possibbilment diversi drabi. . Aħna nħaddmuhom regolarment (per eżempju, bil-lejl) u bħala testijiet tal-istress.

(Aħna qed naħdmu fuqha, sabiex kapaċitajiet ta' ttestjar ta' integrazzjoni simili jkunu disponibbli fl-SDK nattiv tal-lingwi. Tista' tuża l-qafas tal-ittestjar tal-integrazzjoni ta' Go irrispettivament mil-lingwa li fiha jkun miktub il-programm Pulumi tiegħek).

Billi tħaddem il-programm billi tuża dan il-qafas tista' tiċċekkja dan li ġej:

  • Il-kodiċi tal-proġett tiegħek huwa sintattikament korrett u jaħdem mingħajr żbalji.
  • Is-settings tal-konfigurazzjoni tal-munzell u s-sigrieti jaħdmu u huma interpretati b'mod korrett.
  • Il-proġett tiegħek jista' jiġi skjerat b'suċċess fil-fornitur tal-cloud tal-għażla tiegħek.
  • Il-proġett tiegħek jista 'jiġi aġġornat b'suċċess mill-istat inizjali għal N stati oħra.
  • Il-proġett tiegħek jista 'jinqered u jitneħħa b'suċċess mill-fornitur tas-sħab tiegħek.

Kif ser naraw dalwaqt, dan il-qafas jista 'jintuża wkoll biex twettaq validazzjoni runtime.

Test ta 'integrazzjoni sempliċi

Biex naraw dan fl-azzjoni, aħna ser inħarsu lejn ir-repożitorju pulumi/examples, peress li t-tim tagħna u l-komunità Pulumi jużaha biex jittestjaw it-talbiet tal-ġibda, il-kommits u l-bini ta 'filgħaxija tagħna stess.

Hawn taħt hawn test simplifikat tagħna eżempju li jipprovdi barmil S3 u xi oġġetti oħra:

example_test.go:

package test
 
import (
    "os"
    "path"
    "testing"
 
    "github.com/pulumi/pulumi/pkg/testing/integration"
)
 
func TestExamples(t *testing.T) {
    awsRegion := os.Getenv("AWS_REGION")
    if awsRegion == "" {
        awsRegion = "us-west-1"
    }
    cwd, _ := os.Getwd()
    integration.ProgramTest(t, &integration.ProgramTestOptions{
        Quick:       true,
        SkipRefresh: true,
        Dir:         path.Join(cwd, "..", "..", "aws-js-s3-folder"),
        Config: map[string]string{
            "aws:region": awsRegion,
        },
    })
}

Dan it-test jgħaddi miċ-ċiklu tal-ħajja bażiku tal-ħolqien, il-modifika u l-qerda ta’ munzell għal folder aws-js-s3-folder. Se tieħu madwar minuta biex tirrapporta test li għadda:

$ go test .
PASS
ok      ... 43.993s

Hemm ħafna għażliet biex tippersonalizza l-imġieba ta 'dawn it-testijiet. Ara l-lista sħiħa tal-għażliet. fl-istruttura ProgramTestOptions. Pereżempju, tista' tikkonfigura l-endpoint ta' Jaeger biex jittraċċa (Tracing), indika li tistenna li t-test ifalli jekk it-test ikun negattiv (ExpectFailure), applika serje ta’ “editji” għall-programm għal transizzjoni sekwenzjali ta’ stati (EditDirs) u ħafna aktar. Ejja naraw kif tużahom biex tittestja l-iskjerament tal-applikazzjoni tiegħek.

Iċċekkjar tal-proprjetajiet tar-riżorsi

L-integrazzjoni diskussa hawn fuq tiżgura li l-programm tagħna "jaħdem"—ma jaħbatx. Imma x'jiġri jekk irridu niċċekkjaw il-proprjetajiet tal-munzell li jirriżulta? Pereżempju, li ċerti tipi ta' riżorsi ġew ipprovduti (jew le) u li għandhom ċerti attributi.

Parametru ExtraRuntimeValidation għall- ProgramTestOptions jippermettilna nħarsu lejn l-istat ta’ wara l-iskjerament irreġistrat minn Pulumi sabiex inkunu nistgħu nagħmlu kontrolli addizzjonali. Dan jinkludi stampa sħiħa tal-istat tal-munzell li jirriżulta, inkluż il-konfigurazzjoni, il-valuri tal-output esportati, ir-riżorsi kollha u l-valuri tal-proprjetà tagħhom, u d-dipendenzi kollha bejn ir-riżorsi.

Biex tara eżempju bażiku ta 'dan, ejja niċċekkjaw li l-programm tagħna joħloq wieħed S3 Barmil:

  integration.ProgramTest(t, &integration.ProgramTestOptions{
        // as before...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            var foundBuckets int
            for _, res := range stack.Deployment.Resources {
                if res.Type == "aws:s3/bucket:Bucket" {
                    foundBuckets++
                }
            }
            assert.Equal(t, 1, foundBuckets, "Expected to find a single AWS S3 Bucket")
        },
    })

Issa, meta nwettqu t-test tal-go, mhux biss se jgħaddi minn batterija ta 'testijiet taċ-ċiklu tal-ħajja, iżda wkoll, wara li tuża b'suċċess il-munzell, se twettaq kontroll addizzjonali fuq l-istat li jirriżulta.

Testijiet runtime

S'issa, it-testijiet kollha kienu purament dwar l-imġiba tal-iskjerament u l-mudell tar-riżorsi Pulumi. X'jiġri jekk trid tivverifika li l-infrastruttura pprovduta tiegħek fil-fatt taħdem? Pereżempju, li l-magna virtwali tkun qed taħdem, il-barmil S3 fih dak li nistennew, eċċ.

Jista' jkun li diġà qtajt kif tagħmel dan: għażla ExtraRuntimeValidation għall- ProgramTestOptions - din hija opportunità kbira għal dan. F'dan il-punt, inti tmexxi test Go personalizzat b'aċċess għall-istat sħiħ tar-riżorsi tal-programm tiegħek. Dan l-istat jinkludi informazzjoni bħal indirizzi IP tal-magni virtwali, URLs, u dak kollu meħtieġ biex fil-fatt jinteraġixxu mal-applikazzjonijiet u l-infrastruttura tal-cloud li jirriżultaw.

Pereżempju, il-programm tat-test tagħna jesporta l-proprjetà webEndpoint barmil imsejjaħ websiteUrl, li huwa l-URL sħiħ fejn nistgħu niksbu l-konfigurat index document. Għalkemm nistgħu ħaffer fil-fajl tal-istat biex insibu bucket u aqra dik il-proprjetà direttament, iżda f'ħafna każijiet il-munzelli tagħna jesportaw proprjetajiet utli bħal dan li nsibu konvenjenti biex nużaw għall-iċċekkjar:

integration.ProgramTest(t, &integration.ProgramTestOptions{
            // as before ...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            url := "http://" + stack.Outputs["websiteUrl"].(string)
            resp, err := http.Get(url)
            if !assert.NoError(t, err) {
                return
            }
            if !assert.Equal(t, 200, resp.StatusCode) {
                return
            }
            defer resp.Body.Close()
            body, err := ioutil.ReadAll(resp.Body)
            if !assert.NoError(t, err) {
                return
            }
            assert.Contains(t, string(body), "Hello, Pulumi!")
        },
    })

Bħall-kontrolli tar-runtime preċedenti tagħna, dan il-kontroll se jitwettaq immedjatament wara li jgħolli l-munzell, kollha bi tweġiba għal sejħa sempliċi go test. U dik hija biss il-ponta tal-iceberg—kull karatteristika tat-test Go li tista 'tikteb fil-kodiċi hija disponibbli.

Integrazzjoni Kontinwa tal-Infrastruttura

Tajjeb li tkun tista’ tmexxi testijiet fuq laptop meta jkunu qed isiru ħafna bidliet fl-infrastruttura biex jiġu ttestjati qabel ma jiġu sottomessi għar-reviżjoni tal-kodiċi. Iżda aħna u ħafna mill-klijenti tagħna nittestjaw l-infrastruttura f'diversi stadji taċ-ċiklu tal-ħajja tal-iżvilupp:

  • F'kull talba ta 'ġibda miftuħa għall-ittestjar qabel l-għaqda.
  • Bi tweġiba għal kull impenn, biex tiċċekkja darbtejn li l-għaqda saret b'mod korrett.
  • Perjodikament, bħal bil-lejl jew kull ġimgħa għal testijiet addizzjonali.
  • Bħala parti mill-ittestjar tal-prestazzjoni jew tal-istress, li tipikament idum fuq perjodu twil ta 'żmien u jwettaq testijiet b'mod parallel u/jew juża l-istess programm diversi drabi.

Għal kull wieħed minn dawn, Pulumi jappoġġja l-integrazzjoni mas-sistema ta 'integrazzjoni kontinwa favorita tiegħek. B'integrazzjoni kontinwa, dan jagħtik l-istess kopertura tat-test għall-infrastruttura tiegħek bħal għas-softwer tal-applikazzjoni tiegħek.

Pulumi għandu appoġġ għal sistemi CI komuni. Hawn huma xi wħud minnhom:

Għal aktar informazzjoni dettaljata, jekk jogħġbok irreferi għad-dokumentazzjoni għal Kunsinna Kontinwa.

Ambjenti Effimeri

Opportunità qawwija ħafna li tiftaħ hija l-abbiltà li jintużaw ambjenti effimeri biss għal skopijiet ta 'ttestjar ta' aċċettazzjoni. Kunċett proġetti u munzelli Pulumi hija ddisinjata biex tiskjera u tneħħi faċilment ambjenti kompletament iżolati u indipendenti, kollha fi ftit kmandi sempliċi CLI jew bl-użu ta 'qafas ta' ttestjar ta 'integrazzjoni.

Jekk tuża GitHub, allura Pulumi joffri App GitHub, li tgħinek tgħaqqad l-ittestjar tal-aċċettazzjoni biex tiġbed it-talbiet fi ħdan il-pipeline tas-CI tiegħek. Installa biss l-applikazzjoni fir-repożitorju tal-GitHub, u Pulumi se żżid informazzjoni dwar previżjonijiet tal-infrastruttura, aġġornamenti u riżultati tal-ittestjar mat-talbiet CI u pool tiegħek:

Ittestjar Infrastruttura bħala Kodiċi ma Pulumi. Parti 2

Meta tuża Pulumi għat-testijiet ewlenin ta 'aċċettazzjoni tiegħek, int ser tikseb kapaċitajiet ġodda ta' awtomazzjoni li jtejbu l-produttività tat-tim u jagħtuk kunfidenza fil-kwalità tal-bidliet tiegħek.

Total

F'dan l-artikolu, rajna li bl-użu ta 'lingwi ta' programmar ta 'skop ġenerali, ħafna tekniki ta' żvilupp ta 'softwer isiru disponibbli għalina li kienu utli fl-iżvilupp tal-applikazzjonijiet tagħna. Dawn jinkludu l-ittestjar tal-unità, l-ittestjar tal-integrazzjoni, u kif jaħdmu flimkien biex iwettqu ttestjar ta 'runtime estensiv. It-testijiet huma faċli biex isiru fuq talba jew fis-sistema CI tiegħek.

Pulumi - softwer b'sors miftuħ, liberu li juża u jaħdem bil-lingwi u s-sħab ta' programmar favoriti tiegħek - ipprovaha llum!

L-ewwel parti

Sors: www.habr.com

Żid kumment