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

Փորձարկման տեղակայում
Փորձարկման ոճը, որը մենք քննարկել ենք, հզոր մոտեցում է և թույլ է տալիս մեզ կատարել սպիտակ տուփի թեստավորում՝ ստուգելու մեր ենթակառուցվածքի կոդի ներքին աշխատանքը: Այնուամենայնիվ, դա որոշակիորեն սահմանափակում է այն, ինչ մենք կարող ենք փորձարկել: Թեստերն իրականացվում են հիշողության մեջ տեղակայման պլանի հիման վրա, որը ստեղծվել է Pulumi-ի կողմից նախքան իրական տեղակայումը, և, հետևաբար, տեղակայումն ինքնին չի կարող փորձարկվել: Նման դեպքերի համար Pulumi-ն ունի ինտեգրման թեստի շրջանակ: Եվ այս երկու մոտեցումները հիանալի աշխատում են միասին:
Pulumi-ի ինտեգրման թեստավորման շրջանակը գրված է Go-ում, և դա այն է, ինչ մենք օգտագործում ենք մեր ներքին կոդի մեծ մասը փորձարկելու համար: Թեև ավելի վաղ քննարկված միավորի փորձարկման մոտեցումն ավելի շատ նման էր սպիտակ տուփի փորձարկմանը, ինտեգրման թեստը սև արկղ է: (Կան նաև մանրակրկիտ ներքին փորձարկման տարբերակներ:) Այս շրջանակը ստեղծվել է Pulumi-ի ամբողջական ծրագիր վերցնելու և դրա վրա կյանքի ցիկլի տարբեր գործողություններ կատարելու համար, ինչպես օրինակ՝ զրոյից նոր կույտի տեղակայումը, այն փոփոխություններով թարմացնելը և, հնարավոր է, մի քանի անգամ ջնջելը: Մենք դրանք կանոնավոր կերպով վարում ենք (օրինակ՝ գիշերը) և որպես սթրես-թեստ:
(Մենք , որպեսզի ինտեգրման փորձարկման նմանատիպ հնարավորությունները հասանելի լինեն լեզուների մայրենի SDK-ում: Դուք կարող եք օգտագործել Go ինտեգրման թեստավորման շրջանակը՝ անկախ նրանից, թե որ լեզվով է գրված ձեր Pulumi ծրագիրը):
Ծրագիրը գործարկելով այս շրջանակի միջոցով՝ կարող եք ստուգել հետևյալը.
- Ձեր նախագծի կոդը շարահյուսորեն ճիշտ է և աշխատում է առանց սխալների:
- Դույների և գաղտնիքների կազմաձևման կարգավորումներն աշխատում են և ճիշտ են մեկնաբանվում:
- Ձեր նախագիծը կարող է հաջողությամբ տեղակայվել ձեր ընտրած ամպային մատակարարում:
- Ձեր նախագիծը կարող է հաջողությամբ թարմացվել սկզբնական վիճակից մինչև N այլ վիճակ:
- Ձեր նախագիծը կարող է հաջողությամբ ոչնչացվել և հեռացվել ձեր ամպային մատակարարից:
Ինչպես շուտով կտեսնենք, այս շրջանակը կարող է օգտագործվել նաև գործարկման ժամանակի վավերացում կատարելու համար:
Պարզ ինտեգրման թեստ
Սա գործնականում տեսնելու համար մենք կնայենք պահեստին pulumi/examples, քանի որ մեր թիմը և Պուլումի համայնքը օգտագործում են այն փորձարկելու իրենց սեփական ձգողականության հարցումները, պարտավորությունները և գիշերային կառուցումները:
Ստորև ներկայացված է մեր պարզեցված թեստը :
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-ն առաջարկում է , որը կօգնի ձեզ միացնել ընդունման թեստավորումը՝ ձեր CI խողովակաշարում հարցումները ներգրավելու համար: Պարզապես տեղադրեք հավելվածը GitHub-ի պահոցում, և Pulumi-ն կավելացնի ենթակառուցվածքի նախադիտումների, թարմացումների և փորձարկման արդյունքների մասին ձեր CI և pull հարցումները.

Օգտագործելով Pulumi-ն ձեր հիմնական ընդունման թեստերի համար, դուք ձեռք կբերեք ավտոմատացման նոր հնարավորություններ, որոնք կբարելավեն ձեր թիմի արտադրողականությունը և վստահություն կհաղորդեն ձեր փոփոխությունների որակին:
Լրիվ
Այս հոդվածում մենք տեսանք, որ օգտագործելով ընդհանուր նշանակության ծրագրավորման լեզուներ, մենք մուտք ունենք ծրագրային ապահովման մշակման բազմաթիվ մեթոդներ, որոնք օգտակար էին մեր հավելվածները մշակելու համար: Դրանք ներառում են միավորի թեստավորում, ինտեգրման թեստավորում և դրանց փոխազդեցությունը լայնածավալ գործարկման ժամանակի թեստավորում իրականացնելու համար: Թեստերը հեշտ է գործարկել ըստ պահանջի կամ ձեր CI համակարգում:
Պուլումի — բաց կոդով ծրագրակազմ, այն անվճար է օգտագործման համար և աշխատում է ձեր սիրած ծրագրավորման լեզուների և ամպերի հետ — !
→
Source: www.habr.com
