Hi kollha. Illum naqsmu magħkom l-aħħar parti tal-artiklu.
Ittestjar tal-iskjerament
Dan l-istil ta 'ttestjar huwa approċċ b'saħħtu u jippermettilna nwettqu ttestjar ta' kaxxa bajda biex nittestjaw il-ħidma interna tal-kodiċi tal-infrastruttura tagħna. Madankollu, tillimita xi ftit dak li nistgħu nittestjaw. It-testijiet isiru bbażati fuq il-pjan ta 'skjerament fil-memorja maħluq minn Pulumi qabel l-iskjerament attwali u għalhekk l-iskjerament innifsu ma jistax jiġi ttestjat. Għal każijiet bħal dawn, Pulumi għandu qafas ta 'test ta' integrazzjoni. U dawn iż-żewġ approċċi jaħdmu tajjeb flimkien!
Il-qafas tal-ittestjar tal-integrazzjoni Pulumi huwa miktub f'Go, li huwa kif nittestjaw il-biċċa l-kbira tal-kodiċi intern tagħna. Filwaqt li l-approċċ tal-ittestjar tal-unità diskuss qabel kien aktar bħall-ittestjar tal-kaxxa bajda, l-ittestjar tal-integrazzjoni huwa kaxxa sewda. (Hemm ukoll għażliet għal ttestjar intern rigoruż.) Dan il-qafas inħoloq biex jieħu programm Pulumi komplet u jwettaq diversi operazzjonijiet taċ-ċiklu tal-ħajja fuqu, bħall-iskjerament ta' munzell ġdid mill-bidu, l-aġġornament tiegħu b'varjazzjonijiet, u t-tħassir, possibbilment diversi drabi. . Aħna nħaddmuhom regolarment (per eżempju, bil-lejl) u bħala testijiet tal-istress.
(Aħna
Billi tħaddem il-programm billi tuża dan il-qafas tista' tiċċekkja dan li ġej:
- Il-kodiċi tal-proġett tiegħek huwa sintattikament korrett u jaħdem mingħajr żbalji.
- Is-settings tal-konfigurazzjoni tal-munzell u s-sigrieti jaħdmu u huma interpretati b'mod korrett.
- Il-proġett tiegħek jista' jiġi skjerat b'suċċess fil-fornitur tal-cloud tal-għażla tiegħek.
- Il-proġett tiegħek jista 'jiġi aġġornat b'suċċess mill-istat inizjali għal N stati oħra.
- Il-proġett tiegħek jista 'jinqered u jitneħħa b'suċċess mill-fornitur tas-sħab tiegħek.
Kif ser naraw dalwaqt, dan il-qafas jista 'jintuża wkoll biex twettaq validazzjoni runtime.
Test ta 'integrazzjoni sempliċi
Biex naraw dan fl-azzjoni, aħna ser inħarsu lejn ir-repożitorju pulumi/examples
, peress li t-tim tagħna u l-komunità Pulumi jużaha biex jittestjaw it-talbiet tal-ġibda, il-kommits u l-bini ta 'filgħaxija tagħna stess.
Hawn taħt hawn test simplifikat tagħna
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,
},
})
}
Dan it-test jgħaddi miċ-ċiklu tal-ħajja bażiku tal-ħolqien, il-modifika u l-qerda ta’ munzell għal folder aws-js-s3-folder
. Se tieħu madwar minuta biex tirrapporta test li għadda:
$ go test .
PASS
ok ... 43.993s
Hemm ħafna għażliet biex tippersonalizza l-imġieba ta 'dawn it-testijiet. Ara l-lista sħiħa tal-għażliet. ProgramTestOptions
. Pereżempju, tista' tikkonfigura l-endpoint ta' Jaeger biex jittraċċa (Tracing
), indika li tistenna li t-test ifalli jekk it-test ikun negattiv (ExpectFailure
), applika serje ta’ “editji” għall-programm għal transizzjoni sekwenzjali ta’ stati (EditDirs
) u ħafna aktar. Ejja naraw kif tużahom biex tittestja l-iskjerament tal-applikazzjoni tiegħek.
Iċċekkjar tal-proprjetajiet tar-riżorsi
L-integrazzjoni diskussa hawn fuq tiżgura li l-programm tagħna "jaħdem"—ma jaħbatx. Imma x'jiġri jekk irridu niċċekkjaw il-proprjetajiet tal-munzell li jirriżulta? Pereżempju, li ċerti tipi ta' riżorsi ġew ipprovduti (jew le) u li għandhom ċerti attributi.
Parametru ExtraRuntimeValidation
għall- ProgramTestOptions
jippermettilna nħarsu lejn l-istat ta’ wara l-iskjerament irreġistrat minn Pulumi sabiex inkunu nistgħu nagħmlu kontrolli addizzjonali. Dan jinkludi stampa sħiħa tal-istat tal-munzell li jirriżulta, inkluż il-konfigurazzjoni, il-valuri tal-output esportati, ir-riżorsi kollha u l-valuri tal-proprjetà tagħhom, u d-dipendenzi kollha bejn ir-riżorsi.
Biex tara eżempju bażiku ta 'dan, ejja niċċekkjaw li l-programm tagħna joħloq wieħed S3 Barmil:
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")
},
})
Issa, meta nwettqu t-test tal-go, mhux biss se jgħaddi minn batterija ta 'testijiet taċ-ċiklu tal-ħajja, iżda wkoll, wara li tuża b'suċċess il-munzell, se twettaq kontroll addizzjonali fuq l-istat li jirriżulta.
Testijiet runtime
S'issa, it-testijiet kollha kienu purament dwar l-imġiba tal-iskjerament u l-mudell tar-riżorsi Pulumi. X'jiġri jekk trid tivverifika li l-infrastruttura pprovduta tiegħek fil-fatt taħdem? Pereżempju, li l-magna virtwali tkun qed taħdem, il-barmil S3 fih dak li nistennew, eċċ.
Jista' jkun li diġà qtajt kif tagħmel dan: għażla ExtraRuntimeValidation
għall- ProgramTestOptions
- din hija opportunità kbira għal dan. F'dan il-punt, inti tmexxi test Go personalizzat b'aċċess għall-istat sħiħ tar-riżorsi tal-programm tiegħek. Dan l-istat jinkludi informazzjoni bħal indirizzi IP tal-magni virtwali, URLs, u dak kollu meħtieġ biex fil-fatt jinteraġixxu mal-applikazzjonijiet u l-infrastruttura tal-cloud li jirriżultaw.
Pereżempju, il-programm tat-test tagħna jesporta l-proprjetà webEndpoint
barmil imsejjaħ websiteUrl
, li huwa l-URL sħiħ fejn nistgħu niksbu l-konfigurat index document
. Għalkemm nistgħu ħaffer fil-fajl tal-istat biex insibu bucket
u aqra dik il-proprjetà direttament, iżda f'ħafna każijiet il-munzelli tagħna jesportaw proprjetajiet utli bħal dan li nsibu konvenjenti biex nużaw għall-iċċekkjar:
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!")
},
})
Bħall-kontrolli tar-runtime preċedenti tagħna, dan il-kontroll se jitwettaq immedjatament wara li jgħolli l-munzell, kollha bi tweġiba għal sejħa sempliċi go test
. U dik hija biss il-ponta tal-iceberg—kull karatteristika tat-test Go li tista 'tikteb fil-kodiċi hija disponibbli.
Integrazzjoni Kontinwa tal-Infrastruttura
Tajjeb li tkun tista’ tmexxi testijiet fuq laptop meta jkunu qed isiru ħafna bidliet fl-infrastruttura biex jiġu ttestjati qabel ma jiġu sottomessi għar-reviżjoni tal-kodiċi. Iżda aħna u ħafna mill-klijenti tagħna nittestjaw l-infrastruttura f'diversi stadji taċ-ċiklu tal-ħajja tal-iżvilupp:
- F'kull talba ta 'ġibda miftuħa għall-ittestjar qabel l-għaqda.
- Bi tweġiba għal kull impenn, biex tiċċekkja darbtejn li l-għaqda saret b'mod korrett.
- Perjodikament, bħal bil-lejl jew kull ġimgħa għal testijiet addizzjonali.
- Bħala parti mill-ittestjar tal-prestazzjoni jew tal-istress, li tipikament idum fuq perjodu twil ta 'żmien u jwettaq testijiet b'mod parallel u/jew juża l-istess programm diversi drabi.
Għal kull wieħed minn dawn, Pulumi jappoġġja l-integrazzjoni mas-sistema ta 'integrazzjoni kontinwa favorita tiegħek. B'integrazzjoni kontinwa, dan jagħtik l-istess kopertura tat-test għall-infrastruttura tiegħek bħal għas-softwer tal-applikazzjoni tiegħek.
Pulumi għandu appoġġ għal sistemi CI komuni. Hawn huma xi wħud minnhom:
Għal aktar informazzjoni dettaljata, jekk jogħġbok irreferi għad-dokumentazzjoni għal
Ambjenti Effimeri
Opportunità qawwija ħafna li tiftaħ hija l-abbiltà li jintużaw ambjenti effimeri biss għal skopijiet ta 'ttestjar ta' aċċettazzjoni. Kunċett
Jekk tuża GitHub, allura Pulumi joffri
Meta tuża Pulumi għat-testijiet ewlenin ta 'aċċettazzjoni tiegħek, int ser tikseb kapaċitajiet ġodda ta' awtomazzjoni li jtejbu l-produttività tat-tim u jagħtuk kunfidenza fil-kwalità tal-bidliet tiegħek.
Total
F'dan l-artikolu, rajna li bl-użu ta 'lingwi ta' programmar ta 'skop ġenerali, ħafna tekniki ta' żvilupp ta 'softwer isiru disponibbli għalina li kienu utli fl-iżvilupp tal-applikazzjonijiet tagħna. Dawn jinkludu l-ittestjar tal-unità, l-ittestjar tal-integrazzjoni, u kif jaħdmu flimkien biex iwettqu ttestjar ta 'runtime estensiv. It-testijiet huma faċli biex isiru fuq talba jew fis-sistema CI tiegħek.
Pulumi - softwer b'sors miftuħ, liberu li juża u jaħdem bil-lingwi u s-sħab ta' programmar favoriti tiegħek -
→
Sors: www.habr.com