为什么我在Python中对Kafka进行单元测试不起作用?

时间:2019-07-17 19:28:19

标签: python python-3.x unit-testing apache-kafka python-unittest

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代理。但是,它超时了。消费者永远不会阅读任何一条消息。如果我将使用者部分移到另一个文件并在另一个终端窗口中运行,则消息将立即被“消耗”。为什么单元测试在此单元测试中对消费者不起作用?

1 个答案:

答案 0 :(得分:0)

您正在与制作人一起制作记录,然后阅读,这可能是您的问题。 启动消费者时,您已经产生了记录,因此,从消费者的角度来看,没有新消息。 在生产者开始生产之前,应该在其他线程中运行消费者。

Yannick