Mentre si lavora su un progetto utilizzando l’Operatore-sdk Ho scoperto che la copertura dei test era piuttosto bassa. Il motivo era quello di molti file deepcopy generati nel repository a causa dell’Operatore-sdk.

Prima sto usando la seguente repo da aggiungere colori per le mie prove per migliorare la leggibilità

go get -u github.com/rakyll/gotest

prove di colore
I test directory pkg che ho provato con il comando seguente

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

Questo viene eseguito il test e uscite il test di copertura a copertura dei file.puoi verificare la copertura locale utilizzando l’html bandiera

go tool cover -html=coverage.out


Oppure è possibile utilizzare la funzione di bandiera che darà le funzioni percentuale di copertura del cli

go tool cover -func=coverage.out

Raffinazione copertura

Come non sono mai stato andando a verificare i file generati ho deciso di vedere se riuscivo a rimuovere dal nostro codice di rapporto di copertura. All’inizio ho guardato il flag go test-run nel seguente formato.

gotest ./packagedirectory -run=testname

Ho trovato che avrebbe troppa manutenzione da aggiornare. Ho provato a usarlo con regex per provare a colpire tutti i test, ma ho scoperto che con un’espressione regex avida come -run=^Test.+ Avrei colpito tutti i test ma anche tutti i file, quindi ero tornato dove ho iniziato.

Come la seguente directory pkg/apis era dove si trovavano i file deepcopy generati. Ho spostato i file che stavo testando in un da pkg / api in un sotto pacchetto chiamato types e ho filtrato i miei test per directory. Quindi il mio comando di test sembrava

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

Questo esegue i test nelle directory sopra elencate e aggiorna la copertura.fuori con solo i file in questa directory. Ciò ha aumentato la mia copertura complessiva di circa il 14%

CI/CD e tute

Stavamo usando Travis per CI/CD e tute di installazione con la seguente configurazione 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

Per ulteriori informazioni sull’impostazione di -repotoken=$COVERALLS_TOKEN
Vedere il goveralls repo https://github.com/mattn/goveralls e https://docs.coveralls.io/go

Con questa configurazione si può quindi controllare la nostra copertura come parte del PR , Questo non sostituisce la scrittura di test ma di eliminare i file generati dal rapporto di copertura.

Myblog

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.