Testkirina Binesaziyê wekî Kodê bi Pulumi re. Beş 2

Silav hemû. Îro em beşa dawî ya gotarê bi we re parve dikin. "Testkirina Binesaziyê wekî Kodê bi Pulumi re", wergera wê bi taybetî ji bo xwendekarên kursê hatiye amadekirin "Pêkanîn û amûrên DevOps".

Testkirina Binesaziyê wekî Kodê bi Pulumi re. Beş 2

Testkirina sazkirinê

Ev şêwaza ceribandinê nêzîkatiyek hêzdar e û rê dide me ku em ceribandina qutiya spî pêk bînin da ku karên hundurîn ên koda binesaziya me biceribînin. Lêbelê, ew tiştê ku em dikarin ceribandin hinekî sînordar dike. Ceribandin li ser bingeha plana bicîhkirina bîranînê ya ku ji hêla Pulumi ve berî bicîhkirina rastîn hatî çêkirin têne kirin û ji ber vê yekê veqetandin bixwe nikare were ceribandin. Ji bo rewşên weha, Pulumi çarçoveyek testa entegrasyonê heye. Û ev herdu nêzîkatî bi hev re pir baş dixebitin!

Çarçoveya ceribandina entegrasyona Pulumi di Go de hatî nivîsandin, bi vî rengî em piraniya koda xweya hundurîn ceribandine. Dema ku nêzîkatiya ceribandina yekîneya ku berê hatî nîqaş kirin bêtir mîna ceribandina qutiya spî bû, ceribandina entegrasyonê qutiyek reş e. (Di heman demê de vebijarkên ceribandina navxweyî ya hişk jî hene.) Ev çarçove ji bo ku bernameyeke Pulumi-yê bêkêmasî bigire û li ser wê operasyonên cihêreng ên çerxa jiyanê pêk bîne, wek mînak danîna stûnek nû ji nû ve, nûvekirina wê bi guhertoyan, û jêbirina wê, belkî gelek caran hate afirandin. . Em wan bi rêkûpêk (mînak, bi şev) û wekî ceribandinên stresê dimeşînin.

(Em em li ser dixebitin, da ku şiyanên ceribandina entegrasyonê yên wekhev di SDK-ya xwemalî ya zimanan de peyda bibin. Hûn dikarin çarçoveya ceribandina entegrasyonê ya Go-yê bikar bînin bêyî ku hûn bi zimanê ku bernameya weya Pulumi tê nivîsandin).

Bi xebitandina bernameyê bi karanîna vê çarçoveyê hûn dikarin jêrîn kontrol bikin:

  • Koda projeya we ji hêla hevoksaziyê ve rast e û bêyî xeletî dimeşe.
  • Mîhengên veavakirina stack û veşartî dixebitin û rast têne şîrove kirin.
  • Projeya we dikare bi serfirazî di pêşkêşkara ewr a bijartina we de were bicîh kirin.
  • Projeya we dikare bi serfirazî ji rewşa destpêkê heya N dewletên din were nûve kirin.
  • Projeya we dikare bi serfirazî were hilweşandin û ji pêşkêşvanê weya cloudê were rakirin.

Wekî ku em ê di demek kurt de bibînin, ev çarçove jî dikare were bikar anîn da ku pejirandina dema xebitandinê pêk bîne.

Testa entegrasyonê ya hêsan

Ji bo ku em vê di çalakiyê de bibînin, em ê li depoyê binêrin pulumi/examples, ji ber ku tîmê me û civata Pulumi wê bikar tîne da ku daxwazên xweyên kişandinê, peywirdarkirin û avakirina şevên xwe biceribîne.

Li jêr ceribandinek hêsankirî ya me ye mînakek ku kelek S3 û hin tiştên din peyda dike:

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

Ev ceribandin di nav çerxa jiyanê ya bingehîn a çêkirin, guherandin û hilweşandina stûnek ji bo peldankekê re derbas dibe aws-js-s3-folder. Ji bo raporkirina ceribandinek derbasbûyî dê bi qasî deqîqeyek bigire:

$ go test .
PASS
ok      ... 43.993s

Gelek vebijark hene ku meriv tevgera van ceribandinan xweş bike. Lîsteya tevahî ya vebijarkan bibînin. di avahiya ProgramTestOptions. Mînakî, hûn dikarin xala dawiya Jaeger mîheng bikin ku bişopînin (Tracing), destnîşan bikin ku hûn li bendê ne ku ceribandin heke neyînî be (ExpectFailure), rêzek "guherandinên" li bernameyê ji bo veguheztina rêzimanî ya dewletan bicîh bikin (EditDirs) û hê bêtir. Ka em bibînin ka meriv wan çawa bikar tîne da ku bicîhkirina serîlêdana xwe ceribandin.

Kontrolkirina taybetmendiyên çavkaniyê

Yekbûna ku li jor hatî nîqaş kirin piştrast dike ku bernameya me "xebat dike" - ew têk naçe. Lê eger em bixwazin ku taybetmendiyên stûna encam kontrol bikin? Mînakî, ku hin celeb çavkaniyan hatine peyda kirin (an nehatine) û hin taybetmendiyên wan hene.

Parîsê ExtraRuntimeValidation bo ProgramTestOptions destûrê dide me ku em li rewşa piştî bicîhkirinê ya ku ji hêla Pulumi ve hatî tomar kirin binihêrin da ku em karibin kontrolên din bikin. Di vê yekê de wêneyek bêkêmasî ya rewşa stûna encam, di nav de veavakirin, nirxên derketinê yên hinardekirî, hemî çavkanî û nirxên milkê wan, û hemî girêdanên di navbera çavkaniyan de vedihewîne.

Ji bo dîtina mînakek bingehîn a vê yekê, werin em kontrol bikin ka bernameya me yek diafirîne S3 Bucket:

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

Naha, gava ku em ceribandina go-ê dimeşînin, ew ê ne tenê di ceribandinên çerxa jiyanê de bataryayek derbas bike, lê di heman demê de, piştî ku stikê bi serfirazî bicîh kir, ew ê li ser rewşa encam de kontrolek din jî bike.

testên Runtime

Heya nuha, hemî ceribandin bi tenê li ser behreya bicîhkirinê û modela çavkaniya Pulumi ne. Ger hûn dixwazin verast bikin ku binesaziya weya peydakirî bi rastî dixebite? Mînakî, ku makîneya virtual dimeşe, kelek S3 ya ku em li bendê ne dihewîne, û hwd.

Dibe ku we berê texmîn kiribe meriv çawa vê yekê dike: vebijark ExtraRuntimeValidation bo ProgramTestOptions - Ji bo vê derfetek mezin e. Di vê nuqteyê de, hûn bi gihîştina rewşa tevahî ya çavkaniyên bernameya xwe ceribandinek Go-ya xwerû dimeşînin. Ev dewlet agahdariya wekî navnîşanên IP-ya makîneya virtual, URL-an, û her tiştê ku hewce dike ku bi rastî bi serîlêdanên ewr û binesaziya encam re têkilî daynin vedihewîne.

Mînakî, bernameya ceribandina me milkê hinarde dike webEndpoint kepçe tê gotin websiteUrl, ku URL-ya tevahî ye ku em dikarin mîhengan bistînin index document. Tevî ku em dikarin di dosyaya dewletê de bikolin ku bibînin bucket û wê taybetmendiyê rasterast bixwînin, lê di pir rewşan de stûnên me taybetmendiyên bikêr ên bi vî rengî ku em ji bo kontrolê bikar tînin rehet dibînin:

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

Mîna kontrolên dema xebitandinê yên berê, ev kontrol dê tavilê piştî bilindkirina stikê, hemî wekî bersivek bangek hêsan were darve kirin. go test. Û ew tenê serê berfê ye - her taybetmendiya testa Go ya ku hûn dikarin bi kodê binivîsin hene.

Yekbûna Binesaziya Berdewam

Baş e ku meriv bikaribe ceribandinan li ser laptopê bimeşîne dema ku gelek guhertinên binesaziyê têne çêkirin da ku wan ceribandin berî ku wan ji bo vekolîna kodê bişînin. Lê em û gelek xerîdarên me binesaziyê di qonaxên cihêreng ên çerxa jiyana pêşkeftinê de ceribandin:

  • Di her daxwaza vekişîna vekirî de ji bo ceribandinê berî hevgirtinê.
  • Di bersiva her commit de, du-kontrol bikin ku yekbûn rast hatîye kirin.
  • Bi periyodîk, wek bi şev an heftane ji bo ceribandinên zêde.
  • Wekî beşek ji performansê an ceribandina stresê, ku bi gelemperî di demek dirêj de dimeşe û testan paralel dimeşîne û/an heman bernameyê gelek caran bi cih dike.

Ji bo her yek ji van, Pulumi entegrasyonê bi pergala entegrasyona domdar a weya bijare re piştgirî dike. Bi entegrasyona domdar re, ev ji bo binesaziya we ya ku ji bo nermalava serîlêdana we heman vegirtina ceribandinê dide we.

Pulumi ji bo pergalên CI yên hevpar piştgirî heye. Li vir hinek ji wan hene:

Ji bo agahdariya berfirehtir, ji kerema xwe ji bo belgeyê binihêrin Radestkirina Berdewam.

Hawirdorên Efemeral

Derfetek pir hêzdar a ku vedibe şiyana belavkirina hawîrdorên domdar tenê ji bo mebestên ceribandina pejirandinê ye. Reşik proje û stûn Pulumi hatiye sêwirandin ku bi hêsanî hawîrdorên bi tevahî veqetandî û serbixwe, hemî di çend fermanên CLI-ya hêsan de an jî çarçoveyek ceribandina entegrasyonê bikar tîne, bi hêsanî bicîh bike û hilweşîne.

Ger hûn GitHub bikar bînin, wê hingê Pulumi pêşkêşî dike GitHub App, ya ku dê ji we re bibe alîkar ku hûn ceribandina pejirandinê ve girêdin da ku daxwazên di hundurê xeta CI-ya xwe de bikişînin. Tenê serîlêdanê di depoya GitHub de saz bikin, û Pulumi dê agahdariya li ser pêşdîtinên binesaziyê, nûvekirin û encamên ceribandinê li daxwazên weya CI û hewzê zêde bike:

Testkirina Binesaziyê wekî Kodê bi Pulumi re. Beş 2

Gava ku hûn Pulumi ji bo ceribandinên pejirandina xweya bingehîn bikar tînin, hûn ê kapasîteyên nû yên xweseriyê bistînin ku dê hilberîna tîmê baştir bike û bi kalîteya guheztinên we pêbaweriyê bide we.

Encam

Di vê gotarê de, me dît ku bi karanîna zimanên bernamesaziyê yên gelemperî, gelek teknîkên pêşkeftina nermalavê ji me re peyda dibin ku di pêşvebirina sepanên me de bikêr bûne. Ew ceribandina yekîneyê, ceribandina entegrasyonê, û ka ew çawa bi hev re dixebitin ku ceribandina demajoya berfireh pêk bînin, vedihewînin. Test li ser daxwazê ​​an di pergala weya CI de hêsan e.

Pulumi - nermalava çavkaniya vekirî, karanîna belaş û bi zimanên bernamenûs û ewrên xweyên bijare re dixebite - îro biceribîne!

Beşek yekem

Source: www.habr.com

Add a comment