连接到服务总线队列的集成测试Azure功能应用程序

问题描述 投票:0回答:1

我已经开发了一个功能应用程序,该应用程序由Http请求触发,并在服务总线上窥视相应队列(通过连接字符串连接至该队列)以查找具有特定参数值的消息,然后删除它们。

除了在开发时进行常规测试之外,创建集成测试并在CI / CD流程中运行它们也很棒,但是我不知道如何模拟功能应用程序也连接的队列(创建测试队列(仅用于测试目的的)位于服务总线上的选项不是一种选择)。有谁知道如何进行吗?

这是我的代码段:

{
  ...

  log.LogInformation($"Scenario: Recieved request to delete scheduled message with parameter: {parameter_value}");


  messageReceiver = new MessageReceiver(ServiceBusConnectionString, queue_name, ReceiveMode.PeekLock);
  bool found = false;

  IList<Message> messages = await messageReceiver.PeekAsync(100);

  foreach (Message message in messages){
          string messageBody = Encoding.UTF8.GetString(message.Body);
          var jsonMessageBody = JsonConvert.DeserializeObject<ScheduledMessage>(messageBody);

          if (jsonMessageBody.parameter_value.Equals(flow_id)){
             deleteMessage(message);
             found = true;
             log.LogInformation($"Scenario: Message with parameter_value: {parameter_value} and body: {messageBody} have been removed from the queue {queue_name}.");
          }
  }

  ...
}


private async static void deleteMessage(Message message){
   QueueClient queueClient = new QueueClient(ServiceBusConnectionString, queue_name);
   await queueClient.CancelScheduledMessageAsync(message.SystemProperties.SequenceNumber);
}
azure queue azure-functions azureservicebus azure-function-app
1个回答
0
投票
其中一种选择是在执行集成测试套件之前,在开始时提供一个临时的Azure Service Bus命名空间,然后在结束时将其拆除。该名称空间将是一个标准的层名称空间。可以使用ARM模板,PowerShell或Azure CLI进行配置和拆除。

此方法的另一个好处是安全性。如果您的存储库是公共的,则每个测试套件运行的名称空间将确保可以安全地执行来自外部贡献者的PR。

© www.soinside.com 2019 - 2024. All rights reserved.