podczas pracy nad projektem przy użyciu operatora-sdk stwierdziłem, że pokrycie testowe było dość niskie. Powodem było to, że z wielu wygenerowanych plików deepcopy w repo ze względu na operatora-sdk.

najpierw używam następującego repo, aby dodać kolory do moich testów pod kątem czytelności

go get -u github.com/rakyll/gotest

testy kolorystyczne
testuję katalog pkg który testowałem poleceniem follow

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

spowoduje to uruchomienie testu i wyprowadzenie pokrycia testowego do pokrycia pliku.out możesz sprawdzić zasięg lokalnie za pomocą flagi html

go tool cover -html=coverage.out


możesz też użyć flagi func, która daje procentowe pokrycie funkcji w cli

go tool cover -func=coverage.out

udoskonalanie pokrycia

ponieważ nigdy nie zamierzałem testować wygenerowanych plików, postanowiłem sprawdzić, czy mogę je usunąć z naszego raportu pokrycia kodu. Na początku patrzyłem na flagę go test-run w następującym formacie.

gotest ./packagedirectory -run=testname

stwierdziłem, że będzie miał zbyt wiele konserwacji, aby zaktualizować. Próbowałem użyć go z wyrażeniem regularnym, aby spróbować trafić wszystkie testy, ale okazało się, że z chciwym wyrażeniem regularnym, takim jak -run=^Test.+, trafiłbym wszystkie testy, ale także wszystkie pliki, więc wróciłem tam, gdzie zacząłem.

jako następujący katalog pkg / API był miejscem, w którym znajdowały się wygenerowane pliki deepcopy. Przeniosłem pliki, które testowałem do a z pkg / API do podrzędnego pakietu o nazwie typy i zamiast tego filtrowałem moje testy według katalogu. Tak więc moje polecenie testowe wyglądało

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

to uruchamia testy w katalogach wymienionych powyżej i aktualizuje zasięg.się tylko z plikami w tym katalogu. To zwiększyło mój ogólny zasięg o około 14%

CI/CD i kombinezony

używaliśmy Travis do CI/CD i konfigurowaliśmy kombinezony z następującą konfiguracją w .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

aby uzyskać więcej informacji na temat konfiguracji -repotoken=$COVERALLS_TOKEN
Zobacz repo goveralls https://github.com/mattn/goverallsi https://docs.coveralls.io/go

Dzięki tej konfiguracji możemy sprawdzić nasze pokrycie w ramach PR , nie zastępuje to pisania testów, ale eliminuje wygenerowane pliki z raportu pokrycia.

Myblog

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.