tijdens het werken aan een project met behulp van de Operator-sdk vond ik dat test coverage vrij laag was. De reden was dat van veel gegenereerde deepcopy-bestanden in de repo te wijten aan de Operator-sdk.

eerst gebruik ik de volgende repo om kleuren toe te voegen aan mijn tests voor leesbaarheid

go get -u github.com/rakyll/gotest

kleurtesten
ik test de Pkg-map die ik heb getest met het volgende commando

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

dit voert de test uit en voert de testdekking uit naar een bestanddekking.u kunt de dekking lokaal controleren met behulp van de html-vlag

go tool cover -html=coverage.out


of u kunt de func-vlag gebruiken die u het percentage van de dekking van de functies in de cli geeft

go tool cover -func=coverage.out

het verfijnen van de dekking

omdat ik nooit van plan was om de gegenereerde bestanden te testen besloot ik om te zien of ik ze uit ons codeverslag kon verwijderen. In eerste instantie keek ik naar de go test-run vlag in het volgende formaat.

gotest ./packagedirectory -run=testname

ik vond dat het te veel onderhoud zou hebben om bij te werken. Ik probeerde het te gebruiken met regex om te proberen en druk op alle testen, maar vond dat met een hebzuchtige regex expressie als -run=^Test.+ ik zou alle testen, maar ook alle bestanden te raken, dus ik was terug waar ik begon.

omdat in de volgende map pkg / API ‘ s de gegenereerde deepcopy-bestanden zich bevonden. Ik verplaatste de bestanden die ik testte naar een van pkg / API ‘ s naar een subpakket genaamd types en filterde mijn tests door directory in plaats daarvan. Dus mijn testcommando zag eruit als

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

dit voert de tests uit in de bovenstaande mappen en werkt de dekking bij.uit met alleen de bestanden in deze map. Dit verhoogde mijn totale dekking met ongeveer 14%

CI / CD en overalls

we gebruikten Travis voor CI / CD en setup overalls met de volgende configuratie in .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

voor meer informatie over het opzetten van -repotoken=$COVERALLS_TOKEN
zie de goveralls repo https://github.com/mattn/goveralls en https://docs.coveralls.io/go

met deze setup kunnen we dan onze dekking controleren als onderdeel van het PR , dit vervangt geen schrijftests maar elimineert gegenereerde bestanden uit het verslag van de dekking.

Myblog

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.