under arbetet med ett projekt med operatören-sdk fann jag att Test täckning var ganska låg. Anledningen var att många genererade deepcopy-filer i repo på grund av operatören-sdk.
först använder jag följande repo för att lägga till färger i mina test för läsbarhet
go get -u github.com/rakyll/gotest
jag testar Pkg-katalogen som jag testade med följande kommando
gotest -v -covermode=count -coverprofile=coverage.out ./pkg/...
detta kör testet och matar ut testtäckningen till en filtäckning.ut kan du kontrollera täckningen lokalt med hjälp av html-flaggan
go tool cover -html=coverage.out
eller så kan du använda func-flaggan som ger dig funktionerna procentuell täckning i cli
go tool cover -func=coverage.out
förfina täckningen
eftersom jag aldrig skulle testa de genererade filerna bestämde jag mig för att se om jag kunde ta bort dem från vår kodtäckningsrapport. Först tittade jag på go test-run-flaggan i följande format.
gotest ./packagedirectory -run=testname
jag tyckte att det skulle ha för mycket underhåll för att uppdatera. Jag försökte använda den med regex för att försöka slå alla test men fann att med ett girigt regex-uttryck som -run=^Test.+
skulle jag slå alla test men också alla filer så jag var tillbaka där jag började.
som följande katalog var pkg/API: er där de genererade deepcopy-filerna fanns. Jag flyttade filerna som jag testade till en från pkg / API: er till ett underpaket som heter typer och filtrerade mina test efter katalog istället. Så mitt testkommando såg ut
gotest -v -covermode=count -coverprofile=coverage.out ./pkg/controller/... ./pkg/providers/... ./pkg/resources/... ./pkg/apis/integreatly/v1alpha1/types/...
detta kör testerna i katalogerna ovan och uppdaterar täckningen.ut med endast filerna i den här katalogen. Detta ökade min totala täckning med cirka 14%
CI/CD och overaller
vi använde Travis för CI/CD och setup overaller med följande konfiguration 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
för mer information om hur du ställer in -repotoken=$COVERALLS_TOKEN
se goveralls repo https://github.com/mattn/goveralls och https://docs.coveralls.io/go
med denna inställning kan vi sedan kontrollera vår täckning som en del av PR , detta ersätter inte skrivprov men eliminerar genererade filer från täckningsrapporten.
Myblog