4.6.7. 使用测试事件调用部署的功能

您可以使用 kn func invoke CLI 命令发送测试请求,在本地或 OpenShift Container Platform 集群中调用功能。您可以使用此命令测试功能是否正常工作并且能够正确接收事件。本地调用函数可用于在功能开发期间进行快速测试。在测试与生产环境更接近的测试时,在集群中调用函数非常有用。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您必须已部署了要调用的功能。

流程

  • 调用函数:

    $ kn func invoke
    • kn func invoke 命令仅在当前运行本地容器镜像时或在集群中部署功能时才有效。
    • kn func invoke 命令默认在本地目录上执行,并假定此目录是一个功能项目。

4.6.7.1. kn func 调用可选参数

您可以使用以下 kn func invoke CL 命令标记为请求指定可选参数。

标记描述

-t,--target

指定调用函数的目标实例,如 localremotehttps://staging.example.com/。默认目标是 local

-f,--format

指定消息的格式,如 cloudeventhttp

--id

指定请求的唯一字符串标识符。

-n,--namespace

指定集群上的命名空间。

--source

指定请求的发件人名称。这与 CloudEvent source 属性对应。

--type

指定请求类型,例如 boson.fn。这与 CloudEvent type 属性对应。

--data

指定请求的内容。对于 CloudEvent 请求,这是 CloudEvent data 属性。

--file

指定包含要发送数据的本地文件的路径。

--content-type

指定请求的 MIME 内容类型。

-p,--path

指定项目目录的路径。

-c,--confirm

启用系统提示,以交互方式确认所有选项。

-v,--verbose

启用打印详细输出。

-h,--help

输出有关使用 kn func invoke 的信息。

4.6.7.1.1. 主要参数

以下参数定义 kn func invoke 命令的主要属性:

事件目标 (-t,--target)
调用函数的目标实例。接受 local 值用于本地部署的函数、remote 值用于远程部署函数,或一个 URL 用于一个任意的端点。如果没有指定目标,则默认为 local
事件消息格式 (-f,--format)
事件的消息格式,如 httpcloudevent。默认为创建函数时使用的模板格式。
事件类型 (--type)
发送的事件类型。您可以查找有关各个事件制作者文档中设置的 type 参数的信息。例如,API 服务器源可能会将生成的事件的 type 参数设置为 dev.knative.apiserver.resource.update
事件源 (--source)
生成该事件的唯一事件源。这可能是事件源的 URI,如 https://10.96.0.1/ 或事件源的名称。
事件 ID (--id)
由事件制作者创建的随机唯一 ID。
事件数据 (--data)

允许您为 kn func invoke 命令发送的事件指定 data 值。例如,您可以指定一个 --data 值,如 "Hello World",以便事件包含此数据字符串。默认情况下,kn func invoke 创建的事件中不包含任何数据。

注意

已部署到集群的功能可以对现有事件源的事件响应,该源提供属性(如 sourcetype)的值。这些事件通常具有 JSON 格式的 data 值,用于捕获事件的特定域上下文。通过使用本文档中介绍的 CLI 标志,开发人员可以模拟这些事件以进行本地测试。

您还可以使用 --file 标志发送事件数据,以提供包含事件数据的本地文件。在这种情况下,使用 --content-type 指定内容类型。

数据内容类型 (--content-type)
如果您使用 --data 标志为事件添加数据,您可以使用 --content-type 标志指定事件传输的数据类型。在上例中,数据是纯文本,因此您可以指定 kn func call --data "Hello world!" --content-type "text/plain "。
4.6.7.1.2. 示例命令

这是 kn func invoke 命令的一般调用:

$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>

例如,要发送 "Hello world!" 事件,您可以运行:

$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
4.6.7.1.2.1. 使用数据指定文件

要指定磁盘上包含事件数据的文件,请使用 --file--content-type 标志:

$ kn func invoke --file <path> --content-type <content-type>

例如,要发送存储在 test.json 文件中的 JSON 数据,请使用以下命令:

$ kn func invoke --file ./test.json --content-type application/json
4.6.7.1.2.2. 指定功能项目

您可以使用 --path 标志指定到功能项目的路径:

$ kn func invoke --path <path_to_function>

例如,要使用位于 ./example/example-function 目录中的功能项目,请使用以下命令:

$ kn func invoke --path ./example/example-function
4.6.7.1.2.3. 指定部署目标功能的位置

默认情况下,kn func invoke 作为功能本地部署的目标:

$ kn func invoke

要使用不同的部署,请使用 --target 标志:

$ kn func invoke --target <target>

例如,要使用在集群中部署的功能,请使用 --target remote 标志:

$ kn func invoke --target remote

要使用在任意 URL 中部署的功能,请使用 --target <URL> 标志:

$ kn func invoke --target "https://my-event-broker.example.com"

您可以明确以本地部署为目标。在这种情况下,如果这个功能没有在本地运行,命令会失败:

$ kn func invoke --target local