Testimi i infrastrukturës si kod me Pulumi. Pjesa 2

Përshëndetje të gjithëve. Sot po ndajmë me ju pjesën përfundimtare të artikullit «Testimi i infrastrukturës si kod me ndihmën e Pulumi», përkthyer veçanërisht për studentët e kursit «Praktikat dhe mjetet DevOps».

Testimi i infrastrukturës si kod me Pulumi. Pjesa 2

Testimi i vendosjes

Stili i testimit të shqyrtuar është një qasje e fuqishme që na lejon të realizojmë testimin e kutisë së bardhë për të verifikuar brendësitë e funksionimit të kodit tonë të infrastrukturës. Megjithatë, kjo qasje është disi e kufizuar në atë që mund të kontrollojmë. Testet ekzekutohen në bazë të një plani të memorie in-memory të vendosjes, i krijuar nga Pulumi para vendosjes së drejtpërdrejtë dhe prandaj vetë vendosja nuk mund të testohet. Për këto raste, Pulumi ofron një kornizë për testin e integrimeve. Dhe këto dy qasje punojnë shumë mirë së bashku!

Korniza e testimit të integrimeve Pulumi është shkruar në Go, dhe me ndihmën e saj ne testojmë shumicën e kodit tonë të brendshëm. Nëse qasja e testimit modular të shqyrtuar më parë ishte më shumë e ngjashme me testimin e kutisë së bardhë, testimi i integrimeve është një testim i kutisë së zezë. (Ka edhe variante të testimit të brendshëm të thelluar.) Kjo kornizë është krijuar për të marrë një program të plotë Pulumi dhe për të kryer operacione të ndryshme në ciklin e jetës, si vendosja e një steka të ri nga zeroja, përditësimi i tij me variacione dhe fshirja, ndoshta disa herë. Ne i kryejmë ato rregullisht (p.sh. natën) dhe si teste stresi.

(Ne po punojmëpër të siguruar që mundësi të ngjashme për testimin e integrimeve të jenë edhe në SDK-në e gjuhëve vendase. Ju mund të përdorni kornizën e testimit të integrimeve Go të pavarur nga gjuhët në të cilat është shkruar programi juaj Pulumi).

Duke ekzekutuar programin me këtë kornizë, mund të kontrolloni sa vijon:

  • Kodi i projektit tuaj Ă«shtĂ« sintaksikisht i saktĂ« dhe punon pa gabime.
  • CilĂ«simet e konfigurimit tĂ« stekĂ«s dhe sekreteve funksionojnĂ« dhe interpretohen siç duhet.
  • Projekti juaj mund tĂ« vendoset me sukses nĂ« ofruesin tuaj tĂ« preferuar tĂ« cloud.
  • Projekti juaj mund tĂ« pĂ«rditĂ«sohet me sukses nga gjendja fillestare nĂ« N gjendje tĂ« tjera.
  • Projekti juaj mund tĂ« shkatĂ«rrohet dhe eliminohet me sukses nga ofruesi juaj i cloud.

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

Një test i thjeshtë i integrimeve

Për ta parë këtë në veprim, do të shohim depozitën pulumi/examples, pasi ekipi ynë dhe komuniteti Pulumi, e përdorin atë për të testuar kërkesat e veta, angazhimet dhe ndërtimet e natës.

Më poshtë është një test i thjeshtuar i shembujt tanë, që kryen provizionimin e një S3 bucket dhe disa objekteve të tjera.:

example_test.go:

paket 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 bazik të jetës, krijimit, ndryshimit dhe shkatërrimit të stekës për folderin aws-js-s3-folder. Do të zgjasë rreth një minutë për të raportuar testin e kaluar:

$ go test .
PASS
ok      ... 43.993s

Ka shumĂ« parametra pĂ«r tĂ« konfiguroni sjelljen e kĂ«tyre testeve. Lista e plotĂ« e opsioneve Ă«shtĂ« nĂ« strukturĂ«n ProgramTestOptions. PĂ«r shembull, mund tĂ« konfiguroni pikĂ«n e fundjavĂ«s sĂ« Jaeger pĂ«r gjurmimin (Gjurmimi), tĂ« specifikoni se prisni dĂ«shtimin e testit gjatĂ« testimit negativ (Pritet dĂ«shtimi), tĂ« aplikoni njĂ« seri “ndryshimesh” nĂ« program pĂ«r kalimin e pjesshĂ«m tĂ« gjendjeve (EditDirs) dhe shumĂ« mĂ« tepĂ«r. Le tĂ« shohim se si t'i pĂ«rdorim ato pĂ«r tĂ« kontrolluar vendosjen e aplikacionit.

Kontrolli i pronave të burimeve

Integrimi, i cili u pĂ«rmend mĂ« parĂ«, siguron qĂ« programi ynĂ« «punon» — nuk dĂ«shton. Por çfarĂ« nĂ«se duam tĂ« verifikojmĂ« pronat e stekĂ«s qĂ« kemi marrĂ«? PĂ«r shembull, se disa lloje burimesh u krijuan (ose nuk u krijuan) dhe qĂ« ato kanĂ« disa atributet tĂ« caktuara.

Parametri ExtraRuntimeValidation për ProgramTestOptions na lejon të shohim gjendjen, të regjistruar nga Pulumi pas vendosjes (gjendja pas-vendosjes), në mënyrë që të mund të bëjmë kontrollime shtesë. Kjo përfshin një pamje të plotë të gjendjes së stekës rezultuese, përfshirë konfigurimin, vlerat e dalura të eksportuara, të gjitha burimet dhe vlerat e tyre të pronave, si dhe të gjitha varësitë midis burimeve.

Për të parë një shembull bazik të kësaj, le të verifikojmë se programi ynë krijon një S3 Bucket:

  integration.ProgramTest(t, &integration.ProgramTestOptions{
        // si më parë...
        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, "Pritejme të gjejmë një AWS S3 Bucket")
        },
    })

Tani, kur do të ekzekutojmë go test, ai jo vetëm që do të kalojë përmes një baterie testesh të ciklit të jetës, por gjithashtu, pas një implementimi të suksesshëm të stack-ut, do të kryejë një verifikim shtesë të gjendjes së rezultatit.

Testet e kohës së ekzekutimit

Derisa tani tĂ« gjitha testet ishin ekskluzivisht rreth sjelljes gjatĂ« implementimit dhe modelit tĂ« resursit Pulumi. ÇfarĂ« tĂ« bĂ«jmĂ« nĂ«se duam tĂ« verifikojmĂ« se infrastruktura jonĂ« e pĂ«rgatitur funksionon nĂ« tĂ« vĂ«rtetĂ«? PĂ«r shembull, qĂ« makina virtuale funksionon, S3 bucket pĂ«rmban atĂ« qĂ« presim, e kĂ«shtu me radhĂ«.

Mund të keni kuptuar tashmë se si ta bëni këtë: opsioni ExtraRuntimeValidation për ProgramTestOptions është një mundësi e shkëlqyer për këtë. Në këtë pikë, ju ekzekutoni një test të rastësishëm Go me qasje në gjendjen e plotë të resurseve të programit tuaj. Kjo gjendje përfshin informacione si adresat IP të makinave virtuale, URL-të dhe gjithë atë që nevojitet për ndërveprimin real me aplikacionet dhe infrastrukturën cloud të marra.

Për shembull, programi ynë testues eksporton pronën webEndpoint të bucket-it të quajtur websiteUrl, i cili paraqet një URL të plotë për të cilën ne mund të marrim dokumentin index. Megjithatë, mund të thellojmë në skedarin e gjendjes për të gjetur bucket dhe ta lexojmë këtë pronë drejtpërdrejt, por në shumë raste stekat tona eksportojnë prona të vlefshme, si kjo, të cilat na janë të dobishme për verifikimin:

integration.ProgramTest(t, &integration.ProgramTestOptions{
            // si më parë ...
        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!")
        },
    })

Si testet tona tĂ« mĂ«parshme tĂ« kohĂ«s sĂ« ekzekutimit, ky verifikim do tĂ« ekzekutohet menjĂ«herĂ« pas ngritjes sĂ« stack-ut, dhe tĂ« gjitha kĂ«to nĂ« pĂ«rgjigje tĂ« njĂ« thirje tĂ« thjeshtĂ« go test. Dhe ky Ă«shtĂ« vetĂ«m maja e akullit — tĂ« gjitha mundĂ«sitĂ« testuese tĂ« Go janĂ« tĂ« disponueshme qĂ« ju mund tĂ« shkruani nĂ« kod.

Integrimi i vazhdueshëm të infrastrukturës

ËshtĂ« e mirĂ« tĂ« kesh mundĂ«sinĂ« pĂ«r tĂ« ekzekutuar teste nĂ« laptop, kur bĂ«hen shumĂ« ndryshime nĂ« infrastrukturĂ«, pĂ«r t'i verifikuar ato pĂ«rpara se tĂ« dĂ«rgohen pĂ«r shqyrtim tĂ« kodit. Por ne dhe shumĂ« nga klientĂ«t e tanĂ« testojmĂ« infrastrukturĂ«n nĂ« faza tĂ« ndryshme tĂ« ciklit tĂ« zhvillimit:

  • NĂ« çdo kĂ«rkesĂ« pull-i tĂ« hapur pĂ«r testim para bashkimit.
  • NĂ« pĂ«rgjigje tĂ« çdo komenti, pĂ«r tĂ« verifikuar se bashkimi u krye siç duhet.
  • Periodicisht, pĂ«r shembull, natĂ«n ose çdo javĂ« pĂ«r testim tĂ« shtuar.
  • NĂ« kuadĂ«r tĂ« testeve tĂ« performancĂ«s ose testeve stresuese, tĂ« cilat zakonisht kryhen pĂ«r njĂ« kohĂ« tĂ« gjatĂ« dhe ekzekutojnĂ« teste paralelisht dhe/ose implementojnĂ« tĂ« njĂ«jtin program disa herĂ«.

Për çdo një prej tyre, Pulumi mbështet integrimin me sistemin tuaj të preferuar të integrimit të vazhdueshëm. Me integrimin e vazhdueshëm, kjo ju ofron mbulimin e testeve për infrastrukturën tuaj, si për softuerin aplikativ.

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

Për më shumë detaje, ju lutemi referojuni dokumentacionit për Continuous Delivery.

Mjediset efemere

Një mundësi shumë e fuqishme që hapet është mundësia për të implementuar mjedise efemere ekskluzivisht për qëllime testimi të pranimit. Koncepti i projekteve dhe stekëve Pulumi është ndërtuar në mënyrë që të lehtësojë implementimin dhe shkatërrimin e mjediseve të plota dhe të izoluar, gjithçka me disa komanda të thjeshta CLI ose përmes kornizës së testimit të integrimit.

Nëse përdorni GitHub, Pulumi ofron GitHub App, e cila do t'ju ndihmojë të lidheni testimin e pranimit me kërkesat pull brenda pipeline-it tuaj CI. Thjesht instaloni aplikacionin në repositorin e GitHub, dhe Pulumi në CI-në tuaj dhe informacioni mbi parashikimin e infrastrukturës, azhurnimet dhe rezultatet e testeve do të shtohen në kërkesat pull:

Testimi i infrastrukturës si kod me Pulumi. Pjesa 2

Duke përdorur Pulumi për testet tuaja të pranimit, do të keni mundësi të reja automatizimi që do të përmirësojnë efikasitetin e ekipit dhe do të japin siguri për cilësinë e ndryshimeve.

Përfundimi

Në këtë artikull ne pamë se, duke përdorur gjuhët e programimit të përgjithshme, na bëhen të arritshme shumë metoda për zhvillimin e softuerit, të cilat ishin të dobishme për ndërtimin e aplikacioneve tona. Ato përfshijnë testimin modular, testimin e integratës, si dhe ndërveprimin e tyre për të kryer testime të gjera në kohë reale. Testet fillojnë lehtësisht sipas kërkesës ose në sistemin tuaj CI.

Pulumi — njĂ« software me burim tĂ« hapur, qĂ« Ă«shtĂ« falas pĂ«r t'u pĂ«rdorur dhe punon me gjuhĂ«t tuaja tĂ« preferuara tĂ« programimit dhe me cloud-in tuaj — provojeni sot!

→ Pjesa e parĂ«

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster