AzureFunctions:如何同步调用 QueueTrigger 函数以进行自动化功能测试

问题描述

让我介绍一下场景:

  1. 我需要使用队列触发器测试 AzureFunction:

    [FunctionName("AFunction")]
    public async Task dispatchAction([QueueTrigger("queuename")] string message)
    {
        await DoMyLogicAsync();
    }
    
  2. 测试需要由我的 docker-compose 测试环境中的“functional-test-container”运行,它由:

    a) 功能测试容器:运行 nUnit 测试套件的 .net 核心容器

    b) azure-function-container:这个容器承载azure 函数

    c) azurite-container:这个容器承载队列服务器

    d) sql-server-container

    e) 线模容器

测试逻辑如下:

  1. 清除sql数据库、队列和wiremock状态
  2. 准备线模型存根
  3. 以某种方式触发功能
  4. 等待函数结束
  5. sql server 中产生的函数、队列中的函数以及调用了哪些wiremock 的存根进行断言

据我所知,我有两种触发功能方法

a) 在队列中推送消息

b) 使用 azure 函数的管理 API /admin/functions/afunction

问题是它们都没有给出函数何时结束执行的任何提示

这是我的问题:有没有办法以“同步”方式调用函数(以便我知道执行何时结束)?

解决方法

我认为它无法实施。队列触发器函数作为一个实例在 azure 服务器中运行,我们可以直接触发它运行。它不响应任何数据,如 HttpTrigger 函数。所以无法在你的整个流程中同步执行。

为了解决您的问题,我认为您可以在函数末尾添加一些代码来执行操作。该操作用于让您知道函数执行完成。或者另一种解决方案是将函数之后的步骤移动到您的函数代码中。