Testimi i Infrastrukturës si Kod me Pulumi. Pjesa 2

Pershendetje te gjitheve. Sot ne ndajmë me ju pjesën e fundit të artikullit. "Testimi i infrastrukturës si kod me Pulumi", përkthimi i të cilit u përgatit posaçërisht për studentët e kursit "Praktikat dhe mjetet e DevOps".

Testimi i Infrastrukturës si Kod me Pulumi. Pjesa 2

Testimi i vendosjes

Ky stil testimi është një qasje e fuqishme dhe na lejon të kryejmë testimin e kutisë së bardhë për të testuar funksionimin e brendshëm të kodit tonë të infrastrukturës. Megjithatë, ajo kufizon disi atë që ne mund të testojmë. Testet kryhen bazuar në planin e vendosjes në memorie të krijuar nga Pulumi përpara vendosjes aktuale dhe për këtë arsye vetë vendosja nuk mund të testohet. Për raste të tilla, Pulumi ka një kuadër testi integrimi. Dhe këto dy qasje funksionojnë shumë së bashku!

Korniza e testimit të integrimit Pulumi është shkruar në Go, e cila është mënyra se si testojmë shumicën e kodit tonë të brendshëm. Ndërsa qasja e diskutuar më parë e testimit të njësive ishte më shumë si testimi i kutisë së bardhë, testimi i integrimit është një kuti e zezë. (Ka edhe opsione për testim të brendshëm rigoroz.) Ky kuadër u krijua për të marrë një program të plotë Pulumi dhe për të kryer operacione të ndryshme të ciklit jetësor në të, të tilla si vendosja e një grupi të ri nga e para, përditësimi i tij me variacione dhe fshirja e tij, ndoshta disa herë. . Ne i drejtojmë ato rregullisht (për shembull, gjatë natës) dhe si teste stresi.

(Ne ne jemi duke punuar për të, në mënyrë që aftësi të ngjashme të testimit të integrimit të jenë të disponueshme në SDK-në amtare të gjuhëve. Ju mund të përdorni kornizën e testimit të integrimit Go pavarësisht nga gjuha në të cilën është shkruar programi juaj Pulumi).

Duke ekzekutuar programin duke përdorur këtë kornizë, mund të kontrolloni sa vijon:

  • Kodi i projektit tuaj është sintaksorisht i saktë dhe funksionon pa gabime.
  • Cilësimet e konfigurimit të pirgut dhe sekreteve funksionojnë dhe interpretohen saktë.
  • Projekti juaj mund të vendoset me sukses në ofruesin cloud të zgjedhjes suaj.
  • Projekti juaj mund të përmirësohet me sukses nga gjendja fillestare në N shtete të tjera.
  • Projekti juaj mund të shkatërrohet me sukses dhe të hiqet nga ofruesi juaj i resë kompjuterike.

Siç do ta shohim së shpejti, kjo kornizë mund të përdoret gjithashtu për të kryer validimin e kohës së funksionimit.

Test i thjeshtë integrimi

Për ta parë këtë në veprim, ne do të shikojmë në depo pulumi/examples, pasi ekipi ynë dhe komuniteti Pulumi e përdorin atë për të testuar kërkesat tona për tërheqje, angazhime dhe ndërtime gjatë natës.

Më poshtë është një test i thjeshtuar i ynë shembull që ofron kovën S3 dhe disa objekte të tjera:

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

Ky test kalon nëpër ciklin themelor të jetës së krijimit, modifikimit dhe shkatërrimit të një pirg për një dosje aws-js-s3-folder. Do të duhet rreth një minutë për të raportuar një test të kaluar:

$ go test .
PASS
ok      ... 43.993s

Ka shumë opsione për të personalizuar sjelljen e këtyre testeve. Shihni listën e plotë të opsioneve. në strukturë ProgramTestOptions. Për shembull, mund të konfiguroni pikën fundore të Jaeger për të gjurmuar (Tracing), tregoni se prisni që testi të dështojë nëse testimi është negativ (ExpectFailure), aplikoni një seri "redaktimesh" në program për një tranzicion të njëpasnjëshëm të gjendjeve (EditDirs) edhe me shume. Le të shohim se si t'i përdorim ato për të testuar vendosjen e aplikacionit tuaj.

Kontrollimi i vetive të burimeve

Integrimi i diskutuar më sipër siguron që programi ynë "funksionon" - nuk prishet. Por, çka nëse duam të kontrollojmë vetitë e pirgut që rezulton? Për shembull, se disa lloje burimesh janë siguruar (ose jo) dhe se ato kanë atribute të caktuara.

Parametër ExtraRuntimeValidation për ProgramTestOptions na lejon të shikojmë gjendjen pas vendosjes së regjistruar nga Pulumi në mënyrë që të mund të bëjmë kontrolle shtesë. Kjo përfshin një pamje të plotë të gjendjes së grumbullit që rezulton, duke përfshirë konfigurimin, vlerat e prodhimit të eksportuara, të gjitha burimet dhe vlerat e tyre të vetive, dhe të gjitha varësitë midis burimeve.

Për të parë një shembull bazë të kësaj, le të kontrollojmë nëse programi ynë e krijon një të tillë Kovë S3:

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

Tani, kur kryejmë testin go, ai jo vetëm që do të kalojë përmes një baterie të testeve të ciklit jetësor, por gjithashtu, pas vendosjes me sukses të pirgut, ai do të kryejë një kontroll shtesë në gjendjen që rezulton.

Testet në kohëzgjatje

Deri më tani, të gjitha testet kanë qenë thjesht rreth sjelljes së vendosjes dhe modelit të burimeve Pulumi. Po sikur të dëshironi të verifikoni që infrastruktura juaj e ofruar në të vërtetë funksionon? Për shembull, që makina virtuale po funksionon, kova S3 përmban atë që presim, e kështu me radhë.

Mund ta keni menduar tashmë se si ta bëni këtë: opsion ExtraRuntimeValidation për ProgramTestOptions - kjo është një mundësi e madhe për këtë. Në këtë pikë, ju kryeni një test të personalizuar Go me qasje në gjendjen e plotë të burimeve të programit tuaj. Kjo gjendje përfshin informacione të tilla si adresat IP të makinës virtuale, URL-të dhe gjithçka që nevojitet për të bashkëvepruar realisht me aplikacionet dhe infrastrukturën e resë kompjuterike që rezultojnë.

Për shembull, programi ynë i testimit e eksporton pronën webEndpoint thirri kovë websiteUrl, e cila është URL-ja e plotë ku mund të marrim konfigurimin index document. Edhe pse ne mund të gërmojmë në dosjen e shtetit për të gjetur bucket dhe lexoni drejtpërdrejt atë pronë, por në shumë raste raftet tona eksportojnë veti të dobishme si kjo që ne i shohim të përshtatshme për t'u përdorur për të kontrolluar:

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

Ashtu si kontrollet tona të mëparshme të ekzekutimit, ky kontroll do të ekzekutohet menjëherë pas ngritjes së stivit, gjithçka në përgjigje të një thirrjeje të thjeshtë go test. Dhe kjo është vetëm maja e ajsbergut - çdo veçori e testit Go që mund të shkruani me kod është e disponueshme.

Integrimi i vazhdueshëm i infrastrukturës

Është mirë të jesh në gjendje të kryesh teste në një kompjuter portativ kur po bëhen shumë ndryshime në infrastrukturë për t'i testuar ato përpara se t'i dërgosh për shqyrtim kodi. Por ne dhe shumë nga klientët tanë testojmë infrastrukturën në faza të ndryshme të ciklit jetësor të zhvillimit:

  • Në çdo kërkesë të hapur tërheqjeje për testim përpara bashkimit.
  • Në përgjigje të çdo kryerjeje, për të kontrolluar dy herë nëse bashkimi është bërë saktë.
  • Periodikisht, si natën ose çdo javë për testime shtesë.
  • Si pjesë e testimit të performancës ose stresit, i cili zakonisht funksionon për një periudhë të gjatë kohore dhe kryen teste paralelisht dhe/ose vendos të njëjtin program disa herë.

Për secilën prej tyre, Pulumi mbështet integrimin me sistemin tuaj të preferuar të integrimit të vazhdueshëm. Me integrimin e vazhdueshëm, kjo ju jep të njëjtin mbulim testimi për infrastrukturën tuaj si për softuerin tuaj të aplikacionit.

Pulumi ka mbështetje për sistemet e zakonshme CI. Ja disa prej tyre:

Për informacion më të detajuar, ju lutemi referojuni dokumentacionit për Dorëzimi i vazhdueshëm.

Mjediset kalimtare

Një mundësi shumë e fuqishme që hapet është aftësia për të vendosur mjedise kalimtare vetëm për qëllime të testimit të pranimit. Koncepti projekte dhe pirgje Pulumi është krijuar për të vendosur dhe shkatërruar me lehtësi mjedise plotësisht të izoluara dhe të pavarura, të gjitha në disa komanda të thjeshta CLI ose duke përdorur një kornizë testimi integrimi.

Nëse përdorni GitHub, atëherë Pulumi ofron Aplikacioni GitHub, i cili do t'ju ndihmojë të lidhni testimin e pranimit për të tërhequr kërkesat brenda tubacionit tuaj CI. Thjesht instaloni aplikacionin në depon e GitHub dhe Pulumi do të shtojë informacion në lidhje me pamjet paraprake të infrastrukturës, përditësimet dhe rezultatet e testimit në kërkesat tuaja për CI dhe grup:

Testimi i Infrastrukturës si Kod me Pulumi. Pjesa 2

Kur përdorni Pulumi për testet tuaja bazë të pranimit, do të fitoni aftësi të reja automatizimi që do të përmirësojnë produktivitetin e ekipit dhe do t'ju japin besim në cilësinë e ndryshimeve tuaja.

Total

Në këtë artikull, ne kemi parë se duke përdorur gjuhë programimi për qëllime të përgjithshme, shumë teknika të zhvillimit të softuerit bëhen të disponueshme për ne që kanë qenë të dobishme në zhvillimin e aplikacioneve tona. Ato përfshijnë testimin e njësisë, testimin e integrimit dhe mënyrën se si ata punojnë së bashku për të kryer testime të gjera të kohës së funksionimit. Testet janë të lehta për t'u ekzekutuar sipas kërkesës ose në sistemin tuaj CI.

Pulumi - softuer me burim të hapur, i lirë për t'u përdorur dhe punon me gjuhët tuaja të preferuara të programimit dhe retë - provojeni sot!

Pjesa e pare

Burimi: www.habr.com

Shto një koment