from kafka import KafkaProducer, errors, admin, KafkaConsumer
SERVERS = ['localhost:9092']
TEST_TOPIC = 'test-topic'
DATA = [{'A':'A'}, {'A':'A'}, {'A':'A'}]
class TestKafkaConsumer(unittest.TestCase):
@classmethod
def setUpClass(self):
self._producer = KafkaProducer(bootstrap_servers=SERVERS, value_serializer=lambda x:dumps(x).encode('utf-8'))
def _send_data(self):
for data in DATA:
print(self._producer.send(TEST_TOPIC, value=data))
def test_basic_processing(self):
self._send_data()
received = []
consumer = KafkaConsumer(TEST_TOPIC, bootstrap_servers=SERVERS)
for msg in consumer:
message = json.loads(msg.value.decode('utf-8'))
received.append(message)
if (len(received) >= len(DATA)):
self.assertEqual(received, DATA)
这应该很快就会成功,因为它只是以非常简单的方式将数据发送到Kafka代理。但是,它超时了。消费者永远不会阅读任何一条消息。如果我将使用者部分移到另一个文件并在另一个终端窗口中运行,则消息将立即被“消耗”。为什么单元测试在此单元测试中对消费者不起作用?
答案 0 :(得分:0)
您正在与制作人一起制作记录,然后阅读,这可能是您的问题。 启动消费者时,您已经产生了记录,因此,从消费者的角度来看,没有新消息。 在生产者开始生产之前,应该在其他线程中运行消费者。
Yannick