Mientras trabajaba en un proyecto utilizando el sdk de operador, descubrí que la cobertura de prueba era bastante baja. La razón fue la de muchos archivos de copia profunda generados en el repositorio debido al sdk del Operador.

Primero estoy usando el siguiente repositorio para agregar colores a mis pruebas de legibilidad

go get -u github.com/rakyll/gotest

pruebas de color
Pruebo el directorio pkg que probé con el comando follow

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

Esto ejecuta la prueba y envía la cobertura de prueba a una cobertura de archivo.puedes comprobar la cobertura localmente usando la bandera html

go tool cover -html=coverage.out


O puede usar la bandera func que le da la cobertura porcentual de funciones en la cli

go tool cover -func=coverage.out

Refinando la cobertura

Como nunca iba a probar los archivos generados, decidí ver si podía eliminarlos de nuestro informe de cobertura de código. Al principio miré la bandera de prueba de go en el siguiente formato.

gotest ./packagedirectory -run=testname

me pareció tendría demasiado mantenimiento para actualizar. Traté de usarlo con expresiones regulares para intentar golpear todas las pruebas, pero descubrí que con una expresión de expresiones regulares codiciosas como -run=^Test.+ golpearía todas las pruebas, pero también todos los archivos, así que volví a donde empecé.

Ya que el siguiente directorio pkg / apis era donde se encontraban los archivos de copia profunda generados. Moví los archivos que estaba probando a un de pkg / apis a un subpaquete llamado tipos y filtré mis pruebas por directorio en su lugar. Así que mi comando de prueba parecía

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

Esto ejecuta las pruebas en los directorios enumerados anteriormente y actualiza la cobertura.solo con los archivos de este directorio. Esto aumentó mi cobertura general en aproximadamente un 14%

CI / CD y monos

Estábamos usando Travis para CI / CD y monos de configuración con la siguiente configuración en .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

Para obtener más información sobre la configuración de -repotoken=$COVERALLS_TOKEN
, consulte el repositorio goveralls https://github.com/mattn/goveralls y https://docs.coveralls.io/go

Con esta configuración , podemos verificar nuestra cobertura como parte del PR, esto no reemplaza las pruebas de escritura, pero elimina los archivos generados del informe de cobertura.

Myblog

Deja una respuesta

Tu dirección de correo electrónico no será publicada.