Փորձարկման ենթակառուցվածքը որպես ծածկագիր Pulumi-ի հետ: Մաս 2

Բարև բոլորին: Այսօր մենք ձեզ հետ կիսում ենք հոդվածի վերջին մասը։ «Փուլումիով ենթակառուցվածքի փորձարկում որպես ծածկագիր», որի թարգմանությունը պատրաստվել է հատուկ կուրսի ուսանողների համար «DevOps պրակտիկա և գործիքներ».

Փորձարկման ենթակառուցվածքը որպես ծածկագիր Pulumi-ի հետ: Մաս 2

Փորձարկման տեղակայում

Փորձարկման ոճը, որը մենք քննարկել ենք, հզոր մոտեցում է և թույլ է տալիս մեզ կատարել սպիտակ տուփի թեստավորում՝ ստուգելու մեր ենթակառուցվածքի կոդի ներքին աշխատանքը: Այնուամենայնիվ, դա որոշակիորեն սահմանափակում է այն, ինչ մենք կարող ենք փորձարկել: Թեստերն իրականացվում են հիշողության մեջ տեղակայման պլանի հիման վրա, որը ստեղծվել է Pulumi-ի կողմից նախքան իրական տեղակայումը, և, հետևաբար, տեղակայումն ինքնին չի կարող փորձարկվել: Նման դեպքերի համար Pulumi-ն ունի ինտեգրման թեստի շրջանակ: Եվ այս երկու մոտեցումները հիանալի աշխատում են միասին:

Pulumi-ի ինտեգրման թեստավորման շրջանակը գրված է Go-ում, և դա այն է, ինչ մենք օգտագործում ենք մեր ներքին կոդի մեծ մասը փորձարկելու համար: Թեև ավելի վաղ քննարկված միավորի փորձարկման մոտեցումն ավելի շատ նման էր սպիտակ տուփի փորձարկմանը, ինտեգրման թեստը սև արկղ է: (Կան նաև մանրակրկիտ ներքին փորձարկման տարբերակներ:) Այս շրջանակը ստեղծվել է Pulumi-ի ամբողջական ծրագիր վերցնելու և դրա վրա կյանքի ցիկլի տարբեր գործողություններ կատարելու համար, ինչպես օրինակ՝ զրոյից նոր կույտի տեղակայումը, այն փոփոխություններով թարմացնելը և, հնարավոր է, մի քանի անգամ ջնջելը: Մենք դրանք կանոնավոր կերպով վարում ենք (օրինակ՝ գիշերը) և որպես սթրես-թեստ:

(Մենք մենք աշխատում ենք դրա վրա, որպեսզի ինտեգրման փորձարկման նմանատիպ հնարավորությունները հասանելի լինեն լեզուների մայրենի SDK-ում: Դուք կարող եք օգտագործել Go ինտեգրման թեստավորման շրջանակը՝ անկախ նրանից, թե որ լեզվով է գրված ձեր Pulumi ծրագիրը):

Ծրագիրը գործարկելով այս շրջանակի միջոցով՝ կարող եք ստուգել հետևյալը.

  • Ձեր նախագծի կոդը շարահյուսորեն ճիշտ է և աշխատում է առանց սխալների:
  • Դույների և գաղտնիքների կազմաձևման կարգավորումներն աշխատում են և ճիշտ են մեկնաբանվում:
  • Ձեր նախագիծը կարող է հաջողությամբ տեղակայվել ձեր ընտրած ամպային մատակարարում:
  • Ձեր նախագիծը կարող է հաջողությամբ թարմացվել սկզբնական վիճակից մինչև N այլ վիճակ:
  • Ձեր նախագիծը կարող է հաջողությամբ ոչնչացվել և հեռացվել ձեր ամպային մատակարարից:

Ինչպես շուտով կտեսնենք, այս շրջանակը կարող է օգտագործվել նաև գործարկման ժամանակի վավերացում կատարելու համար:

Պարզ ինտեգրման թեստ

Սա գործնականում տեսնելու համար մենք կնայենք պահեստին pulumi/examples, քանի որ մեր թիմը և Պուլումի համայնքը օգտագործում են այն փորձարկելու իրենց սեփական ձգողականության հարցումները, պարտավորությունները և գիշերային կառուցումները:

Ստորև ներկայացված է մեր պարզեցված թեստը օրինակ, որը ապահովում է S3 դույլի և որոշ այլ օբյեկտների ապահովում:

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

Այս թեստն անցնում է թղթապանակի համար բուրգ ստեղծելու, փոփոխելու և ոչնչացնելու հիմնական կյանքի ցիկլը: aws-js-s3-folder. Մոտ մեկ րոպե կպահանջվի հայտնել, որ թեստն անցել է.

$ go test .
PASS
ok      ... 43.993s

Այս թեստերի վարքագիծը հարմարեցնելու բազմաթիվ տարբերակներ կան: Ընտրանքների ամբողջական ցանկի համար տե՛ս կառուցվածքում ProgramTestOptions. Օրինակ, դուք կարող եք կարգավորել Jaeger վերջնակետը հետագծման համար (Tracing), նշեք, որ դուք ակնկալում եք, որ թեստը ընկնում է, եթե թեստը բացասական է (ExpectFailure), ծրագրին կիրառեք մի շարք «խմբագրումներ»՝ հաջորդաբար անցումային վիճակների համար (EditDirs) և շատ ավելին: Տեսնենք, թե ինչպես դրանք օգտագործել հավելվածների տեղակայումը փորձարկելու համար:

Ռեսուրսների հատկությունների ստուգում

Ինտեգրումը, որի մասին մենք խոսեցինք վերևում, երաշխավորում է, որ մեր ծրագիրը «աշխատում է»՝ այն չի խափանում: Բայց ի՞նչ անել, եթե մենք ուզում ենք ստուգել ստացված կույտի հատկությունները: Օրինակ, որ որոշակի տեսակի ռեսուրսներ պատրաստվել են (կամ չեն) պատրաստվել, և որ դրանք ունեն որոշակի հատկանիշներ:

Parameter ExtraRuntimeValidation համար ProgramTestOptions թույլ է տալիս մեզ նայել Պուլումիի կողմից գրավված հետտեղակայման վիճակին, որպեսզի կարողանանք լրացուցիչ ստուգումներ կատարել: Սա ներառում է ստացված կույտի վիճակի ամբողջական պատկերը, ներառյալ կազմաձևումը, արտահանվող ելքային արժեքները, բոլոր ռեսուրսները և դրանց գույքի արժեքները և ռեսուրսների միջև բոլոր կախվածությունները:

Դրա հիմնական օրինակը տեսնելու համար եկեք ստուգենք, որ մեր ծրագիրը ստեղծում է այն S3 դույլ:

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

Այժմ, երբ մենք գործարկում ենք go test-ը, այն ոչ միայն կանցնի կյանքի ցիկլի թեստերի մարտկոցի միջով, այլ նաև, երբ կույտը հաջողությամբ տեղադրվի, լրացուցիչ ստուգում կկատարի ստացված վիճակի վրա:

Runtime թեստեր

Մինչ այժմ բոլոր թեստերը բացառապես վերաբերում էին տեղակայման վարքագծին և Պուլումի ռեսուրսի մոդելին: Իսկ եթե ցանկանում եք ստուգել, ​​որ ձեր տրամադրված ենթակառուցվածքն իրականում աշխատում է: Օրինակ, որ վիրտուալ մեքենան աշխատում է, S3 դույլը պարունակում է այն, ինչ մենք ակնկալում ենք և այլն:

Դուք կարող եք արդեն կռահել, թե ինչպես դա անել. տարբերակ ExtraRuntimeValidation համար ProgramTestOptions - Սա մեծ հնարավորություն է դրա համար: Այս պահին դուք կատարում եք կամայական Go թեստ՝ ձեր ծրագրի ռեսուրսների ամբողջական վիճակի հասանելիությամբ: Այս վիճակը ներառում է այնպիսի տեղեկություններ, ինչպիսիք են վիրտուալ մեքենայի IP հասցեները, URL-ները և այն ամենը, ինչ անհրաժեշտ է արդյունքում ստացված ամպային հավելվածների և ենթակառուցվածքների հետ իրականում փոխազդելու համար:

Օրինակ, մեր թեստային ծրագիրը արտահանում է գույքը webEndpoint դույլը զանգեց websiteUrl, որը ամբողջական URL-ն է, որտեղ մենք կարող ենք ստանալ կազմաձևվածը index document. Չնայած մենք կարող էինք փորփրել պետական ​​ֆայլը՝ գտնելու համար bucket և ուղղակիորեն կարդացեք այդ հատկությունը, բայց շատ դեպքերում մեր կույտերն արտահանում են նման օգտակար հատկություններ, որոնք մենք գտնում ենք, որ հարմար է ստուգել.

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

Ինչպես մեր նախորդ գործարկման ժամանակի ստուգումները, այս ստուգումը կկատարվի փաթեթի ավարտից անմիջապես հետո, այս ամենը ի պատասխան պարզ զանգի: go test. Եվ սա միայն այսբերգի գագաթն է. Go-ի փորձարկման բոլոր հնարավորությունները հասանելի են ձեզ, և դուք կարող եք դրանք գրել կոդով:

Ենթակառուցվածքների շարունակական ինտեգրում

Հաճելի է, երբ կարող եք փորձարկումներ կատարել նոութբուքի վրա՝ ենթակառուցվածքի բազմաթիվ փոփոխություններ կատարելիս՝ դրանք փորձարկելու համար՝ նախքան կոդի վերանայման ուղարկելը: Բայց մենք և մեր շատ հաճախորդներ փորձարկում ենք ենթակառուցվածքը զարգացման կյանքի ցիկլի տարբեր փուլերում.

  • Միաձուլումից առաջ փորձարկման յուրաքանչյուր բաց ձգման հարցում:
  • Ի պատասխան յուրաքանչյուր պարտավորության՝ կրկնակի ստուգելու համար, որ միաձուլումը ճիշտ է կատարվել:
  • Պարբերաբար, օրինակ՝ գիշերը կամ շաբաթական՝ լրացուցիչ թեստավորման համար:
  • Որպես կատարողականության թեստավորման կամ սթրես-թեստավորման մի մաս, որը սովորաբար աշխատում է երկար ժամանակ և զուգահեռաբար թեստեր է անցկացնում և/կամ մի քանի անգամ գործարկում է նույն ծրագիրը:

Նրանցից յուրաքանչյուրի համար Pulumi-ն աջակցում է ինտեգրմանը ձեր սիրած շարունակական ինտեգրման համակարգի հետ: Շարունակական ինտեգրման դեպքում սա ձեզ տալիս է նույն փորձնական ծածկույթը ձեր ենթակառուցվածքի համար, ինչ դուք անում եք ձեր կիրառական ծրագրաշարի համար:

Pulumi-ն ունի ընդհանուր CI համակարգերի աջակցություն: Ահա դրանցից մի քանիսը.

Լրացուցիչ տեղեկությունների համար խնդրում ենք դիմել փաստաթղթերին: Շարունակական Առաքում.

Ժամանակավոր միջավայրեր

Շատ հզոր հնարավորությունը, որը սա բացում է, ժամանակավոր միջավայրերը պտտելու ունակությունն է զուտ ընդունման փորձարկման նպատակով: Հայեցակարգ նախագծեր և կույտեր Pulumi-ն նախագծված է, որպեսզի հեշտացնի տեղակայելն ու քանդել ամբողջովին մեկուսացված և անկախ միջավայրերը՝ բոլորը մի քանի պարզ CLI հրամաններով կամ օգտագործելով ինտեգրման թեստավորման շրջանակ:

Եթե ​​դուք օգտագործում եք GitHub, Pulumi-ն առաջարկում է GitHub հավելված, որը կօգնի ձեզ միացնել ընդունման թեստավորումը՝ ձեր CI խողովակաշարում հարցումները ներգրավելու համար: Պարզապես տեղադրեք հավելվածը GitHub-ի պահոցում, և Pulumi-ն կավելացնի ենթակառուցվածքի նախադիտումների, թարմացումների և փորձարկման արդյունքների մասին ձեր CI և pull հարցումները.

Փորձարկման ենթակառուցվածքը որպես ծածկագիր Pulumi-ի հետ: Մաս 2

Օգտագործելով Pulumi-ն ձեր հիմնական ընդունման թեստերի համար, դուք ձեռք կբերեք ավտոմատացման նոր հնարավորություններ, որոնք կբարելավեն ձեր թիմի արտադրողականությունը և վստահություն կհաղորդեն ձեր փոփոխությունների որակին:

Լրիվ

Այս հոդվածում մենք տեսանք, որ օգտագործելով ընդհանուր նշանակության ծրագրավորման լեզուներ, մենք մուտք ունենք ծրագրային ապահովման մշակման բազմաթիվ մեթոդներ, որոնք օգտակար էին մեր հավելվածները մշակելու համար: Դրանք ներառում են միավորի թեստավորում, ինտեգրման թեստավորում և դրանց փոխազդեցությունը լայնածավալ գործարկման ժամանակի թեստավորում իրականացնելու համար: Թեստերը հեշտ է գործարկել ըստ պահանջի կամ ձեր CI համակարգում:

Պուլումի — բաց կոդով ծրագրակազմ, այն անվճար է օգտագործման համար և աշխատում է ձեր սիրած ծրագրավորման լեզուների և ամպերի հետ — փորձիր այսօր!

Առաջին մասը

Source: www.habr.com

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster