mens du jobber Med et prosjekt ved Hjelp Av Operator-sdk, fant jeg at testdekningen var ganske lav. Årsaken var at mange genererte deepcopy-filer i repo på Grunn Av Operatøren-sdk.

Først bruker jeg følgende repo for å legge til farger i testene mine for lesbarhet

go get -u github.com/rakyll/gotest

fargetester
jeg tester pkg-katalogen som jeg testet med følg-kommandoen

gotest -v -covermode=count -coverprofile=coverage.out ./pkg/...

dette kjører testen og sender testdekningen til en fildekning.ut kan du sjekke dekningen lokalt ved hjelp av html-flagget

go tool cover -html=coverage.out


Eller du kan bruke func flagg som gir deg funksjonene prosent dekning i cli

go tool cover -func=coverage.out

Raffinering av dekningen

da jeg aldri skulle teste de genererte filene, bestemte jeg meg for å se om jeg kunne fjerne dem fra kodedekningsrapporten. Først så jeg på go test-run-flagget i følgende format.

gotest ./packagedirectory -run=testname

jeg fant det ville ha for mye vedlikehold å oppdatere. Jeg prøvde å bruke den med regex for å prøve å slå all test, men fant ut at med et grådig regex-uttrykk som -run=^Test.+ ville jeg slå all test, men også alle filer, så jeg var tilbake der jeg startet.

som følgende katalog var pkg/apier der de genererte deepcopy-filene ble plassert. Jeg flyttet filene jeg testet til en fra pkg / apier til en underpakke kalt typer og filtrerte testene mine etter katalog i stedet. Så min testkommando så ut som

gotest -v -covermode=count -coverprofile=coverage.out ./pkg/controller/... ./pkg/providers/... ./pkg/resources/... ./pkg/apis/integreatly/v1alpha1/types/...

dette kjører testene i katalogene ovenfor og oppdaterer dekningen.ut med bare filene i denne katalogen. Dette økte min samlede dekning med ca 14%

CI / CD og kjeledresser

Vi brukte Travis FOR CI / CD Og oppsett kjeledresser med følgende config i .travis.yml.

language: gosudo: requireddist: bionicgo: - 1.13.xenv: - GO111MODULE=onaddons: apt: update: true packages: - "python3" - "python3-pip" - "python3-setuptools"git: depth: 1stages: - name: test - name: push if: fork = false - name: manifest if: fork = false AND tag IS presentbefore_install: - go get github.com/mattn/goverallsjobs: include: - stage: test script: - go get github.com/mattn/goveralls - go get -u github.com/rakyll/gotest - gotest -v -covermode=count -coverprofile=coverage.out ./pkg/controller/... ./pkg/providers/... ./pkg/resources/... ./pkg/apis/integreatly/v1alpha1/types/... - $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken=$COVERALLS_TOKEN

For mer informasjon om å sette opp -repotoken=$COVERALLS_TOKEN
Se goveralls repo https://github.com/mattn/goverallsog https://docs.coveralls.io/go

Med dette oppsettet kan vi da sjekke vår dekning som en DEL AV PR, dette erstatter ikke skrivetester, Men eliminerer genererte filer fra dekningsrapporten.

Myblog

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.