Profi Isadeiledd fel Cod gyda Pulumi. Rhan 2

Helo i gyd. Heddiw rydyn ni'n rhannu rhan olaf yr erthygl gyda chi. "Profi Isadeiledd fel Cod gyda Pulumi", y paratowyd y cyfieithiad ohono yn benodol ar gyfer myfyrwyr cwrs "Arferion ac offer DevOps".

Profi Isadeiledd fel Cod gyda Pulumi. Rhan 2

Profi lleoli

Mae'r math hwn o brofi yn ddull pwerus ac yn ein galluogi i gynnal profion blwch gwyn i brofi gweithrediad mewnol ein cod seilwaith. Fodd bynnag, mae'n cyfyngu rhywfaint ar yr hyn y gallwn ei brofi. Perfformir y profion yn seiliedig ar y cynllun defnyddio cof a grëwyd gan Pulumi cyn y defnydd gwirioneddol ac felly ni ellir profi'r defnydd ei hun. Ar gyfer achosion o'r fath, mae gan Pulumi fframwaith prawf integreiddio. Ac mae'r ddau ddull hyn yn gweithio'n wych gyda'i gilydd!

Mae fframwaith profi integreiddio Pulumi wedi'i ysgrifennu yn Go, a dyna sut rydyn ni'n profi'r rhan fwyaf o'n cod mewnol. Er bod y dull profi uned a drafodwyd yn flaenorol yn debycach i brofi blwch gwyn, mae profion integreiddio yn flwch du. (Mae yna hefyd opsiynau ar gyfer profi mewnol trwyadl.) Crëwyd y fframwaith hwn i gymryd rhaglen Pulumi gyflawn a pherfformio amrywiol weithrediadau cylch bywyd arno, megis gosod pentwr newydd o'r dechrau, ei ddiweddaru gydag amrywiadau, a'i ddileu, o bosibl sawl gwaith. . Rydyn ni'n eu rhedeg yn rheolaidd (er enghraifft, gyda'r nos) ac fel profion straen.

(Ni rydym yn gweithio arno, fel bod galluoedd profi integreiddio tebyg ar gael yn y SDK brodorol o ieithoedd. Gallwch ddefnyddio'r fframwaith profi integreiddio Go waeth ym mha iaith y mae eich rhaglen Pulumi wedi'i hysgrifennu).

Trwy redeg y rhaglen gan ddefnyddio'r fframwaith hwn gallwch wirio'r canlynol:

  • Mae cod eich prosiect yn gywir yn syntactig ac yn rhedeg heb wallau.
  • Mae'r gosodiadau cyfluniad pentwr a chyfrinachau yn gweithio ac yn cael eu dehongli'n gywir.
  • Gall eich prosiect gael ei ddefnyddio'n llwyddiannus yn y darparwr cwmwl o'ch dewis.
  • Gall eich prosiect gael ei uwchraddio'n llwyddiannus o'r cyflwr cychwynnol i N talaith arall.
  • Gall eich prosiect gael ei ddinistrio'n llwyddiannus a'i ddileu o'ch darparwr cwmwl.

Fel y gwelwn yn fuan, gellir defnyddio'r fframwaith hwn hefyd i gyflawni dilysiad amser rhedeg.

Prawf integreiddio syml

I weld hyn ar waith, byddwn yn edrych ar yr ystorfa pulumi/examples, gan fod ein tîm a chymuned Pulumi yn ei ddefnyddio i brofi ein ceisiadau tynnu ein hunain, ymrwymo, ac adeiladu nos.

Isod mae prawf symlach o'n enghraifft sy'n darparu bwced S3 a rhai gwrthrychau eraill:

enghraifft_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,
        },
    })
}

Mae'r prawf hwn yn mynd trwy'r cylch bywyd sylfaenol o greu, addasu a dinistrio pentwr ar gyfer ffolder aws-js-s3-folder. Bydd yn cymryd tua munud i roi gwybod am brawf sydd wedi pasio:

$ go test .
PASS
ok      ... 43.993s

Mae yna lawer o opsiynau i addasu ymddygiad y profion hyn. Gweler y rhestr lawn o opsiynau. yn y strwythur ProgramTestOptions. Er enghraifft, gallwch chi ffurfweddu pwynt terfyn Jaeger i olrhain (Tracing), nodwch eich bod yn disgwyl i'r prawf fethu os yw'r prawf yn negyddol (ExpectFailure), cymhwyso cyfres o “olygiadau” i'r rhaglen ar gyfer pontio dilyniannol o daleithiau (EditDirs) a llawer mwy. Gadewch i ni weld sut i'w defnyddio i brofi eich defnydd o gais.

Gwirio priodweddau adnoddau

Mae'r integreiddio a drafodwyd uchod yn sicrhau bod ein rhaglen yn “gweithio” - nid yw'n chwalu. Ond beth os ydym am wirio priodweddau'r pentwr canlyniadol? Er enghraifft, bod rhai mathau o adnoddau wedi'u darparu (neu heb fod) a bod ganddynt rinweddau penodol.

Paramedr ExtraRuntimeValidation gyfer ProgramTestOptions yn ein galluogi i edrych ar y cyflwr ôl-leoli a gofnodwyd gan Pulumi fel y gallwn wneud gwiriadau ychwanegol. Mae hyn yn cynnwys ciplun cyflawn o gyflwr y pentwr canlyniadol, gan gynnwys cyfluniad, gwerthoedd allbwn wedi'u hallforio, yr holl adnoddau a'u gwerthoedd eiddo, a'r holl ddibyniaethau rhwng adnoddau.

I weld enghraifft sylfaenol o hyn, gadewch i ni wirio bod ein rhaglen yn creu un S3 Bwced:

  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")
        },
    })

Nawr, pan fyddwn yn rhedeg prawf mynd, bydd nid yn unig yn mynd trwy batri o brofion cylch bywyd, ond hefyd, ar ôl defnyddio'r pentwr yn llwyddiannus, bydd yn cynnal gwiriad ychwanegol ar y cyflwr canlyniadol.

Profion amser rhedeg

Hyd yn hyn, mae pob prawf wedi bod yn ymwneud ag ymddygiad lleoli a model adnoddau Pulumi yn unig. Beth os ydych am wirio bod eich seilwaith a ddarparwyd yn gweithio mewn gwirionedd? Er enghraifft, bod y peiriant rhithwir yn rhedeg, mae'r bwced S3 yn cynnwys yr hyn yr ydym yn ei ddisgwyl, ac ati.

Efallai eich bod eisoes wedi dyfalu sut i wneud hyn: opsiwn ExtraRuntimeValidation gyfer ProgramTestOptions - dyma gyfle gwych i hyn. Ar y pwynt hwn, rydych chi'n rhedeg prawf Go wedi'i deilwra gyda mynediad i gyflwr llawn adnoddau eich rhaglen. Mae'r cyflwr hwn yn cynnwys gwybodaeth fel cyfeiriadau IP peiriannau rhithwir, URLau, a phopeth sydd ei angen i ryngweithio mewn gwirionedd â'r cymwysiadau a'r seilwaith cwmwl sy'n deillio o hynny.

Er enghraifft, mae ein rhaglen brawf yn allforio'r eiddo webEndpoint bwced o'r enw websiteUrl, sef yr URL llawn lle gallwn gael y cyfluniad index document. Er y gallem gloddio i mewn i'r ffeil cyflwr i ddod o hyd bucket a darllenwch yr eiddo hwnnw'n uniongyrchol, ond mewn llawer o achosion mae ein staciau yn allforio eiddo defnyddiol fel hwn sy'n gyfleus i ni eu defnyddio ar gyfer gwirio:

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!")
        },
    })

Fel ein gwiriadau amser rhedeg blaenorol, bydd y gwiriad hwn yn cael ei wneud yn syth ar ôl codi'r pentwr, i gyd mewn ymateb i alwad syml go test. A dim ond blaen y mynydd yw hynny - mae pob nodwedd prawf Go y gallwch ei hysgrifennu yn y cod ar gael.

Integreiddio Seilwaith Parhaus

Mae'n dda gallu rhedeg profion ar liniadur pan fydd llawer o newidiadau seilwaith yn cael eu gwneud i'w profi cyn eu cyflwyno ar gyfer adolygiad cod. Ond rydym ni a llawer o'n cleientiaid yn profi seilwaith ar wahanol gamau o'r cylch bywyd datblygu:

  • Ym mhob cais tynnu agored ar gyfer profi cyn uno.
  • Mewn ymateb i bob ymrwymiad, i wirio ddwywaith bod yr uno wedi'i wneud yn gywir.
  • O bryd i'w gilydd, megis gyda'r nos neu'n wythnosol ar gyfer profion ychwanegol.
  • Fel rhan o berfformiad neu brofi straen, sydd fel arfer yn rhedeg dros gyfnod hir o amser ac yn cynnal profion ochr yn ochr a/neu'n defnyddio'r un rhaglen sawl gwaith.

Ar gyfer pob un o'r rhain, mae Pulumi yn cefnogi integreiddio â'ch hoff system integreiddio barhaus. Gydag integreiddio parhaus, mae hyn yn rhoi'r un sylw prawf i chi ar gyfer eich seilwaith ag ar gyfer eich meddalwedd cais.

Mae gan Pulumi gefnogaeth ar gyfer systemau CI cyffredin. Dyma rai ohonynt:

Am wybodaeth fanylach, cyfeiriwch at y ddogfennaeth ar gyfer Cyflawniad Parhaus.

Amgylcheddau Byrhoedlog

Cyfle pwerus iawn sy'n agor yw'r gallu i ddefnyddio amgylcheddau byrhoedlog at ddibenion profi derbyniad yn unig. Cysyniad prosiectau a phentyrrau Mae Pulumi wedi'i gynllunio i ddefnyddio a rhwygo amgylcheddau cwbl ynysig ac annibynnol yn hawdd, i gyd mewn ychydig o orchmynion CLI syml neu gan ddefnyddio fframwaith profi integreiddio.

Os ydych chi'n defnyddio GitHub, yna mae Pulumi yn cynnig Ap GitHub, a fydd yn eich helpu i gysylltu profion derbyn i dynnu ceisiadau o fewn eich piblinell CI. Gosodwch y cymhwysiad yn ystorfa GitHub, a bydd Pulumi yn ychwanegu gwybodaeth am ragolygon seilwaith, diweddariadau a chanlyniadau profi i'ch CI a'ch ceisiadau cronfa:

Profi Isadeiledd fel Cod gyda Pulumi. Rhan 2

Pan ddefnyddiwch Pulumi ar gyfer eich profion derbyn craidd, byddwch yn ennill galluoedd awtomeiddio newydd a fydd yn gwella cynhyrchiant tîm ac yn rhoi hyder i chi yn ansawdd eich newidiadau.

Cyfanswm

Yn yr erthygl hon, rydym wedi gweld, trwy ddefnyddio ieithoedd rhaglennu pwrpas cyffredinol, fod llawer o dechnegau datblygu meddalwedd ar gael i ni sydd wedi bod yn ddefnyddiol wrth ddatblygu ein cymwysiadau. Maent yn cynnwys profi uned, profi integreiddio, a sut maent yn gweithio gyda'i gilydd i berfformio profion amser rhedeg helaeth. Mae profion yn hawdd i'w rhedeg ar alw neu yn eich system CI.

Pulumi - meddalwedd ffynhonnell agored, am ddim i'w defnyddio ac yn gweithio gyda'ch hoff ieithoedd rhaglennu a chymylau - rhowch gynnig arni heddiw!

Rhan gyntaf

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster