Tere kĂ”igile. TĂ€na jagame teiega artikli lĂ”pposa , mille tĂ”lke valmistamiseks on see spetsiaalselt mĂ”eldud kursuse ĂŒliĂ”pilastele .

Deployimise testimine
KÀsitletud testimisstiil on tugev lÀhenemine, mis vÔimaldab meil teostada valge kasti testimist meie infrastruktuuri koodi sisemiste tööde kontrollimiseks. Kuid see piirab veidi seda, mida me saame kontrollida. Testid viiakse lÀbi in-memory deployimisplaani pÔhjal, mille Pulumi loob enne tegelikku paigaldamist, seetÔttu ei saa me paigaldust ennast testida. Selliste juhtumite jaoks on Pulumi-s integratsioonitestide raamistik. Ja need kaks lÀhenemist toimivad koos suurepÀraselt!
Pulumi integreerimise testimise raamistik on kirjutatud Go-s ja just selle abil testime suurt osa meie sisemisest koodist. Kui eelnevalt arutatud moodulitestimise lĂ€henemine oli rohkem sarnane valge kasti testimisele, siis integreerimistestimine on must kast. (On ka vĂ”imalusi pĂ”hjalikuks sisemiseks testimiseks.) See raamistik loodi selleks, et vĂ”tta tĂ€is Pulumi programm ja teostada selle kohta erinevaid elutsĂŒkli operatsioone, nagu uue virna juurutamine nullist, selle uuendamine variatsioonidega ja kustutamine, vĂ”ib-olla mitu korda. KĂ€ivitame neid regulaarselt (nĂ€iteks öösiti) ja pingetestide osana.
(Me , et sarnased integreerimistestimise vÔimalused oleksid kohalike SDK-de keeltes. Saate Go integreerimistestimise raamistikku kasutada sÔltumata keelt, milles teie Pulumi programm on kirjutatud).
Programmi kÀivitamisel selle raamistikuga saate kontrollida jÀrgmist:
- Teie projekti kood on sĂŒntaktiliselt korrektne ja töötab vigadeta.
- Stacki ja saladuste konfigureerimise seaded töötavad ning tÔlgendatakse Ôigesti.
- Teie projekt saab edukalt juurutatud valitud pilveteenusesse.
- Teie projekt saab edukalt uuendatud algsest olekust N muusse olekusse.
- Teie projekt saab edukalt hÀvitatud ja kustutatud teie pilveteenuse pakkujalt.
Nagu me varsti nÀeme, saab seda raamistikku kasutada ka runtime'i valideerimiseks.
Lihtne integreerimistest
Et seda tegevuses nÀha, vaatame repositooriumi pulumi/examples, kuna meie meeskond ja Pulumi kogukond kasutavad seda oma pull-requestide, kommitite ja öiste kogumiste testimiseks.
Allpool on toodud lihtsustatud test meie :
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,
},
})
} See test lĂ€bib pĂ”hijĂ€rkude loomise, muutmise ja hĂ€vitamise tsĂŒklit kausta jaoks aws-js-s3-folder. See vĂ”tab aega umbes minuti, et teavitada lĂ€bitud testist:
$ go test .
PASS
ok ... 43.993s Testide kĂ€itumise kohandamiseks on palju valikuid. TĂ€ielik loetelu valikutest vaata siit. ProgramTestOptions. NĂ€iteks vĂ”id seadistada Jaegeri lĂ”pp-punkti jĂ€lgimise jaoks (JĂ€lgimine), mĂ€rkida, et ootad testi ebaĂ”nnestumist negatiivse testimise korral (OotaEbaĂ”nnestumist), rakendada programmi âmuudatusiâ sĂŒsteemide jĂ€rkjĂ€rguliseks ĂŒleminekuks (MuudaKaasid) ja palju muud. Vaatame, kuidas neid kasutada rakenduse juurutamise kontrollimiseks.
Ressursside omaduste kontrollimine
Ălaltoodud integreerimine tagab, et meie programm âtöötabâ â see ei ebaĂ”nnestu. Aga kui me soovime kontrollida saadud stack'i omadusi? NĂ€iteks, et teatud tĂŒĂŒpi ressursse on (vĂ”i ei ole) ette valmistatud ja et neil on teatud atribuudid.
Parameeter ExtraRuntimeValidation kuna ProgramTestOptions vÔimaldab meil vaadata Pulumi registreeritud seisundit pÀrast juurutamist (post-deployment state), et saaksime teha tÀiendavaid kontrolle. Siia kuulub tÀielik tulemuse steki seisundi jÀljend, sealhulgas konfiguratsioon, eksporditavad vÀljundvÀÀrtused, kÔik ressursid ja nende omaduste vÀÀrtused, samuti kÔik ressursivahelised sÔltuvused.
Et nĂ€ha selle pĂ”hinĂ€idet, vaatame, et meie programm loob ĂŒhe S3 Ă€mbri:
integration.ProgramTest(t, &integration.ProgramTestOptions{
// nagu enne...
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, "Oodata, et leida ĂŒksik AWS S3 Ă€mbri")
},
})NĂŒĂŒd, kui kĂ€ivitame go test, siis see mitte ainult ei lĂ€bi elu tsĂŒkli testide seeriat, vaid ka pĂ€rast steki eduka juurutamise tulemuse kontrollimise tĂ€iendava kontrolli.
Runtime-testid
Kuni praeguseni on kÔik testid kÀsitlenud ainult kÀivitamisprotsesside ja Pulumi ressursimudelite kÀitumist. Kuidas aga kontrollida, kas teie seadistatud infrastruktuur tÔepoolest töötab? NÀiteks kas virtuaalmasin töötab, S3 Àmber sisaldab seda, mida ootame, jne.
VĂ”isite juba arvata, kuidas seda teha: variant ExtraRuntimeValidation kuna ProgramTestOptions â on selleks suurepĂ€rane vĂ”imalus. Sellisel hetkel kĂ€itate juhuslikku Go testi, millel on juurdepÀÀs teie programmi tĂ€ielikule ressursiseisundile. See seisund sisaldab teavet, nagu virtuaalmasinate IP-aadressid, URL-id ja kĂ”ik, mis on vajalik reaalseteks interaktsioonideks saamiskeskkondade ja infrastruktuuriga.
NĂ€iteks ekspordib meie testprogrammmis omadus webEndpoint Ă€mber nimega websiteUrl, mis esindab tĂ€ielikku URL-i, mille kaudu saame ligipÀÀsu seadistatud index document. Kuigi me vĂ”iksime seisundifailis sĂŒĂŒvida ja lugeda seda omadust otse, ekspordivad paljudel juhtudel meie stekid kasulikke omadusi, nagu see, mida on mugav kasutada kontrollimiseks: baketi ja lugeda seda omadust otse, kuid paljudel juhtudel ekspordivad meie stekid kasulikke omadusi, nagu see, mida me saame mugavalt kasutada kontrollimiseks:
integration.ProgramTest(t, &integration.ProgramTestOptions{
// nagu varem ...
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), "Tere, Pulumi!")
},
}) Nagu meie varasemad runtime-kontrollid, viiakse see kontroll lĂ€bi kohe pĂ€rast steigi kĂ€ivitamist ja kĂ”ik see on lihtsa kutse vastus. go test. Ja see on alles jÀÀmĂ€e tipp â kĂ”ik Go testimise vĂ”imalused on saadaval ja neid saab kirjutada koodis.
TĂ€itmise pidev integreerimine
Hea on vĂ”imalus kĂ€ivitada teste sĂŒlearvutis, kui tehakse palju muudatusi infrastuktuuris, et neid enne koodile ĂŒlevaatamiseks saatmist kontrollida. Kuid meie ja paljud meie kliendid testivad infrastruktuuri erinevates arenduse elutsĂŒkli etappides:
- Igas avatud pulli taotluses testi enne sulandumist.
- Kasutaja iga commiti puhul, et ĂŒle kontrollida, et sulandumine toimus Ă”igesti.
- Perioodiliselt, nÀiteks öösel vÔi nÀdalas lisatestimiseks.
- JÔudlustestide vÔi stressitestide raames, mida tavaliselt tehakse pika aja jooksul ja mis kÀivitavad teste paralleelselt ja / vÔi kasutavad sama programmi mitu korda.
IgaĂŒhe jaoks toetab Pulumi integreerimist teie lemmik pideva integreerimise sĂŒsteemiga. Pideva integreerimise korral annab see teile sama katvuse testidega teie infrastruktuuri jaoks, nagu ka rakendustarkvara jaoks.
Pulumi toetab levinud CI-sĂŒsteeme. Siin on mĂ”ned neist:
Lisainformatsiooni saamiseks pöörduge dokumentatsiooni poole .
Efemeraalsed keskkonnad
VÀga vÔimas vÔimalus, mis avaneb, on efemeersete keskkondade juurutamine ainult aktsepteerimistestide eesmÀrkidel. Kontseptsioon Pulumi on loodud selleks, et hÔlpsasti juurutada ja likvideerida tÀiesti isoleeritud ja sÔltumatuid keskkondi, kÔik mÔne lihtsa CLI kÀsu vÔi integratsioonitestimise raamistikuga.
Kui kasutate GitHubi, siis Pulumi pakub , mis aitab teil siduda aktsepteerimistestid teie CI-pipeline'i pull-request'idega. Lihtsalt installige rakendus GitHubi repositooriumis ja Pulumi teie CI-s, ning pull-request'idele lisatakse teavet infrastruktuuri eelvaate, vÀrskenduste ja testimistulemustega:

Pulumi kasutamine teie pÔhieksamite jaoks avab uued automatiseerimise vÔimalused, mis parandavad meeskonna tootlikkust ja annavad kindlustunde muudatuste kvaliteedis.
KokkuvÔte
KĂ€esolevas artiklis nĂ€gime, et ĂŒldotstarbeliste programmeerimiskeelte kasutamine avab meile palju tarkvaraarenduse meetodeid, mis on meie rakenduste arendamisel kasulikud. Nende hulka kuuluvad moodulitestimine, integreerimistestimine ning nende koostoime ulatuslikuks runtime-testeerimiseks. teste on lihtne kĂ€ivitada nĂ”udmise korral vĂ”i teie CI-sĂŒsteemis.
Pulumi â avatud lĂ€htekoodiga tarkvara, mis on tasuta, et kasutada ja töötab teie lemmikprogrammeeringute ja pilvedega â !
â
Allikas: habr.com
