【问题标题】:Reset CollectorRegistry of Prometheus lib after each unit test每次单元测试后重置 Prometheus lib 的 CollectorRegistry
【发布时间】:2019-07-18 13:43:35
【问题描述】:

我有一个 A 类,它在其 init

中初始化一个 Counter
from prometheus_client import Counter
class A:
    def __init__(self):
        self.my_counter = Counter('an_awesome_counter')
    def method_1(self):
        return 1
    def method_2(self):
        return 2

然后我写测试类:

import unittest
import A

class ATests(unittest.TestCase):
    def setUp(self):
        self.a = A()
    def tearDown(self):
        self.a = None
    def method_1_test(self):
        ....
    def method_2_test(self):
        ....

问题是,如果我单独运行测试,它们就很好。然而,当我一起运行它们(运行整个 ATests 类)时,出现以下错误:

ValueError:CollectorRegistry 中的时间序列重复: {'an_awesome_counter'}

因此,每次测试运行后似乎都没有重置 python 环境。我检查了 CollectorRegistry 并且有一种取消注册收集器的方法,但这样做似乎有点难看。

我想知道是否有其他方法可以解决这个问题?例如,每次都强制测试在新环境下运行..

谢谢。

【问题讨论】:

标签: python unit-testing prometheus


【解决方案1】:

目前,我将 a = A() 移出 setup(self) 并将其转换为类变量作为解决方案

【讨论】:

  • 通常指标应该是模块级变量,以避免此类问题。
  • 您能否编辑您的问题以添加有效的最终代码?
猜你喜欢
  • 2012-11-26
  • 1970-01-01
  • 2019-10-21
  • 2014-05-04
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多