Hæ allir. Í dag deilum við síðasta hluta greinarinnar með þér.
Dreifingarprófun
Þessi prófunarstíll er öflug nálgun og gerir okkur kleift að framkvæma hvíta kassaprófun til að prófa innri virkni innviðakóða okkar. Hins vegar takmarkar það nokkuð hvað við getum prófað. Prófin eru gerðar út frá dreifingaráætluninni í minni sem Pulumi bjó til fyrir raunverulega dreifinguna og því er ekki hægt að prófa dreifinguna sjálfa. Fyrir slík tilvik hefur Pulumi samþættingarprófunarramma. Og þessar tvær aðferðir virka frábærlega saman!
Pulumi samþættingarprófunarramminn er skrifaður í Go, sem er hvernig við prófum megnið af innri kóðanum okkar. Þó að áður rædd einingaprófunaraðferð hafi verið meira eins og prófun á hvítum kassa, þá er samþættingarpróf svartur kassi. (Það eru líka möguleikar fyrir strangar innri prófanir.) Þessi rammi var búinn til til að taka fullkomið Pulumi forrit og framkvæma ýmsar lífsferilsaðgerðir á því, svo sem að setja nýjan stafla frá grunni, uppfæra hann með afbrigðum og eyða honum, hugsanlega mörgum sinnum . Við keyrum þau reglulega (til dæmis á nóttunni) og sem álagspróf.
(Við
Með því að keyra forritið með þessum ramma geturðu athugað eftirfarandi:
- Verkefniskóðinn þinn er setningafræðilega réttur og keyrir án villna.
- Stillingar stafla og leyndarmála virka og eru túlkaðar rétt.
- Hægt er að dreifa verkefninu þínu með góðum árangri í skýjaveitunni að eigin vali.
- Hægt er að uppfæra verkefnið þitt úr upphaflegu ástandi í N önnur ríki.
- Hægt er að eyða verkefninu þínu og fjarlægja það frá skýjaveitunni þinni.
Eins og við munum sjá fljótlega er einnig hægt að nota þennan ramma til að framkvæma keyrslustaðfestingu.
Einfalt samþættingarpróf
Til að sjá þetta í aðgerð munum við skoða geymsluna pulumi/examples
, þar sem teymið okkar og Pulumi samfélagið notar það til að prófa okkar eigin dráttarbeiðnir, skuldbindingar og næturbyggingar.
Hér að neðan er einfaldað próf af okkar
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,
},
})
}
Þetta próf fer í gegnum grunnlífsferil þess að búa til, breyta og eyðileggja stafla fyrir möppu aws-js-s3-folder
. Það mun taka um það bil eina mínútu að tilkynna um staðist próf:
$ go test .
PASS
ok ... 43.993s
Það eru margir möguleikar til að sérsníða hegðun þessara prófa. Sjá allan lista yfir valkosti. ProgramTestOptions
. Til dæmis geturðu stillt Jaeger endapunkt til að rekja (Tracing
), gefur til kynna að þú búist við því að prófið falli ef prófið er neikvætt (ExpectFailure
), beittu röð „breytinga“ á forritið fyrir raðskipti á ríkjum (EditDirs
) Og mikið meira. Við skulum sjá hvernig á að nota þau til að prófa uppsetningu forritsins.
Athugar eiginleika auðlinda
Samþættingin sem fjallað er um hér að ofan tryggir að forritið okkar „virki“ - það hrynur ekki. En hvað ef við viljum athuga eiginleika stafla sem myndast? Til dæmis, að ákveðnar tegundir tilfræða hafi (eða hafa ekki) verið útvegaðar og að þær hafi ákveðna eiginleika.
Viðfang ExtraRuntimeValidation
í ProgramTestOptions
gerir okkur kleift að skoða stöðuna eftir dreifingu skráð af Pulumi svo við getum gert frekari athuganir. Þetta felur í sér heildarmynd af stöðu stafla sem myndast, þar á meðal uppsetningu, útflutt úttaksgildi, öll tilföng og eignagildi þeirra og öll ósjálfstæði milli tilfanga.
Til að sjá grunndæmi um þetta skulum við athuga hvort forritið okkar býr til eitt S3 fötu:
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")
},
})
Nú, þegar við keyrum go próf, mun það ekki aðeins fara í gegnum rafhlöðu af lífsferilsprófum, heldur mun það einnig, eftir að hafa komið staflanum fyrir, framkvæma viðbótarathugun á ástandinu sem myndast.
Runtime próf
Hingað til hafa allar prófanir eingöngu snúist um dreifingarhegðun og Pulumi auðlindalíkanið. Hvað ef þú vilt staðfesta að úthlutað innviði þitt virki í raun? Til dæmis að sýndarvélin sé í gangi, S3 fötuna inniheldur það sem við búumst við og svo framvegis.
Þú gætir hafa þegar giskað á hvernig á að gera þetta: valkostur ExtraRuntimeValidation
í ProgramTestOptions
- þetta er frábært tækifæri fyrir þetta. Á þessum tímapunkti keyrir þú sérsniðið Go próf með aðgangi að fullri stöðu auðlinda forritsins þíns. Þetta ástand inniheldur upplýsingar eins og IP-tölur sýndarvéla, vefslóðir og allt sem þarf til að hafa raunveruleg samskipti við skýjaforritin og innviðina sem myndast.
Til dæmis flytur prófunarkerfið okkar út eignina webEndpoint
fötu kallað websiteUrl
, sem er öll vefslóðin þar sem við getum stillt index document
. Þó við gætum grafið í ríkisskránni til að finna bucket
og lestu þá eign beint, en í mörgum tilfellum flytja staflarnir okkar út gagnlegar eignir eins og þessa sem okkur finnst þægilegt að nota til að athuga:
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!")
},
})
Eins og fyrri athugun okkar á keyrslutíma verður þessi athugun framkvæmd strax eftir að staflan hefur verið hækkað, allt sem svar við einföldu símtali go test
. Og það er bara toppurinn á ísjakanum - sérhver Go prófunareiginleiki sem þú getur skrifað í kóða er tiltækur.
Stöðug samþætting innviða
Það er gott að geta keyrt próf á fartölvu þegar verið er að gera miklar innviðabreytingar til að prófa þær áður en þær eru sendar til kóðaskoðunar. En við og margir viðskiptavinir okkar prófum innviði á ýmsum stigum þróunarlífsferils:
- Í hverri opinni pull beiðni um prófun fyrir sameiningu.
- Til að bregðast við hverri skuldbindingu, að athuga hvort sameiningin hafi verið rétt gerð.
- Reglulega, svo sem á nóttunni eða vikulega til viðbótarprófa.
- Sem hluti af frammistöðu- eða álagsprófum, sem venjulega keyrir yfir langan tíma og keyrir próf samhliða og/eða notar sama forritið mörgum sinnum.
Fyrir hvert þeirra styður Pulumi samþættingu við uppáhalds samfellda samþættingarkerfið þitt. Með stöðugri samþættingu gefur þetta þér sömu prófunarumfjöllun fyrir innviði þína og fyrir forritahugbúnaðinn þinn.
Pulumi hefur stuðning fyrir algeng CI kerfi. Hér eru nokkrar þeirra:
Nánari upplýsingar er að finna í skjölunum fyrir
Efnalegt umhverfi
Mjög öflugt tækifæri sem opnast er hæfileikinn til að dreifa skammvinnum umhverfi eingöngu til staðfestingarprófunar. Hugtak
Ef þú notar GitHub, þá býður Pulumi
Þegar þú notar Pulumi fyrir kjarnaviðurkenningarprófin þín færðu nýja sjálfvirknimöguleika sem mun bæta framleiðni liðsins og veita þér traust á gæðum breytinganna.
Samtals
Í þessari grein höfum við séð að með því að nota almenn forritunarmál verða margar hugbúnaðarþróunartækni tiltækar fyrir okkur sem hafa verið gagnlegar við að þróa forritin okkar. Þau fela í sér einingaprófun, samþættingarprófun og hvernig þau vinna saman til að framkvæma umfangsmikla keyrslupróf. Auðvelt er að keyra próf eftir beiðni eða í CI kerfinu þínu.
Pulumi - opinn hugbúnaður, ókeypis í notkun og vinnur með uppáhalds forritunarmálunum þínum og skýjum -
→
Heimild: www.habr.com