Azpiegitura probatzea kode gisa Pulumirekin. 2. zatia

Kaixo guztioi. Gaur zurekin partekatzen dugu artikuluaren azken zatia. "Pulumi-rekin azpiegitura kode gisa probatzea", zeinaren itzulpena ikastaroko ikasleentzat espresuki prestatu zen "DevOps praktikak eta tresnak".

Azpiegitura probatzea kode gisa Pulumirekin. 2. zatia

Inplementazio-probak

Proba estilo hau ikuspegi indartsua da eta kutxa zuriko probak egiteko aukera ematen digu gure azpiegitura kodearen barne funtzionamendua probatzeko. Hala ere, zertxobait mugatzen du proba dezakeguna. Probak benetako hedapenaren aurretik Pulumi-k sortutako memoria barneko hedapen planean oinarrituta egiten dira eta, beraz, hedapena bera ezin da probatu. Horrelako kasuetarako, Pulumi-k integrazio-proba-esparru bat du. Eta bi ikuspegi hauek oso ondo funtzionatzen dute elkarrekin!

Pulumi integrazioaren proba-esparrua Go-n idatzita dago, eta horrela probatzen dugu gure barne-kode gehiena. Aurretik eztabaidatutako unitate-probaren ikuspegia kutxa zuriaren probaren antzekoa zen arren, integrazio-probak kutxa beltza da. (Barne-proba zorrotzak egiteko aukerak ere badaude.) Esparru hau Pulumi programa oso bat hartzeko eta bertan bizi-zikloko hainbat eragiketa egiteko sortu zen, hala nola pila berri bat hutsetik zabaltzea, aldaketekin eguneratzea eta ezabatzea, agian hainbat aldiz. . Aldian-aldian (gauez, adibidez) eta estres proba gisa exekutatzen ditugu.

(Gu horretan ari gara, integrazio-probaren antzeko gaitasunak hizkuntzen jatorrizko SDK-n eskuragarri egon daitezen. Go integrazio probaren esparrua erabil dezakezu Pulumi programa idatzita dagoen hizkuntza edozein dela ere).

Programa marko hau erabiliz exekutatzen baduzu, honako hau egiaztatu dezakezu:

  • Zure proiektuaren kodea sintaktikoki zuzena da eta errorerik gabe exekutatzen da.
  • Pila eta sekretuen konfigurazio ezarpenek funtzionatzen dute eta behar bezala interpretatzen dira.
  • Zure proiektua behar bezala inplementa daiteke nahi duzun hodeiko hornitzailean.
  • Zure proiektua behar bezala berritu daiteke hasierako egoeratik beste N egoerara.
  • Zure proiektua behar bezala suntsitu eta zure hodeiko hornitzailetik kendu daiteke.

Laster ikusiko dugunez, marko hau exekuzio-denboran baliozkotzeko ere erabil daiteke.

Integrazio proba sinplea

Hau martxan ikusteko, biltegia aztertuko dugu pulumi/examples, gure taldeak eta Pulumi komunitateak gure tira eskaerak, konpromisoak eta gaueko eraikuntzak probatzeko erabiltzen baitute.

Jarraian, gure proba sinplifikatua dago S3 bucket eta beste objektu batzuk eskaintzen dituen adibidea:

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

Proba honek karpeta baten pila bat sortzeko, aldatzeko eta suntsitzeko oinarrizko bizi-zikloa zeharkatzen du aws-js-s3-folder. Minutu bat inguru beharko da gainditutako proba baten berri emateko:

$ go test .
PASS
ok      ... 43.993s

Aukera asko daude proba hauen portaera pertsonalizatzeko. Ikusi aukeren zerrenda osoa. egituran ProgramTestOptions. Adibidez, Jaeger amaiera-puntua konfigura dezakezu trazatzeko (Tracing), adierazi probak huts egingo duela espero duzula proba negatiboa bada (ExpectFailure), aplikatu programari "edizio" serie bat estatuen trantsizio sekuentzial baterako (EditDirs) eta askoz gehiago. Ikus dezagun nola erabili zure aplikazioaren hedapena probatzeko.

Baliabideen propietateak egiaztatzea

Goian aipaturiko integrazioak gure programak "funtzionatzen" duela ziurtatzen du, ez dela huts egiten. Baina zer gertatzen da ondoriozko pilaren propietateak egiaztatu nahi baditugu? Adibidez, baliabide mota batzuk hornitu direla (edo ez) eta atributu batzuk dituztela.

Parametroa ExtraRuntimeValidation egiteko ProgramTestOptions Pulumi-k erregistratutako hedapenaren osteko egoera aztertzeko aukera ematen digu, egiaztapen osagarriak egin ahal izateko. Honek ondoriozko pilaren egoeraren argazki osoa biltzen du, konfigurazioa, esportatutako irteera-balioak, baliabide guztiak eta haien propietate-balioak eta baliabideen arteko menpekotasun guztiak barne.

Horren oinarrizko adibide bat ikusteko, egiaztatu dezagun gure programak bat sortzen duela S3 kuboa:

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

Orain, go test exekutatzen dugunean, bizitza-zikloko proba-pilota bat igaroko ez ezik, pila arrakastaz zabaldu ondoren, emaitzazko egoeraren egiaztapen gehigarri bat egingo du.

Exekutatzeko probak

Orain arte, proba guztiak inplementazio portaerari eta Pulumi baliabideen ereduari buruzkoak izan dira. Zer gertatzen da hornitutako azpiegiturak benetan funtzionatzen duela egiaztatu nahi baduzu? Adibidez, makina birtuala martxan dagoela, S3 kuboak espero duguna dauka, eta abar.

Agian asmatu duzu nola egin hau: aukera ExtraRuntimeValidation egiteko ProgramTestOptions - Aukera paregabea da horretarako. Une honetan, Go proba pertsonalizatu bat exekutatzen duzu zure programaren baliabideen egoera osorako sarbidearekin. Egoera honek makina birtualeko IP helbideak, URLak eta sortzen diren hodeiko aplikazioekin eta azpiegiturekin elkarreragiteko behar den guztia bezalako informazioa biltzen du.

Adibidez, gure proba-programak jabetza esportatzen du webEndpoint ontzi deitu websiteUrl, hau da, konfiguratu dezakegun URL osoa index document. Aurkitzeko egoera fitxategian sakondu genezakeen arren bucket eta irakurri propietate hori zuzenean, baina kasu askotan gure pilek egiaztatzeko erabiltzeko komenigarriak iruditzen zaizkigun propietate erabilgarriak esportatzen dituzte:

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

Gure aurreko exekuzio-egiaztapenak bezala, egiaztapen hau pila igo eta berehala gauzatuko da, dei soil bati erantzunez. go test. Eta hori icebergaren punta besterik ez da: kodean idatz ditzakezun Go probaren eginbide guztiak eskuragarri daude.

Etengabeko Azpiegituren Integrazioa

Ona da ordenagailu eramangarri batean probak exekutatu ahal izatea, azpiegitura-aldaketa asko egiten ari direnean haiek probatzeko, kodea berrikusteko bidali aurretik. Baina guk eta gure bezeroetako askok azpiegiturak probatzen dituzte garapenaren bizi-zikloaren hainbat fasetan:

  • Bateratu aurretik probak egiteko irekitako tira eskaera guztietan.
  • Konpromiso bakoitzari erantzunez, bateratzea ondo egin dela egiaztatzea.
  • Aldian behin, esate baterako, gauez edo astero proba osagarriak egiteko.
  • Errendimendu edo estres proben barruan, normalean denbora luzez exekutatzen dira eta probak paraleloan exekutatzen ditu eta/edo programa bera hainbat aldiz zabaltzen du.

Horietako bakoitzarentzat, Pulumi-k zure gogoko etengabeko integrazio-sistemarekin integratzea onartzen du. Etengabeko integrazioarekin, honek zure azpiegiturarako proba-estaldura bera ematen dizu zure aplikazio-softwarerako.

Pulumi-k CI sistema arruntetarako laguntza du. Hona hemen horietako batzuk:

Informazio zehatzagoa lortzeko, mesedez, ikusi dokumentazioa Etengabeko erak.

Ingurune iragankorrak

Irekitzen den aukera oso indartsua ingurune iragankorrak onarpen-probetarako soilik zabaltzeko gaitasuna da. Kontzeptua proiektuak eta pilak Pulumi ingurune guztiz isolatuak eta independenteak erraz hedatzeko eta desmuntatzeko diseinatuta dago, hori guztia CLI komando sinple batzuetan edo integrazio-proba-esparru bat erabiliz.

GitHub erabiltzen baduzu, Pulumi-k eskaintzen du GitHub aplikazioa, onarpen-probak konektatzen lagunduko dizu zure CI kanalizazioko eskaerak ateratzeko. Instalatu besterik ez duzu aplikazioa GitHub biltegian, eta Pulumi-k azpiegituren aurrebista, eguneratze eta proben emaitzei buruzko informazioa gehituko du zure CI eta pool-eskaerei:

Azpiegitura probatzea kode gisa Pulumirekin. 2. zatia

Pulumi zure oinarrizko onarpen-probetarako erabiltzen duzunean, automatizazio gaitasun berriak lortuko dituzu, taldearen produktibitatea hobetuko dutenak eta zure aldaketen kalitatean konfiantza emango dizutenak.

Guztira

Artikulu honetan, helburu orokorreko programazio-lengoaiak erabiliz, gure aplikazioak garatzeko baliagarriak izan diren softwarea garatzeko teknika asko eskuratzen zaizkigula ikusi dugu. Unitate-probak, integrazio-probak eta exekuzio-denborako proba zabalak egiteko elkarrekin nola lan egiten duten barne hartzen dituzte. Probak eskaeraren arabera edo zure CI sisteman exekutatzeko errazak dira.

Pulumi - Kode irekiko softwarea, erabiltzeko doakoa eta zure gogoko programazio-lengoaia eta hodeiekin lan egiten du - proba ezazu gaur!

β†’ Lehenengo zatian

Iturria: www.habr.com

Gehitu iruzkin berria