Mindenki helló. Ma megosztjuk veletek a cikk utolsó részét , amelyet kifejezetten a kurzus hallgatói számára készítettünk .

Telepítés tesztelése
A tárgyalt tesztelési stílus egy erőteljes megközelítés, amely lehetővé teszi számunkra az infrastruktúra kódunk belső működésének ellenőrzésére irányuló fehér dobozos tesztelés végrehajtását. Azonban némi korlátozást is jelent arra, hogy mit ellenőrizhetünk. A tesztek a Pulumi által közvetlen telepítés előtt létrehozott in-memory telepítési terv alapján hajtódnak végre, és ezért a telepítést magát nem lehet tesztelni. Az ilyen esetekre a Pulumi integrációs tesztelési keretrendszert biztosít. Ezek a megközelítések remekül működnek együtt!
A Pulumi integrációs tesztelési keretrendszere Go nyelven íródott, és éppen ezt használjuk belső kódunk nagy részének tesztelésére. Ha a korábban tárgyalt moduláris tesztelési megközelítés inkább a fehér dobozos teszteléshez hasonlított, az integrációs tesztelés a fekete dobozos teszteléshez. (Vannak alapos belső tesztelési lehetőségek is.) Ezt a keretrendszert azért hozták létre, hogy egy teljes Pulumi programot vegyen és különböző életciklus-műveleteket végezzen, mint például egy új verem telepítése a nulláról, annak frissítése variációkkal és törlése, akár többször is. Rendszeresen futtatjuk őket (például éjszaka) és stresszteszteként.
(Dolgozunk azon, A keretrendszer segítségével futó program futtatása során ellenőrizheti a következőket:
A projekt kódja szintaktikailag helyes és hibák nélkül működik.
- A verem és a titkok konfigurációs beállításai működnek és helyesen értelmeződnek.
- A projekt sikeresen telepíthető a választott felhőszolgáltatónál.
- A projekt sikeresen frissíthető a kezdeti állapotból N más állapotra.
- A projekt sikeresen megsemmisíthető és eltávolítható a felhőszolgáltatójából.
- Amint hamarosan láthatjuk, ezt a keretrendszert a futási idő validálására is fel lehet használni.
Как мы скоро увидим, этот фреймворк можно использовать также для выполнения runtime-валидации.
Egyszerű integrációs teszt
A működés megtekintéséhez nézzük meg a tárolót pulumi/examples, mivel a Pulumi csapatunk és közösségünk használja a saját pull requestjeik, commitjaik és éjszakai buildjeik tesztelésére.
Az alábbiakban egy leegyszerűsített teszt található, amely :
example_test.go:
csomag teszt
import (
"os"
"path"
"testing"
"github.com/pulumi/pulumi/pkg/testing/integration"
)
funk 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,
},
})
} Ez a teszt végigmegy egy alapvető életcikluson, amely a stack létrehozását, módosítását és megsemmisítését foglalja magában az aws-js-s3-foldermappáért. Körülbelül egy percet vesz igénybe a teszt bejelentéséhez:
$ go test .
PASS
ok ... 43.993s Sok paraméter áll rendelkezésre a tesztek viselkedésének testreszabásához. A lehetőségek teljes listáját lásd ProgramTestOptions. Például beállíthatja a Jaeger végpontot a nyomkövetéshez (Nyomkövetés), megadhatja, hogy negatív tesztelés során várja a teszt hibáját (ElvártHiba), alkalmazhat egy sor "javítást" a programra az állapotok sorozatos váltásához (EditDirs) és még sok mást. Nézzük meg, hogyan használhatjuk őket az alkalmazás telepítésének ellenőrzésére.
Erőforrások tulajdonságainak ellenőrzése
A fent említett integráció garantálja, hogy a programunk "működik" - nem hibázik. De mi van, ha azt akarjuk ellenőrizni, hogy a létrehozott stack milyen tulajdonságai vannak? Például, hogy bizonyos típusú erőforrások elő legyenek készítve (vagy ne legyenek), és hogy milyen saját attribútumaik vannak.
A parameter ExtraFuttatásiValidáció a ProgramTestOptions lehetővé teszi számunkra, hogy megnézzük az állapotot, amelyet a Pulumi rögzített a telepítés után (post-deployment state), így további ellenőrzéseket végezhetünk. Ez tartalmaz egy teljes pillanatfelvételt az eredmény stack állapotáról, beleértve a konfigurációt, az exportált kimeneti értékeket, az összes erőforrást és azok tulajdonságainak értékeit, valamint az erőforrások közötti összes függőséget.
Egy alapvető példa megtekintéséhez ellenőrizzük, hogy a programunk létrehoz egy S3 Buckete-t:
integration.ProgramTest(t, &integration.ProgramTestOptions{
\/\/ ahogy korábban...
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, "Várhatóan találni egy AWS S3 Buckettet")
},
})Most, hogy futtatni fogjuk a go test-et, nemcsak átmegy a létfontosságú tesztelések sorozatán, hanem a verem sikeres telepítése után további ellenőrzést is fog végezni az eredmény állapotával kapcsolatban.
Futási tesztek
Eddig minden teszt kizárólag a telepítési viselkedésről és a Pulumi erőforrás modellről szólt. Mi a teendő, ha szeretnéd ellenőrizni, hogy az elkészített infrastruktúra valóban működik? Például, hogy a virtuális gép működik, az S3 bucket tartalmazza a várt dolgokat, és így tovább.
Valószínűleg már kitaláltad, hogyan lehet ezt megtenni: a lehetőség ExtraFuttatásiValidáció a ProgramTestOptions — nagyszerű alkalom erre. Ezen a ponton egy tetszőleges Go tesztet futtatsz, teljes hozzáféréssel a programod erőforrásainak állapotához. Ez az állapot olyan információkat tartalmaz, mint a virtuális gépek IP-címei, URL-címek és minden, ami szükséges a felhőalkalmazásokkal és infrastruktúrával való valós interakcióhoz.
Például, a tesztprogramunk exportálja a következő tulajdonságot webEndpoint bucket nevű websiteUrl, amely a teljes URL-cím, ahol elérhetjük a beállított index dokumentumot. Bár kereshetnénk az állományfájlban, hogy megtaláljuk tároló és közvetlenül olvashatnánk ezt a tulajdonságot, sok esetben a stackjeink hasznos tulajdonságokat exportálnak, mint ez, amelyeket kényelmes használni az ellenőrzéshez:
integration.ProgramTest(t, &integration.ProgramTestOptions{
\/\/ ahogy korábban ...
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!")
},
}) Ahogyan az előző futási ellenőrzéseink, ez az ellenőrzés is közvetlenül a verem felemelése után fog végrehajtásra kerülni, és mindez egy egyszerű hívásra válaszul go test. És ez még csak a jéghegy csúcsa — minden olyan tesztelési lehetőség elérhető, amelyet a Go-ban megírhat.
Folyamatos integrációs infrastruktúra
Jó dolog, hogy a sok változás során teszteket futhatunk a laptopon, hogy ellenőrizzük őket, mielőtt a kódellenőrzésre küldenénk. De mi és sok ügyfelünk az infrastruktúrát különböző fejlesztési életciklus szakaszokban teszteljük:
- Minden nyitott pull request-ben a teszt számára a merge-elés előtt.
- Minden commit-ra, hogy újraellenőrizzük, hogy a merge helyesen történt.
- Időszakonként, például éjszaka vagy hetente az extra tesztelés érdekében.
- Teljesítmény- vagy stressztesztelés keretében, amely általában hosszabb időn keresztül történik, párhuzamosan futtatva a teszteket és/vagy ugyanazt a programot többször telepítve.
Ezekhez a Pulumi támogatja a kedvenc folyamatos integrációs rendszerével való integrációt. Folyamatos integrálás esetén ugyanolyan tesztlefedettséget nyújt az infrastruktúrájához, mint az alkalmazásprogramokhoz.
A Pulumi támogatja a népszerű CI rendszereket. Itt van néhány közülük:
További részletekért kérjük, nézze meg a .
Ephemeral környezetek
Egy nagyon erőteljes lehetőség, ami felmerül, az az, hogy kizárólag áttekintő tesztelés céljából ephemeral környezeteket telepíthetünk. A koncepció A Pulumi úgy van megtervezve, hogy könnyen telepíthessen és eltávolíthasson teljesen elszigetelt és független környezeteket, mindezt néhány egyszerű CLI parancs vagy integrációs tesztelő keretrendszer segítségével.
Ha GitHub-ot használ, a Pulumi kínál egy , amely segít kapcsolódni az áttekintő teszteléshez a pull request-en belül a CI folyamatában. Egyszerűen telepítse az alkalmazást a GitHub tárhelyébe, és a Pulumi-t a CI-jébe, és a pull request-ekhez információt ad hozzá az infrastruktúra előnézetéről, frissítésekről és tesztelési eredményekről:

Ha a Pulumi-t használja alapvető áttekintési tesztjeihez, új automatizálási lehetőségek nyílnak meg, amelyek javítják a csapat teljesítményét és biztosítják a változások minőségét.
Result
A cikkben láthattuk, hogy a többcélú programozási nyelvek használatával számos szoftverfejlesztési módszer válik elérhetővé, amelyek hasznosak voltak alkalmazásaink fejlesztése során. Ezek közé tartozik a moduláris tesztelés, az integrációs tesztelés, valamint ezek kölcsönhatása a kiterjedt futásidejű tesztelés végrehajtásához. A tesztek könnyen futtathatók igény szerint vagy a CI-rendszerében.
Pulumi — nyílt forráskódú szoftver, ingyenesen használható, és kedvenc programozási nyelveiddel és felhőszolgáltatásaiddal dolgozik — !
→
Forrás: habr.com
