Prófa innviði sem kóða með Pulumi. 2. hluti

Hæ allir. Í dag deilum við síðasta hluta greinarinnar með þér. „Prófa innviði sem kóða með Pulumi“, en þýðingin var unnin sérstaklega fyrir nemendur á námskeiðinu „DevOps venjur og verkfæri“.

Prófa innviði sem kóða með Pulumi. 2. hluti

Dreifingarprófun

Þessi prófunarstíll er öflug nálgun og gerir okkur kleift að framkvæma hvíta kassaprófun til að prófa innri virkni innviðakóða okkar. Hins vegar takmarkar það nokkuð hvað við getum prófað. Prófin eru gerðar út frá dreifingaráætluninni í minni sem Pulumi bjó til fyrir raunverulega dreifinguna og því er ekki hægt að prófa dreifinguna sjálfa. Fyrir slík tilvik hefur Pulumi samþættingarprófunarramma. Og þessar tvær aðferðir virka frábærlega saman!

Pulumi samþættingarprófunarramminn er skrifaður í Go, sem er hvernig við prófum megnið af innri kóðanum okkar. Þó að áður rædd einingaprófunaraðferð hafi verið meira eins og prófun á hvítum kassa, þá er samþættingarpróf svartur kassi. (Það eru líka möguleikar fyrir strangar innri prófanir.) Þessi rammi var búinn til til að taka fullkomið Pulumi forrit og framkvæma ýmsar lífsferilsaðgerðir á því, svo sem að setja nýjan stafla frá grunni, uppfæra hann með afbrigðum og eyða honum, hugsanlega mörgum sinnum . Við keyrum þau reglulega (til dæmis á nóttunni) og sem álagspróf.

(Við við erum að vinna í því, þannig að svipaðar samþættingarprófunargetur eru fáanlegar í innfæddu SDK tungumálanna. Þú getur notað Go samþættingarprófunarrammann óháð því tungumáli sem Pulumi forritið þitt er skrifað á).

Með því að keyra forritið með þessum ramma geturðu athugað eftirfarandi:

  • Verkefniskóðinn þinn er setningafræðilega réttur og keyrir án villna.
  • Stillingar stafla og leyndarmála virka og eru túlkaðar rétt.
  • Hægt er að dreifa verkefninu þínu með góðum árangri í skýjaveitunni að eigin vali.
  • Hægt er að uppfæra verkefnið þitt úr upphaflegu ástandi í N önnur ríki.
  • Hægt er að eyða verkefninu þínu og fjarlægja það frá skýjaveitunni þinni.

Eins og við munum sjá fljótlega er einnig hægt að nota þennan ramma til að framkvæma keyrslustaðfestingu.

Einfalt samþættingarpróf

Til að sjá þetta í aðgerð munum við skoða geymsluna pulumi/examples, þar sem teymið okkar og Pulumi samfélagið notar það til að prófa okkar eigin dráttarbeiðnir, skuldbindingar og næturbyggingar.

Hér að neðan er einfaldað próf af okkar dæmi sem veitir S3 fötu og nokkra aðra hluti:

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,
        },
    })
}

Þetta próf fer í gegnum grunnlífsferil þess að búa til, breyta og eyðileggja stafla fyrir möppu aws-js-s3-folder. Það mun taka um það bil eina mínútu að tilkynna um staðist próf:

$ go test .
PASS
ok      ... 43.993s

Það eru margir möguleikar til að sérsníða hegðun þessara prófa. Sjá allan lista yfir valkosti. í uppbyggingunni ProgramTestOptions. Til dæmis geturðu stillt Jaeger endapunkt til að rekja (Tracing), gefur til kynna að þú búist við því að prófið falli ef prófið er neikvætt (ExpectFailure), beittu röð „breytinga“ á forritið fyrir raðskipti á ríkjum (EditDirs) Og mikið meira. Við skulum sjá hvernig á að nota þau til að prófa uppsetningu forritsins.

Athugar eiginleika auðlinda

Samþættingin sem fjallað er um hér að ofan tryggir að forritið okkar „virki“ - það hrynur ekki. En hvað ef við viljum athuga eiginleika stafla sem myndast? Til dæmis, að ákveðnar tegundir tilfræða hafi (eða hafa ekki) verið útvegaðar og að þær hafi ákveðna eiginleika.

Viðfang ExtraRuntimeValidation í ProgramTestOptions gerir okkur kleift að skoða stöðuna eftir dreifingu skráð af Pulumi svo við getum gert frekari athuganir. Þetta felur í sér heildarmynd af stöðu stafla sem myndast, þar á meðal uppsetningu, útflutt úttaksgildi, öll tilföng og eignagildi þeirra og öll ósjálfstæði milli tilfanga.

Til að sjá grunndæmi um þetta skulum við athuga hvort forritið okkar býr til eitt S3 fötu:

  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")
        },
    })

Nú, þegar við keyrum go próf, mun það ekki aðeins fara í gegnum rafhlöðu af lífsferilsprófum, heldur mun það einnig, eftir að hafa komið staflanum fyrir, framkvæma viðbótarathugun á ástandinu sem myndast.

Runtime próf

Hingað til hafa allar prófanir eingöngu snúist um dreifingarhegðun og Pulumi auðlindalíkanið. Hvað ef þú vilt staðfesta að úthlutað innviði þitt virki í raun? Til dæmis að sýndarvélin sé í gangi, S3 fötuna inniheldur það sem við búumst við og svo framvegis.

Þú gætir hafa þegar giskað á hvernig á að gera þetta: valkostur ExtraRuntimeValidation í ProgramTestOptions - þetta er frábært tækifæri fyrir þetta. Á þessum tímapunkti keyrir þú sérsniðið Go próf með aðgangi að fullri stöðu auðlinda forritsins þíns. Þetta ástand inniheldur upplýsingar eins og IP-tölur sýndarvéla, vefslóðir og allt sem þarf til að hafa raunveruleg samskipti við skýjaforritin og innviðina sem myndast.

Til dæmis flytur prófunarkerfið okkar út eignina webEndpoint fötu kallað websiteUrl, sem er öll vefslóðin þar sem við getum stillt index document. Þó við gætum grafið í ríkisskránni til að finna bucket og lestu þá eign beint, en í mörgum tilfellum flytja staflarnir okkar út gagnlegar eignir eins og þessa sem okkur finnst þægilegt að nota til að athuga:

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!")
        },
    })

Eins og fyrri athugun okkar á keyrslutíma verður þessi athugun framkvæmd strax eftir að staflan hefur verið hækkað, allt sem svar við einföldu símtali go test. Og það er bara toppurinn á ísjakanum - sérhver Go prófunareiginleiki sem þú getur skrifað í kóða er tiltækur.

Stöðug samþætting innviða

Það er gott að geta keyrt próf á fartölvu þegar verið er að gera miklar innviðabreytingar til að prófa þær áður en þær eru sendar til kóðaskoðunar. En við og margir viðskiptavinir okkar prófum innviði á ýmsum stigum þróunarlífsferils:

  • Í hverri opinni pull beiðni um prófun fyrir sameiningu.
  • Til að bregðast við hverri skuldbindingu, að athuga hvort sameiningin hafi verið rétt gerð.
  • Reglulega, svo sem á nóttunni eða vikulega til viðbótarprófa.
  • Sem hluti af frammistöðu- eða álagsprófum, sem venjulega keyrir yfir langan tíma og keyrir próf samhliða og/eða notar sama forritið mörgum sinnum.

Fyrir hvert þeirra styður Pulumi samþættingu við uppáhalds samfellda samþættingarkerfið þitt. Með stöðugri samþættingu gefur þetta þér sömu prófunarumfjöllun fyrir innviði þína og fyrir forritahugbúnaðinn þinn.

Pulumi hefur stuðning fyrir algeng CI kerfi. Hér eru nokkrar þeirra:

Nánari upplýsingar er að finna í skjölunum fyrir Stöðug Afhending.

Efnalegt umhverfi

Mjög öflugt tækifæri sem opnast er hæfileikinn til að dreifa skammvinnum umhverfi eingöngu til staðfestingarprófunar. Hugtak verkefni og stafla Pulumi er hannað til að nota auðveldlega og rífa niður algjörlega einangrað og óháð umhverfi, allt í nokkrum einföldum CLI skipunum eða með því að nota samþættingarprófunarramma.

Ef þú notar GitHub, þá býður Pulumi GitHub app, sem mun hjálpa þér að tengja staðfestingarprófanir til að draga beiðnir innan CI leiðslunnar þinnar. Settu bara upp forritið í GitHub geymslunni og Pulumi mun bæta upplýsingum um innviðaforskoðun, uppfærslur og prófunarniðurstöður við CI og laugbeiðnir þínar:

Prófa innviði sem kóða með Pulumi. 2. hluti

Þegar þú notar Pulumi fyrir kjarnaviðurkenningarprófin þín færðu nýja sjálfvirknimöguleika sem mun bæta framleiðni liðsins og veita þér traust á gæðum breytinganna.

Samtals

Í þessari grein höfum við séð að með því að nota almenn forritunarmál verða margar hugbúnaðarþróunartækni tiltækar fyrir okkur sem hafa verið gagnlegar við að þróa forritin okkar. Þau fela í sér einingaprófun, samþættingarprófun og hvernig þau vinna saman til að framkvæma umfangsmikla keyrslupróf. Auðvelt er að keyra próf eftir beiðni eða í CI kerfinu þínu.

Pulumi - opinn hugbúnaður, ókeypis í notkun og vinnur með uppáhalds forritunarmálunum þínum og skýjum - prófaðu það í dag!

Í fyrsta hluta

Heimild: www.habr.com

Bæta við athugasemd