Test Infrastructure li Code nrog Pulumi. Ntu 2

Nyob zoo sawv daws. Hnub no peb qhia rau koj txog qhov kawg ntawm tsab xov xwm. "Testing Infrastructure li Code nrog Pulumi", kev txhais lus uas tau npaj tshwj xeeb rau cov tub ntxhais kawm ntawv "DevOps kev coj ua thiab cov cuab yeej".

Test Infrastructure li Code nrog Pulumi. Ntu 2

Kev sim xa tawm

Cov qauv ntawm kev sim no yog ib txoj hauv kev muaj zog thiab tso cai rau peb ua lub thawv dawb los ntsuas kev ua haujlwm sab hauv ntawm peb cov txheej txheem kev cai. Txawm li cas los xij, nws txwv qee yam uas peb tuaj yeem sim. Cov kev ntsuam xyuas tau ua raws li kev npaj xa tawm hauv lub cim xeeb tsim los ntawm Pulumi ua ntej kev xa tawm tiag tiag thiab yog li kev xa tawm nws tus kheej tsis tuaj yeem sim. Rau cov xwm txheej zoo li no, Pulumi muaj kev sib koom ua ke kev sim ua haujlwm. Thiab ob txoj hauv kev no ua haujlwm zoo ua ke!

Pulumi integration testing moj khaum yog sau rau hauv Go, uas yog qhov peb sim feem ntau ntawm peb cov cai sab hauv. Txawm hais tias qhov kev sib tham yav dhau los hauv chav ntsuas kev ntsuas tau zoo dua li kev sim lub thawv dawb, kev sib xyaw ua ke yog lub thawv dub. (Tseem kuj muaj kev xaiv rau kev sim nruj me ntsis.) Lub moj khaum no tau tsim los ua kom tiav Pulumi qhov kev pab cuam thiab ua ntau yam kev ua haujlwm ntawm lub neej ntawm nws, xws li xa cov pawg tshiab los ntawm kos, hloov kho nws nrog kev hloov pauv, thiab tshem tawm, tej zaum ntau zaus. . Peb khiav lawv tsis tu ncua (piv txwv li, thaum hmo ntuj) thiab raws li kev ntsuas kev ntxhov siab.

(Peb peb tab tom ua haujlwm rau nws, kom muaj peev xwm sib xyaw ua ke zoo sib xws muaj nyob hauv SDK haiv neeg ntawm hom lus. Koj tuaj yeem siv Go integration testing moj khaum tsis hais hom lus twg uas koj qhov kev pab cuam Pulumi sau).

Los ntawm kev khiav lub program siv lub moj khaum no koj tuaj yeem tshawb xyuas cov hauv qab no:

  • Koj qhov project code yog syntactically raug thiab khiav tsis raug.
  • Cov pawg thiab cov kev teeb tsa zais cia ua haujlwm thiab raug txhais kom raug.
  • Koj qhov project tuaj yeem ua tiav xa mus rau hauv huab muab kev pabcuam koj xaiv.
  • Koj qhov project tuaj yeem hloov kho kom tiav los ntawm lub xeev pib mus rau N lwm lub xeev.
  • Koj qhov project tuaj yeem ua tiav tiav thiab tshem tawm ntawm koj tus neeg muab kev pabcuam huab.

Raws li peb yuav pom sai sai no, lub moj khaum no tseem tuaj yeem siv los ua kev siv sijhawm ua haujlwm.

Kev sim ua ke yooj yim

Txhawm rau pom qhov no hauv kev nqis tes ua, peb yuav saib ntawm qhov chaw cia khoom pulumi/examples, raws li peb pab neeg thiab cov zej zog Pulumi siv nws los sim peb tus kheej rub cov lus thov, cog lus, thiab ua haujlwm hmo ntuj.

Hauv qab no yog ib qho kev sim yooj yim ntawm peb piv txwv uas muab S3 thoob thiab qee yam khoom siv:

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

Qhov kev sim no dhau los ntawm lub neej ntawm kev tsim, hloov kho, thiab rhuav tshem ib pawg rau ib daim ntawv tais ceev tseg aws-js-s3-folder. Nws yuav siv li ib feeb los tshaj tawm qhov kev xeem dhau los:

$ go test .
PASS
ok      ... 43.993s

Muaj ntau txoj kev xaiv los kho tus cwj pwm ntawm cov kev xeem no. Saib tag nrho cov kev xaiv. nyob rau hauv cov qauv ProgramTestOptions. Piv txwv li, koj tuaj yeem teeb tsa Jaeger qhov kawg kom taug qab (Tracing), qhia tias koj cia siab tias qhov kev xeem yuav ua tsis tau yog tias kev xeem tsis zoo (ExpectFailure), siv cov "kho hloov kho" rau qhov kev pab cuam rau kev hloov pauv ntawm cov xeev (EditDirs) thiab ntau ntxiv. Cia peb saib yuav ua li cas siv lawv los ntsuas koj daim ntawv thov xa tawm.

Tshawb xyuas cov khoom vaj khoom tsev

Kev sib koom ua ke tau hais los saum toj no ua kom ntseeg tau tias peb txoj haujlwm "ua haujlwm" - nws tsis poob. Tab sis yuav ua li cas yog tias peb xav tshawb xyuas cov khoom ntawm cov txiaj ntsig pawg? Piv txwv li, qee yam ntawm cov peev txheej muaj (lossis tsis tau) tau muab thiab lawv muaj qee yam cwj pwm.

Parameter ExtraRuntimeValidation rau ProgramTestOptions tso cai rau peb saib tom qab kev xa tawm lub xeev sau tseg los ntawm Pulumi yog li peb tuaj yeem ua cov tshev ntxiv. Qhov no suav nrog kev ua tiav snapshot ntawm lub xeev ntawm pawg tshwm sim, suav nrog kev teeb tsa, cov txiaj ntsig xa tawm, tag nrho cov peev txheej thiab lawv cov khoom muaj nqis, thiab txhua qhov kev vam khom ntawm cov peev txheej.

Txhawm rau pom qhov piv txwv yooj yim ntawm qhov no, cia peb tshawb xyuas tias peb qhov program tsim ib qho S3 khob:

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

Tam sim no, thaum peb khiav mus xeem, nws yuav tsis tsuas mus dhau lub roj teeb ntawm lifecycle xeem, tab sis kuj, tom qab ua tiav deploying pawg, nws yuav ua ib qho kev kuaj ntxiv ntawm lub xeev tshwm sim.

Runtime xeem

Txog tam sim no, txhua qhov kev ntsuam xyuas tau ua tiav ntawm kev xa tawm tus cwj pwm thiab Pulumi cov qauv peev txheej. Yuav ua li cas yog tias koj xav paub tseeb tias koj qhov kev npaj tsim kho vaj tse ua haujlwm tau zoo? Piv txwv li, tias lub tshuab virtual khiav, S3 thoob muaj qhov peb xav tau, thiab lwm yam.

Tej zaum koj twb tau twv yuav ua li cas ua qhov no: kev xaiv ExtraRuntimeValidation rau ProgramTestOptions - Qhov no yog lub sijhawm zoo rau qhov no. Lub sijhawm no, koj khiav qhov kev xeem Go kev cai nrog kev nkag mus rau tag nrho lub xeev ntawm koj qhov kev pabcuam cov peev txheej. Lub xeev no suav nrog cov ntaub ntawv xws li virtual tshuab IP chaw nyob, URLs, thiab txhua yam uas xav tau los cuam tshuam nrog cov txiaj ntsig huab kev siv thiab kev tsim kho vaj tse.

Piv txwv li, peb qhov kev xeem ntawv xa tawm cov cuab yeej webEndpoint thoob npe websiteUrl, uas yog tag nrho URL qhov twg peb tuaj yeem tau txais kev teeb tsa index document. Txawm hais tias peb tuaj yeem khawb rau hauv lub xeev cov ntaub ntawv mus nrhiav bucket thiab nyeem cov cuab yeej ntawd ncaj qha, tab sis nyob rau hauv ntau zaus peb pawg xa tawm cov khoom muaj txiaj ntsig zoo li qhov no uas peb pom yooj yim siv rau kev kuaj xyuas:

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

Zoo li peb cov kev kuaj xyuas lub sijhawm dhau los, daim tshev no yuav raug tua tam sim tom qab tsa pawg, tag nrho cov lus teb rau kev hu yooj yim go test. Thiab qhov ntawd tsuas yog qhov kawg ntawm cov dej khov nab kuab-txhua qhov Go test feature uas koj tuaj yeem sau rau hauv code yog muaj.

Nruam Infrastructure Integration

Nws yog qhov zoo kom muaj peev xwm khiav cov kev xeem ntawm lub laptop thaum muaj ntau qhov kev hloov kho vaj tse tau ua los ntsuas lawv ua ntej xa lawv rau kev tshuaj xyuas cov lej. Tab sis peb thiab ntau ntawm peb cov neeg siv khoom sim cov txheej txheem ntawm ntau theem ntawm txoj kev loj hlob lub neej:

  • Hauv txhua qhov qhib rub thov rau kev sim ua ntej sib koom ua ke.
  • Nyob rau hauv teb rau txhua qhov kev cog lus, ob zaug-kos xyuas tias kev sib koom ua ke tau ua tiav lawm.
  • Ib ntus, xws li hmo ntuj lossis txhua lub lim tiam rau kev sim ntxiv.
  • Raws li ib feem ntawm kev ua tau zoo lossis kev ntsuas kev ntxhov siab, uas feem ntau ua haujlwm ntev ntev thiab ua cov kev sim sib luag thiab / lossis siv tib qhov kev pab cuam ntau zaus.

Rau txhua qhov no, Pulumi txhawb kev koom ua ke nrog koj nyiam kev sib koom ua ke txuas ntxiv. Nrog rau kev sib koom ua ke tas mus li, qhov no muab rau koj tib qhov kev ntsuam xyuas rau koj cov kev tsim kho vaj tse xws li rau koj daim ntawv thov software.

Pulumi muaj kev txhawb nqa rau CI systems. Nov yog qee qhov ntawm lawv:

Yog xav paub ntxiv, thov mus saib cov ntaub ntawv rau Kev Xa Xa Mus Ntxiv.

Ib puag ncig Ephemeral

Lub cib fim muaj zog heev uas qhib tau yog lub peev xwm los siv cov cheeb tsam ephemeral nkaus xwb rau lub hom phiaj kev lees paub. Tswv yim tej yaam num thiab pawg Pulumi yog tsim los kom yooj yim xa thiab rhuav tshem tag nrho cov kev sib cais thiab kev ywj pheej ib puag ncig, tag nrho hauv ob peb CLI cov lus txib yooj yim lossis siv lub hauv paus kev sib koom ua ke.

Yog tias koj siv GitHub, ces Pulumi muaj GitHub App, uas yuav pab koj txuas qhov kev lees paub los rub cov lus thov hauv koj lub raj xa dej CI. Tsuas yog nruab daim ntawv thov hauv GitHub repository, thiab Pulumi yuav ntxiv cov ntaub ntawv hais txog kev saib ua ntej, hloov tshiab thiab ntsuas cov txiaj ntsig rau koj qhov CI thiab pas dej ua ke thov:

Test Infrastructure li Code nrog Pulumi. Ntu 2

Thaum koj siv Pulumi rau koj qhov kev lees paub tseem ceeb, koj yuav tau txais lub peev xwm tshiab automation uas yuav txhim kho pab pawg tsim khoom thiab muab kev ntseeg siab rau koj qhov kev hloov pauv zoo.

Qhov no

Hauv tsab xov xwm no, peb tau pom tias los ntawm kev siv cov hom phiaj programming lus, ntau cov txheej txheem txhim kho software ua rau peb muaj txiaj ntsig los tsim peb cov ntawv thov. Lawv suav nrog kev sim hauv chav tsev, kev sim kev sib koom ua ke, thiab lawv ua haujlwm li cas los ua qhov kev sim ua haujlwm ntev. Kev ntsuam xyuas yog ib qho yooj yim los khiav ntawm kev thov lossis hauv koj qhov CI system.

Pulumi - qhib qhov software, siv dawb thiab ua haujlwm nrog koj nyiam programming lus thiab huab - sim hnub no!

β†’ Thawj tshooj

Tau qhov twg los: www.hab.com

Ntxiv ib saib