def dae_mq_get_consumer(self, data_type: str, num: int): vin = self.get_robot_variable("GLOBAL", "VIN") env = self.get_robot_variable("GLOBAL", "项目名称") config = MQ_CONFIG[env] assert data_type in config['topics'], KeyError(f"validation of {data_type} is not supported!") if data_type in self.consumers: return self.consumers[data_type] else: consumer = DAEKafkaConsumer( vin=vin, servers=config.get('servers', None), cluster=config.get('cluster', str()), project=config.get('project', str()), ) consumer.subscribe(topic=config['topics'][data_type], num=num) self.consumers[data_type] = consumer # consumer.seek_to_offset(topic=config['topics'][data_type]) # consumer.seek_to('begin') return consumer 使用pytest 改写代码,fixture 传入项目和vin
时间: 2024-03-04 13:48:55 浏览: 63
好的,根据你的要求,这里是使用 pytest 改写的代码,并加入了一个 fixture 用于传入项目和 VIN:
```
import pytest
@pytest.fixture
def project_and_vin():
return ('项目名称', 'VIN')
def test_dae_mq_get_consumer(project_and_vin):
data_type = 'topic1'
num = 1
env, vin = project_and_vin
config = MQ_CONFIG[env]
assert data_type in config['topics'], KeyError(f"validation of {data_type} is not supported!")
consumer_instance = dae_mq_get_consumer(data_type, num, project=env, vin=vin)
assert isinstance(consumer_instance, DAEKafkaConsumer)
assert consumer_instance.subscription() == [config['topics'][data_type]]
consumer_instance2 = dae_mq_get_consumer(data_type, num, project=env, vin=vin)
assert consumer_instance is consumer_instance2
```
在这个测试代码中,我使用了一个名为 `project_and_vin` 的 fixture 来传入项目和 VIN。在 `test_dae_mq_get_consumer` 函数中,我首先获取到 `env` 和 `vin`,然后根据 `env` 获取到对应的配置信息,接着调用 `dae_mq_get_consumer` 函数来获取消费者实例,并进行了一些断言测试,比如判断是否为 `DAEKafkaConsumer` 的实例,以及是否成功订阅了对应的 topic 等等。最后,我还测试了获取同一数据类型的消费者实例是否一致,确保了代码的正确性。
阅读全文