2015-01-20 1 views
0

Я видел есть структура BenchmarkResult в Golang для Accesss результата в тесте, но я нашел очень мало док/примеры, чтобы помочь мне использовать его: http://golang.org/src/testing/benchmark.go?s=5790:6120#L212Доступ результата эталона в Golang

До сих пор я только был бенчмаркинг моих функций, как это:

func BenchmarkMyFunction(b *testing.B) { 
    // call to myFunction 
} 

и запуск:

go test -bench=".*" 

Здесь результат печатается на но я хотел бы сохранить их в отдельном файле. Как я могу использовать тип BenchmarkResult для этого?

Большое спасибо

+2

Просто перенаправить стандартный вывод в файл в вашей оболочке. – Volker

ответ

3

Например:

package main 

import (
    "fmt" 
    "testing" 
) 

func Add(a, b int) int { 
    return a + b 
} 

func BenchAdd(b *testing.B) { 
    _ = Add(1,2) 
} 

func main() { 
    res := testing.Benchmark(BenchAdd) 
    fmt.Printf("%[1]s\n%#[1]v\n", res) 
} 

производит:

2000000000 0,00 нс/оп
testing.BenchmarkResult {N: +2000000000, Т: 0, 0: Б , MemAllocs: 0x0, MemBytes: 0x0}

Playground

Вы можете легко записать эти результаты в файл, используя ioutil.WriteFile().

func WriteFile(filename string, data []byte, perm os.FileMode) error 

WriteFile записывает данные в файл с именем имя_файла. Если файл не существует, WriteFile создает его с разрешениями perm; иначе WriteFile усекает его перед записью.

Playground