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 命令标记为请求指定可选参数。
标记 | 描述 |
---|---|
|
指定调用函数的目标实例,如 |
|
指定消息的格式,如 |
| 指定请求的唯一字符串标识符。 |
| 指定集群上的命名空间。 |
|
指定请求的发件人名称。这与 CloudEvent |
|
指定请求类型,例如 |
|
指定请求的内容。对于 CloudEvent 请求,这是 CloudEvent |
| 指定包含要发送数据的本地文件的路径。 |
| 指定请求的 MIME 内容类型。 |
| 指定项目目录的路径。 |
| 启用系统提示,以交互方式确认所有选项。 |
| 启用打印详细输出。 |
|
输出有关使用 |
4.6.7.1.1. 主要参数
以下参数定义 kn func invoke
命令的主要属性:
- 事件目标 (
-t
,--target
) -
调用函数的目标实例。接受
local
值用于本地部署的函数、remote
值用于远程部署函数,或一个 URL 用于一个任意的端点。如果没有指定目标,则默认为local
。 - 事件消息格式 (
-f
,--format
) -
事件的消息格式,如
http
或cloudevent
。默认为创建函数时使用的模板格式。 - 事件类型 (
--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
创建的事件中不包含任何数据。注意已部署到集群的功能可以对现有事件源的事件响应,该源提供属性(如
source
和type
)的值。这些事件通常具有 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