如何在python中使用RabbitMQ进行简单的单元测试?

如何在python中使用RabbitMQ进行简单的单元测试?,rabbitmq,pika,Rabbitmq,Pika,在我的单元测试中,我只想开始消费,发布一条消息,然后接收一个响应,并断言该响应是否是我所期望的。然而,我已经尝试了好几个小时,却没有找到解决办法 问题是我不能在类中定义一个方法来停止消费。我尝试过定义这样的方法: def stop(self): self.channel.basic_cancel() 但似乎什么都不管用。我了解到这是因为一旦执行start\u consuming(),停止消费的唯一方法就是在发送消息后取消消费。但是如果我这样做,那么我将根据请求修改原始的,这对我的应用程

在我的单元测试中,我只想开始消费,发布一条消息,然后接收一个响应,并断言该响应是否是我所期望的。然而,我已经尝试了好几个小时,却没有找到解决办法

问题是我不能在类中定义一个方法来停止消费。我尝试过定义这样的方法:

def stop(self):
    self.channel.basic_cancel()
但似乎什么都不管用。我了解到这是因为一旦执行
start\u consuming()
,停止消费的唯一方法就是在发送消息后取消消费。但是如果我这样做,那么我将根据请求修改原始的
,这对我的应用程序没有用处,因为连接将在第一条消息之后关闭。我已经找到了,但是文档对我来说不清楚,因此不知道我是否可以使用这个插件来实现我想要的


顺便问一下,
basic\u cancel
stop\u consumming
close
之间有什么区别?

我对您的情况不太清楚!。据我所知,您可以使用相同的方法创建连接和通道,以便在需要时发布、使用、断言和停止使用

希望这有帮助

def test_rabbitmq():
    from pika import BlockingConnection, ConnectionParameters, PlainCredentials

    conn = BlockingConnection(ConnectionParameters(host='host', virtual_host='vhost', credentials=PlainCredentials('username', 'password')))
    channel = conn.channel()

    # define your consumer
    def on_message(channel, method_frame, header_frame, body):
        message = body.decode()
        # assert your message here
        # asset message == 'value'
        channel.basic_cancel('test-consumer')  # stops the consumer

    # define your publisher
    def publish_message(message):
        channel.basic_publish(exchange='', routing_key='', body=message')

    publish('your message')
    tag = channel.basic_consume(queue='queue', on_message_callback=on_message, consumer_tag='test-consumer')
停止消费
-取消所有消费者,发出启动消费循环退出的信号

basic\u cancel
-此方法取消消费者。消费者标签将作为输入

关闭
-关闭连接/通道


@Peter如果你有这样的印象,我很抱歉,但是StackOverflow说,评论中不应该堆满“谢谢”,而是应该接受正确的答案,因为正确的答案才是正确的。并不是我不礼貌,而是StackOverflow说我不礼貌。然而,当我可以的时候,我会说谢谢你+一些实质性的东西。关于帮助他人,我很乐意,但我不知道你必须回答99.9%的问题。我有自己的YouTube频道和Discord服务器,在那里我尽可能地帮助人们进行编程。对不起,太“普通”了。
def stop(self):
    self.connection.close()
def test_rabbitmq():
    from pika import BlockingConnection, ConnectionParameters, PlainCredentials

    conn = BlockingConnection(ConnectionParameters(host='host', virtual_host='vhost', credentials=PlainCredentials('username', 'password')))
    channel = conn.channel()

    # define your consumer
    def on_message(channel, method_frame, header_frame, body):
        message = body.decode()
        # assert your message here
        # asset message == 'value'
        channel.basic_cancel('test-consumer')  # stops the consumer

    # define your publisher
    def publish_message(message):
        channel.basic_publish(exchange='', routing_key='', body=message')

    publish('your message')
    tag = channel.basic_consume(queue='queue', on_message_callback=on_message, consumer_tag='test-consumer')