Покрытие Go для нескольких пакетов и значок покрытия Gitlab

Я пытаюсь отобразить точный значок покрытия для моего проекта gitlab.

Дело в том, что у меня несколько пакетов, в gitlab-ci.yml я запускаю

go test $(go list ./... | grep -v /vendor/) -v -coverprofile .testCoverage.txt

и мой результат выглядит примерно так:

$ go test -coverprofile=coverage.txt -covermode=atomic ./...
 ok     gitlab.com/[MASKED]/pam 10.333s coverage: 17.2% of statements
 ok     gitlab.com/[MASKED]/pam/acquisition 0.004s  coverage: 57.7% of statements
 ok     gitlab.com/[MASKED]/pam/acquisition/api 0.005s  coverage: 72.1% of statements
 ok     gitlab.com/[MASKED]/pam/acquisition/ftp 24.936s coverage: 73.1% of statements
 ok     gitlab.com/[MASKED]/pam/repartition 0.004s  coverage: 90.1% of statements

И мое регулярное выражение разбора тестового покрытия в Gitlab:

^coverage:\s(\d+(?:\.\d+)?%)

Если я проверю .testCoverage, я получаю много таких строк:

 gitlab.com/[MASKED]/pam/repartition/repartition.go:54.33,56.5 1 1

Итак, это дает мне результат 90.1%, когда это только покрытие последнего пакета.

Как я должен это делать ?

См. также:  Внешний ключ Gorm Many-to-one только для одной модели
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Juliatzin

    Согласно этому ответу,

    Мне просто нужна была другая команда:

    go tool cover -func profile.cov
    

    Это даст вам результат:

    ✗ go tool cover -func profile.cov
    
    gitlab.com/[MASKED]/pam/acquisition/acquisition.go:17:                       FetchAll                        0.0%
    gitlab.com/[MASKED]/pam/acquisition/acquisition.go:32:                       TransformData                   100.0%
    gitlab.com/[MASKED]/pam/acquisition/acquisition_mocks.go:13:                 FetchMeters                     0.0%
    gitlab.com/[MASKED]/pam/repartition/repartition.go:102:                      GroupMetersByOperation          100.0%
    gitlab.com/[MASKED]/pam/repartition/repartition.go:111:                      SetProrataRedistributed         71.4%
    total:                                                                          (statements)                    68.7%
    

    В gitlab вы можете изменить регулярное выражение:

    ^coverage:\s(\d+(?:\.\d+)?%)
    

    By

    \(statements\)(?:\s+)?(\d+(?:\.\d+)?%)
    

    Теперь, если у вас есть макеты, покрытие будет включать их, поэтому вы должны удалить их, выполнив следующие действия: ответ:

    go test . -coverprofile profile.cov.tmp
    cat profile.cov.tmp | grep -v "_mocks.go" > cover.out
    tool cover -func profile.cov
    

    Конечно, все ваши макеты должны быть в файлах с суффиксом: _mocks.go

    И это должно работать.

    Надеюсь, это поможет другим!

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: