Idanwo Awọn amayederun bi koodu pẹlu Pulumi. Apa 2

Bawo ni gbogbo eniyan. Loni a pin pẹlu rẹ apakan ikẹhin ti nkan naa. "Idanwo Awọn amayederun bi koodu pẹlu Pulumi", itumọ eyi ti a ti pese sile ni pato fun awọn ọmọ ile-iwe dajudaju "Awọn iṣe DevOps ati awọn irinṣẹ".

Idanwo Awọn amayederun bi koodu pẹlu Pulumi. Apa 2

Idanwo imuṣiṣẹ

Ara idanwo yii jẹ ọna ti o lagbara ati gba wa laaye lati ṣe idanwo apoti funfun lati ṣe idanwo awọn iṣẹ inu ti koodu amayederun wa. Sibẹsibẹ, o ni opin diẹ ohun ti a le ṣe idanwo. Awọn idanwo naa ni a ṣe da lori ero imuṣiṣẹ inu-iranti ti a ṣẹda nipasẹ Pulumi ṣaaju imuṣiṣẹ gangan ati nitori naa imuṣiṣẹ naa funrararẹ ko le ṣe idanwo. Fun iru awọn ọran bẹẹ, Pulumi ni ilana idanwo isọpọ kan. Ati awọn ọna meji wọnyi ṣiṣẹ nla papọ!

Ilana idanwo iṣọpọ Pulumi ni kikọ ni Go, eyiti o jẹ bii a ṣe idanwo pupọ julọ koodu inu wa. Lakoko ti ọna idanwo ẹyọkan ti a sọ tẹlẹ jẹ diẹ sii bii idanwo apoti funfun, idanwo isọpọ jẹ apoti dudu. (Awọn aṣayan tun wa fun idanwo inu inu lile.) Ilana yii ni a ṣẹda lati mu eto Pulumi pipe ati ṣe ọpọlọpọ awọn iṣẹ ṣiṣe igbesi aye lori rẹ, gẹgẹbi gbigbe akopọ tuntun kan lati ibere, imudojuiwọn pẹlu awọn iyatọ, ati piparẹ rẹ, o ṣee ṣe ni ọpọlọpọ igba pupọ. . A ṣiṣe wọn nigbagbogbo (fun apẹẹrẹ, ni alẹ) ati bi awọn idanwo wahala.

(Awa a n ṣiṣẹ lori rẹ, ki awọn agbara idanwo isọpọ ti o jọra wa ni SDK abinibi ti awọn ede. O le lo ilana idanwo iṣọpọ Go laibikita ede ti a ti kọ eto Pulumi rẹ).

Nipa ṣiṣe eto naa nipa lilo ilana yii o le ṣayẹwo atẹle naa:

  • Koodu ise agbese rẹ jẹ atunse syntactically ati ṣiṣe laisi awọn aṣiṣe.
  • Awọn akopọ ati awọn eto iṣeto ni aṣiri ṣiṣẹ ati pe wọn tumọ ni deede.
  • Ise agbese rẹ le ni ifijišẹ ransogun ni awọsanma olupese ti o fẹ.
  • Ise agbese rẹ le ni ilọsiwaju ni aṣeyọri lati ipo ibẹrẹ si awọn ipinlẹ N miiran.
  • Ise agbese rẹ le ni aṣeyọri ni aṣeyọri ati yọkuro lati ọdọ olupese awọsanma rẹ.

Gẹgẹbi a ti rii laipẹ, ilana yii tun le ṣee lo lati ṣe afọwọsi akoko ṣiṣe.

Simple Integration igbeyewo

Lati wo eyi ni iṣe, a yoo wo ibi ipamọ naa pulumi/examples, bi ẹgbẹ wa ati agbegbe Pulumi ṣe nlo lati ṣe idanwo awọn ibeere fifa tiwa, awọn iṣẹ, ati awọn ile-iṣẹ alẹ.

Ni isalẹ jẹ idanwo ti o rọrun ti wa apẹẹrẹ ti o pese garawa S3 ati diẹ ninu awọn ohun miiran:

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

Idanwo yii lọ nipasẹ igbesi aye ipilẹ ti ṣiṣẹda, iyipada, ati iparun akopọ fun folda kan aws-js-s3-folder. Yoo gba to bii iṣẹju kan lati jabo idanwo ti o ti kọja:

$ go test .
PASS
ok      ... 43.993s

Awọn aṣayan pupọ lo wa lati ṣe akanṣe ihuwasi ti awọn idanwo wọnyi. Wo ni kikun akojọ ti awọn aṣayan. ninu awọn be ProgramTestOptions. Fun apẹẹrẹ, o le tunto aaye ipari Jaeger lati wa kakiri (Tracing), fihan pe o nireti pe idanwo naa yoo kuna ti idanwo ba jẹ odi (ExpectFailure), lo lẹsẹsẹ “awọn atunṣe” si eto naa fun iyipada lẹsẹsẹ ti awọn ipinlẹ (EditDirs) ati pupọ diẹ sii. Jẹ ki a wo bii o ṣe le lo wọn lati ṣe idanwo imuṣiṣẹ ohun elo rẹ.

Ṣiṣayẹwo awọn ohun-ini orisun

Ijọpọ ti a sọ loke ni idaniloju pe eto wa "ṣiṣẹ" - ko ni jamba. Ṣugbọn kini ti a ba fẹ ṣayẹwo awọn ohun-ini ti akopọ abajade? Fun apẹẹrẹ, pe awọn iru awọn orisun kan ti (tabi ko) ti pese ati pe wọn ni awọn abuda kan.

Apaadi ExtraRuntimeValidation fun ProgramTestOptions gba wa laaye lati wo ipo ifiweranṣẹ lẹhin igbasilẹ nipasẹ Pulumi ki a le ṣe awọn sọwedowo afikun. Eyi pẹlu aworan pipe ti ipo akopọ abajade, pẹlu iṣeto ni, awọn iye iṣelọpọ ti okeere, gbogbo awọn orisun ati awọn iye ohun-ini wọn, ati gbogbo awọn igbẹkẹle laarin awọn orisun.

Lati wo apẹẹrẹ ipilẹ ti eyi, jẹ ki a ṣayẹwo pe eto wa ṣẹda ọkan S3 garawa:

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

Bayi, nigba ti a ba ṣiṣe idanwo lọ, kii yoo lọ nipasẹ batiri kan ti awọn idanwo igbesi aye, ṣugbọn tun, lẹhin ti o ti ṣaṣeyọri akopọ naa, yoo ṣe ayẹwo afikun lori ipo abajade.

Awọn idanwo akoko ṣiṣe

Nitorinaa, gbogbo awọn idanwo ti jẹ nipa ihuwasi imuṣiṣẹ ati awoṣe orisun orisun Pulumi. Kini ti o ba fẹ rii daju pe awọn amayederun ipese rẹ n ṣiṣẹ gangan? Fun apẹẹrẹ, pe ẹrọ foju n ṣiṣẹ, garawa S3 ni ohun ti a nireti, ati bẹbẹ lọ.

O le ti sọ tẹlẹ bi o ṣe le ṣe eyi: aṣayan ExtraRuntimeValidation fun ProgramTestOptions - Eyi jẹ anfani nla fun eyi. Ni aaye yii, o nṣiṣẹ idanwo Go aṣa pẹlu iraye si ipo kikun ti awọn orisun eto rẹ. Ipinle yii pẹlu alaye gẹgẹbi awọn adiresi IP ẹrọ foju, Awọn URL, ati ohun gbogbo ti o nilo lati ṣe ajọṣepọ pẹlu awọn ohun elo awọsanma ti o yọrisi ati awọn amayederun.

Fun apẹẹrẹ, eto idanwo wa okeere ohun-ini naa webEndpoint garawa ti a npe ni websiteUrl, eyiti o jẹ URL ni kikun nibiti a ti le tunto index document. Botilẹjẹpe a le ma wà sinu faili ipinlẹ lati wa bucket ati ka ohun-ini yẹn taara, ṣugbọn ni ọpọlọpọ awọn ọran wa awọn akopọ okeere awọn ohun-ini to wulo bii eyi ti a rii pe o rọrun lati lo fun ṣayẹwo:

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

Gẹgẹbi awọn sọwedowo akoko ṣiṣe iṣaaju wa, ṣayẹwo yii yoo ṣee ṣe lẹsẹkẹsẹ lẹhin igbega akopọ, gbogbo ni idahun si ipe ti o rọrun go test. Ati pe iyẹn nikan ni sample ti yinyin — gbogbo ẹya idanwo Go ti o le kọ ni koodu wa.

Itẹsiwaju Infrastructure Integration

O dara lati ni anfani lati ṣiṣe awọn idanwo lori kọǹpútà alágbèéká kan nigbati ọpọlọpọ awọn ayipada amayederun n ṣe lati ṣe idanwo wọn ṣaaju fifiranṣẹ wọn fun atunyẹwo koodu. Ṣugbọn awa ati ọpọlọpọ awọn alabara wa ṣe idanwo awọn amayederun ni ọpọlọpọ awọn ipele ti igbesi aye idagbasoke:

  • Ninu gbogbo ibeere fifa ṣiṣi fun idanwo ṣaaju ki o to dapọ.
  • Ni idahun si ifaramọ kọọkan, lati ṣayẹwo lẹẹmeji pe a ṣe idapọpọ ni deede.
  • Lẹẹkọọkan, gẹgẹbi ni alẹ tabi osẹ-sẹsẹ fun awọn idanwo afikun.
  • Gẹgẹbi apakan ti iṣẹ ṣiṣe tabi idanwo wahala, eyiti o nṣiṣẹ ni igbagbogbo fun igba pipẹ ati ṣiṣe awọn idanwo ni afiwe ati/tabi mu eto kanna ṣiṣẹ ni ọpọlọpọ igba.

Fun ọkọọkan iwọnyi, Pulumi ṣe atilẹyin isọpọ pẹlu eto isọpọ igbagbogbo ayanfẹ rẹ. Pẹlu iṣọpọ lemọlemọfún, eyi fun ọ ni agbegbe idanwo kanna fun awọn amayederun rẹ bi fun sọfitiwia ohun elo rẹ.

Pulumi ni atilẹyin fun awọn ọna ṣiṣe CI ti o wọpọ. Eyi ni diẹ ninu wọn:

Fun alaye diẹ sii, jọwọ tọka si iwe-ipamọ fun Ilọsiwaju Ilọsiwaju.

Ephemeral Ayika

Anfani ti o lagbara pupọ ti o ṣii ni agbara lati ran awọn agbegbe ephemeral nikan fun awọn idi idanwo gbigba. Erongba ise agbese ati awọn akopọ Pulumi jẹ apẹrẹ lati mu ni irọrun ati wó lulẹ patapata ti o ya sọtọ ati awọn agbegbe ominira, gbogbo rẹ ni awọn aṣẹ CLI ti o rọrun diẹ tabi lilo ilana idanwo isọpọ kan.

Ti o ba lo GitHub, lẹhinna Pulumi nfunni Ohun elo GitHub, eyi ti yoo ṣe iranlọwọ fun ọ lati sopọ idanwo gbigba lati fa awọn ibeere laarin opo gigun ti CI rẹ. Kan fi ohun elo sori ẹrọ ni ibi ipamọ GitHub, ati Pulumi yoo ṣafikun alaye nipa awọn awotẹlẹ amayederun, awọn imudojuiwọn ati awọn abajade idanwo si CI ati awọn ibeere adagun-omi:

Idanwo Awọn amayederun bi koodu pẹlu Pulumi. Apa 2

Nigbati o ba lo Pulumi fun awọn idanwo gbigba akọkọ rẹ, iwọ yoo ni awọn agbara adaṣe adaṣe tuntun ti yoo mu iṣelọpọ ẹgbẹ dara ati fun ọ ni igboya ninu didara awọn ayipada rẹ.

Abajade

Ninu àpilẹkọ yii, a ti rii pe nipa lilo awọn ede siseto idi gbogbogbo, ọpọlọpọ awọn imọ-ẹrọ idagbasoke sọfitiwia di wa fun wa ti o wulo ni idagbasoke awọn ohun elo wa. Wọn pẹlu idanwo ẹyọkan, idanwo isọpọ, ati bii wọn ṣe n ṣiṣẹ papọ lati ṣe idanwo akoko asiko to lọpọlọpọ. Awọn idanwo jẹ rọrun lati ṣiṣe lori ibeere tabi ninu eto CI rẹ.

Pulumi - sọfitiwia orisun ṣiṣi, ọfẹ lati lo ati ṣiṣẹ pẹlu awọn ede siseto ayanfẹ rẹ ati awọn awọsanma - gbiyanju loni!

Apa akọkọ

orisun: www.habr.com

Fi ọrọìwòye kun