使用 golang prometheus testutil 进行单元测试

Vir*_*ths 8 unit-testing go prometheus

我们可以断言指标是使用testutil.CollectAndCount等注册和收集的testutil.CollectAndCompare。但是有没有办法通过指标名称和标签来收集指标(如果是)CounterVec

供参考 https://godoc.org/github.com/prometheus/client_golang/prometheus/testutil

kat*_*hen 13

据我了解您的问题,您想要使用 CounterVec 等指标集合中的特定标签来测试指标的值。

ToFloat64您可以通过将该函数与该函数结合使用来实现此目的WithLabelsValue,如下例所示:

import (
    "testing"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/testutil"
    "github.com/stretchr/testify/assert"
)

func TestVecMetricT(t *testing.T) {
    assert := assert.New(t)

    var C = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "C",
        Help: "Help",
    }, []string{"subname"},
    )

    prometheus.MustRegister(C)

    C.WithLabelValues("firstLabel").Inc()
    C.WithLabelValues("secondLabel").Inc()
    C.WithLabelValues("thirdLabel").Inc()
    C.WithLabelValues("thirdLabel").Inc()

    // collected three metrics
    assert.Equal(3, testutil.CollectAndCount(C))
    // check the expected values using the ToFloat64 function
    assert.Equal(float64(1), testutil.ToFloat64(C.WithLabelValues("firstLabel")))
    assert.Equal(float64(1), testutil.ToFloat64(C.WithLabelValues("secondLabel")))
    assert.Equal(float64(2), testutil.ToFloat64(C.WithLabelValues("thirdLabel")))
}
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但我认为没有办法使用该testutil包从像 CounterVec 这样的度量集合中获取标签值的切片。