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

färgtest
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

Lämna ett svar

Din e-postadress kommer inte publiceras.