Tès enfrastrikti kòm Kòd ak Pulumi. Pati 2

Bonjou tout moun. Jodi a nou pataje avèk ou dènye pati atik la. "Tès enfrastrikti kòm Kòd ak Pulumi", tradiksyon an ki te prepare espesyalman pou elèv kou yo "Prattik ak zouti DevOps".

Tès enfrastrikti kòm Kòd ak Pulumi. Pati 2

Tès deplwaman

Estil tès sa a se yon apwòch pwisan epi li pèmèt nou fè tès bwat blan pou teste fonksyonman entèn kòd enfrastrikti nou an. Sepandan, li yon ti jan limite sa nou ka teste. Tès yo fèt dapre plan deplwaman nan memwa ki te kreye pa Pulumi anvan deplwaman aktyèl la e se poutèt sa deplwaman an tèt li pa ka teste. Pou ka sa yo, Pulumi gen yon fondasyon tès entegrasyon. Ak de apwòch sa yo travay byen ansanm!

Fondasyon tès entegrasyon Pulumi ekri nan Go, ki se jan nou teste pi fò nan kòd entèn nou an. Pandan ke apwòch tès inite yo te diskite anvan an te plis tankou tès bwat blan, tès entegrasyon se yon bwat nwa. (Genyen tou opsyon pou tès entèn solid.) Yo te kreye kad sa a pou pran yon pwogram Pulumi konplè epi fè plizyè operasyon sik lavi sou li, tankou deplwaye yon nouvo pil nan grafouyen, mete ajou li ak varyasyon, epi efase li, petèt plizyè fwa. . Nou kouri yo regilyèman (pa egzanp, nan mitan lannwit) ak kòm tès estrès.

(Nou nou ap travay sou li, pou kapasite tès entegrasyon menm jan an disponib nan SDK natif natal nan lang yo. Ou ka itilize kad tès entegrasyon Go kèlkeswa lang nan ki pwogram Pulumi w la ekri).

Lè w kouri pwogram nan lè l sèvi avèk fondasyon sa a, ou ka tcheke sa ki annapre yo:

  • Kòd pwojè ou a se sentaktik kòrèk epi li kouri san erè.
  • Pile ak paramèt konfigirasyon sekrè yo travay epi yo entèprete kòrèkteman.
  • Pwojè ou a ka deplwaye avèk siksè nan founisè nwaj ou chwazi a.
  • Pwojè ou a ka amelyore avèk siksè soti nan eta inisyal la nan N lòt eta.
  • Pwojè ou a ka avèk siksè detwi epi retire nan founisè nwaj ou a.

Kòm nou pral wè yon ti tan, kad sa a ka itilize tou pou fè validasyon ègzekutabl.

Tès entegrasyon senp

Pou wè sa a an aksyon, nou pral gade nan depo a pulumi/examples, kòm ekip nou an ak kominote Pulumi a sèvi ak li pou teste pwòp demann rale nou yo, komèt, ak konstriksyon chak swa.

Anba a se yon tès senplifye nan nou an egzanp ki bay bokit S3 ak kèk lòt objè:

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

Tès sa a ale nan sik lavi debaz la nan kreye, modifye, ak detwi yon pil pou yon katab aws-js-s3-folder. Li pral pran apeprè yon minit pou rapòte yon tès ki pase:

$ go test .
PASS
ok      ... 43.993s

Gen anpil opsyon pou personnaliser konpòtman tès sa yo. Gade lis konplè opsyon yo. nan estrikti a ProgramTestOptions. Pa egzanp, ou ka configured pwen final Jaeger pou trase (Tracing), endike ke ou espere tès la echwe si tès la negatif (ExpectFailure), aplike yon seri "modifikasyon" nan pwogram nan pou yon tranzisyon sekans eta yo (EditDirs) ak plis ankò. Ann wè kijan pou itilize yo pou teste deplwaman aplikasyon w lan.

Tcheke pwopriyete resous yo

Entegrasyon an diskite pi wo a asire ke pwogram nou an "travay"-li pa aksidan. Men, e si nou vle tcheke pwopriyete yo nan chemine a ki kapab lakòz? Pa egzanp, ke sèten kalite resous yo te (oswa pa gen) te pwovizyon epi yo ke yo gen sèten atribi.

Paramèt ExtraRuntimeValidation pou ProgramTestOptions pèmèt nou gade nan eta apre deplwaman Pulumi anrejistre pou nou ka fè lòt chèk. Sa a gen ladann yon snapshot konplè sou eta a nan pil ki kapab lakòz la, ki gen ladan konfigirasyon, valè pwodiksyon ekspòte, tout resous ak valè pwopriyete yo, ak tout depandans ant resous yo.

Pou wè yon egzanp debaz sa a, ann tcheke si pwogram nou an kreye youn S3 bokit:

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

Koulye a, lè nou kouri tès ale, li pa pral sèlman ale nan yon batri nan tès sik lavi, men tou, apre yo fin deplwaye pil la avèk siksè, li pral fè yon chèk adisyonèl sou eta a ki kapab lakòz.

Tès Runtime

Jiskaprezan, tout tès yo te piman sou konpòtman deplwaman ak modèl resous Pulumi. E si ou vle verifye si enfrastrikti pwovizyon ou a aktyèlman ap travay? Pou egzanp, ke machin nan vityèl ap kouri, bokit la S3 gen sa nou espere, ak sou sa.

Ou ka deja devine ki jan fè sa a: opsyon ExtraRuntimeValidation pou ProgramTestOptions - sa se yon gwo opòtinite pou sa. Nan pwen sa a, ou fè yon tès Go koutim ak aksè nan eta konplè resous pwogram ou an. Eta sa a gen ladann enfòmasyon tankou adrès IP machin vityèl, URL, ak tout bagay ki nesesè pou aktyèlman kominike avèk aplikasyon nwaj yo ak enfrastrikti.

Pou egzanp, pwogram tès nou an ekspòte pwopriyete a webEndpoint bokit rele websiteUrl, ki se URL la plen kote nou ka jwenn konfigirasyon an index document. Malgre ke nou te kapab fouye nan dosye eta a jwenn bucket epi li pwopriyete sa a dirèkteman, men nan anpil ka pil nou yo ekspòte pwopriyete itil tankou sa a ke nou jwenn pratik pou itilize pou tcheke:

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

Menm jan ak chèk egzekite anvan nou yo, chèk sa a pral egzekite imedyatman apre yo fin ogmante pil la, tout an repons a yon apèl senp. go test. Epi sa a se jis pwent iceberg la—chak karakteristik Go tès ou ka ekri nan kòd ki disponib.

Entegrasyon enfrastrikti kontinyèl

Li bon pou kapab fè tès sou yon laptop lè anpil chanjman enfrastrikti yo ap fè pou teste yo anvan ou soumèt yo pou revizyon kòd. Men, nou menm ak anpil nan kliyan nou yo teste enfrastrikti nan plizyè etap nan sik lavi devlopman:

  • Nan chak demann rale louvri pou tès anvan fusion.
  • An repons a chak komèt, pou double-tcheke ke fizyon an te fè kòrèkteman.
  • Tanzantan, tankou nan mitan lannwit oswa chak semèn pou plis tès.
  • Kòm yon pati nan tès pèfòmans oswa estrès, ki anjeneral kouri sou yon peryòd tan ki long epi kouri tès nan paralèl ak / oswa deplwaye menm pwogram nan plizyè fwa.

Pou chak nan sa yo, Pulumi sipòte entegrasyon ak sistèm pi renmen entegrasyon kontinyèl ou. Avèk entegrasyon kontinyèl, sa a ba ou menm pwoteksyon tès pou enfrastrikti w la ak lojisyèl aplikasyon w lan.

Pulumi gen sipò pou sistèm CI komen. Men kèk nan yo:

Pou plis enfòmasyon detaye, tanpri al gade nan dokiman an pou Kontini Kontini.

Anviwònman efemèr

Yon opòtinite trè pwisan ki louvri se kapasite nan deplwaye anviwònman efemèr sèlman pou rezon tès akseptasyon. Konsèp pwojè ak pil Pulumi fèt pou fasilman deplwaye ak kraze anviwònman konplètman izole ak endepandan, tout nan kèk kòmandman senp CLI oswa lè l sèvi avèk yon fondasyon tès entegrasyon.

Si ou itilize GitHub, Lè sa a, Pulumi ofri Aplikasyon GitHub, ki pral ede w konekte tès akseptasyon pou rale demann nan tiyo CI ou a. Jis enstale aplikasyon an nan depo GitHub la, epi Pulumi pral ajoute enfòmasyon sou aperçu enfrastrikti, mizajou ak rezilta tès yo nan demann CI ak pisin ou yo:

Tès enfrastrikti kòm Kòd ak Pulumi. Pati 2

Lè ou itilize Pulumi pou tès akseptasyon debaz ou yo, ou pral jwenn nouvo kapasite automatisation ki pral amelyore pwodiktivite ekip la epi ba ou konfyans nan kalite chanjman ou yo.

Total

Nan atik sa a, nou te wè ke lè nou itilize langaj pwogram jeneral, anpil teknik devlopman lojisyèl vin disponib pou nou ki te itil nan devlope aplikasyon nou yo. Yo enkli tès inite, tès entegrasyon, ak fason yo travay ansanm pou fè tès egzekisyon anpil. Tès yo fasil pou kouri sou demann oswa nan sistèm CI ou.

Pulumi - lojisyèl sous louvri, gratis pou itilize ak travay ak lang pwogramasyon ou pi renmen yo ak nwaj yo - eseye li jodi a!

Pati nan premye

Sous: www.habr.com

Add nouvo kòmantè