每次单元测试后重置 Prometheus lib 的 CollectorRegistry

Xit*_*rum 7 python unit-testing prometheus

我有一个 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
Run Code Online (Sandbox Code Playgroud)

然后我编写测试类:

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):
        ....
Run Code Online (Sandbox Code Playgroud)

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

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

所以看来每次测试运行后 python 环境都不会重置。我检查了 CollectorRegistry,有一个方法可以取消注册收集器,但这样做似乎有点难看。

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

谢谢。

Xit*_*rum 1

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

  • 一般来说,指标应该是模块级变量,以避免此类问题。 (2认同)