under arbejdet med et projekt ved hjælp af operatøren-sdk fandt jeg, at testdækningen var ret lav. Årsagen var, at mange genererede deepcopy-filer i repoen på grund af operatøren-sdk.

først bruger jeg følgende repo til at tilføje farver til mine test for læsbarhed

go get -u github.com/rakyll/gotest

farvetest
jeg tester Pkg-mappen, som jeg testede med følgekommandoen

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

dette kører testen og udsender testdækningen til en fildækning.ud Du kan tjekke dækningen lokalt ved hjælp af html-flag

go tool cover -html=coverage.out


eller du kan bruge func-flag, som giver dig funktionerne procentvis dækning i cli

go tool cover -func=coverage.out

raffinering af dækningen

da jeg aldrig ville teste de genererede filer, besluttede jeg at se, om jeg kunne fjerne dem fra vores kodedækningsrapport. Først kiggede jeg på go test-run flag i følgende format.

gotest ./packagedirectory -run=testname

jeg fandt det ville have for meget vedligeholdelse til at opdatere. Jeg prøvede at bruge det med regeks for at prøve at ramme alle test, men fandt ud af, at med et grådigt regeks udtryk som -run=^Test.+ ville jeg ramme alle test, men også alle filer, så jeg var tilbage, hvor jeg startede.

da følgende mappe pkg/API ‘ er var, hvor de genererede deepcopy-filer var placeret. Jeg flyttede de filer, jeg testede til en fra pkg/API ‘ er til en underpakke kaldet typer og filtrerede mine tests efter mappe i stedet. Så min testkommando lignede

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

dette kører testene i de ovennævnte mapper og opdaterer dækningen.ud med kun filerne i denne mappe. Dette øgede min samlede dækning med omkring 14%

CI/CD og overalls

vi brugte Travis til CI/CD og setup overalls 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 mere information om opsætning -repotoken=$COVERALLS_TOKEN
se goveralls repo https://github.com/mattn/goverallsoghttps://docs.coveralls.io/go

med denne opsætning kan vi derefter kontrollere vores dækning som en del af PR , dette erstatter ikke skrivetest, men eliminerer genererede filer fra dækningsrapporten.

Myblog

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.