2016-01-17 4 views
0

У меня есть веб-сервисы (REST Api), для которых у нас есть модульный тест, и для которого работает обложка.golang генерировать код покрытия функционального теста

Теперь у нас есть тестовый набор, написанный на питоне, который запускает экземпляр сервера, запускает тест, останавливает сервер.

Я хотел бы знать, есть ли какие-то инструменты, которые позволили бы мне запускать мой двоичный файл с определенным флагом, чтобы в конце он печатал охват тестов, выполненных моим тестированием «черного ящика»?

Спасибо.

ответ

1

Основываясь на this post вот что я сделал:

  1. создал main_test.go с этим содержанием:

    package main 
    
    // code based on technique explained here: 
    // https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests 
    // you can look there if you want to see how not to execute this test 
    // when running unit test etc. 
    
    // This file is mandatory as otherwise the packetbeat.test binary is not generated correctly. 
    
    import (
        "testing" 
    ) 
    
    // Test started when the test binary is started. Only calls main. 
    func TestSystem(t *testing.T) { 
        main() 
    } 
    
  2. , как это было веб-службы (и, следовательно, в бесконечном цикле), я нужен способ изящно выйти на SIGTERM (без его расчленения), поэтому я использовал пакет go get gopkg.in/tylerb/graceful.v1 и заменил (использую go-restful) в main.go на линии

    -  log.Fatal(http.ListenAndServe(":"+port, nil)) 
        +  graceful.Run(":"+port, 10*time.Second, nil) 
    
  3. , то я бы запустить тест, как этот

    • go test -c -covermode=count -coverpkg ./... -o foo.test
    • ./foo.test -test.coverprofile coverage.cov & echo $! > /tmp/test.pid
    • запустить мой тестовый набор
    • kill "$(cat /tmp/test.pid)"
0

Возможно, вы не хотите этого делать. Запуск кода с охватом, обнаружением гонки и/или другими инструментами увеличивает двоичный размер и делает его намного медленнее. Запуск и детектора гонки, и покрытия кода в 25 раз медленнее на моем компьютере.

Просто используйте go test -cover -race для тестирования и go build при развертывании. Это даст вам результат, который вы хотите, хотя и не так, как вы этого хотели.

+1

тот факт, что это медленно/большой ger вовсе не проблема, как сказано, это всего лишь время, когда запускается автоматизированный функциональный тест, тесты интеграции/от конца до конца выполняются с нормальной сборкой, а 'go test' запускает тест только в go, а не сам бинар? –

Смежные вопросы