通过测试模板生成命令,可以快速生成相关触发器的模拟事件结构。生成的模拟事件结构,可以直接在本地调试云函数,也可以将其导入到文件中并根据实际所需进行修改,实现您自定义的测试模板。
SCF CLI 通过 local generate-event
命令来生成测试模板。通过执行不同的子命令,可以生成指定触发器的模拟测试模板内容。
使用触发器及触发器内详细事件的命令格式为 scf local generate-event {trigger} {trigger-event}
。例如,模拟对象存储(COS)的 PUT 事件,命令为 scf local generate-event cos put
。
更多详细的触发器及事件见如下表格:
触发器 | 事件 | 说明 |
---|---|---|
apigateway | proxy | API 网关响应请求事件 |
ckafka | consume | Ckafka 消费消息事件 |
cmq | notification | CMQ Topic 消息事件 |
cos | post/put/delete | 对象存储的 POST、PUT、DELETE 事件 |
timer | timeup | 定时触发器事件 |
生成测试模板的命令,会直接在终端输出测试模板的 JSON 内容。示例如下:
$ scf local generate-event cos post
{
"Records": [
{
"cos": {
"cosSchemaVersion": "1.0",
"cosObject": {
"url": "http://testpic-1253970026.cos.ap-guangzhou.myqcloud.com/testfile",
"meta": {
"Content-Type": "",
"x-cos-request-id": "NWMxOWY4MGFfMjViMjU4NjRfMTUyMV8yNzhhZjM="
},
"key": "/1253970026/testpic/testfile",
"vid": "",
"size": 1029
},
"cosBucket": {
"region": "gz",
"name": "testpic",
"appid": "1253970026"
},
"cosNotificationId": "unkown"
},
"event": {
"eventVersion": "1.0",
"eventTime": 1545205770,
"requestParameters": {
"requestSourceIP": "59.37.125.38",
"requestHeaders": {
"Authorization":"q-signature=098ac7dfe9cf21116f946c4b4c29001c2b449b14"
}
},
"eventName": "cos:ObjectCreated:Post",
"reqid": 179398952,
"eventSource": "qcs::cos",
"eventQueue": "qcs:0:lambda:cd:appid/1253970026:default.printevent.$LATEST",
"reservedInfo": ""
}
}
]
}
可以通过 Shell 管道的方式,将生成的命令直接用在本地触发调用函数中。
例如,执行 scf local generate-event cos post | scf local invoke -t template.yaml testfunction
命令,将 COS POST 模拟事件用于函数触发入参,在本地调用 testfunction 函数。
通过输出到文件的方式,可以快速生成测试模板文件。基于测试模板文件,您可以修改为更符合实际所需的测试模板。例如,执行 scf local generate-event cos post > event.json
命令,将会在当前目录生成 event.json 文件,该文件内包含了 COS POST 测试事件内容。
SCF CLI 可以通过 scf eventdata list
查看某函数下的所有调试模板。
scf eventdata list
支持的参数如下:
参数 | 简写 | 必填 | 说明 | 示例 |
---|---|---|---|---|
name | -n | 是 | 函数名 | -n hello_world |
region | -r | 否 | 指定函数所在区域,可参见 区域列表 | -r ap-beijing |
namespace | -ns | 否 | 命名空间 | -ns default |
- 当不指定 region 和 namespace 时,默认使用 configure 里的 region 和 default 命名空间 。
- 可执行
scf configure get
查看 configure 配置信息。
$scf eventdata list -n hello
[>] Region:ap-guangzhou
[>] Namespace:default
[>] Function:hello
TestmodelsName AddTime ModTime
apitest 2019-08-15 20:57:37 2019-08-15 20:57:37
costest 2019-08-15 20:58:31 2019-08-15 20:58:31
$scf eventdata list -r ap-guangzhou -ns default -n hello
[>] Region:ap-guangzhou
[>] Namespace:default
[>] Function:hello
TestmodelsName AddTime ModTime
apitest 2019-08-15 20:57:37 2019-08-15 20:57:37
costest 2019-08-15 20:58:31 2019-08-15 20:58:31
SCF CLI 可以通过 scf eventdata get
下载某函数下的所有调试模板或指定某个模板。下载模板文件时,会自动在命令执行目录下创建 scf_event_data 文件夹,并将模板文件放到该文件夹。
scf eventdata get
支持的参数如下:
参数 | 简写 | 必填 | 说明 | 示例 |
---|---|---|---|---|
name | -n | 是 | 函数名 | -n hello_world |
region | -r | 否 | 指定函数所在区域,可参见 区域列表 | -r ap-beijing |
namespace | -ns | 否 | 命名空间 | -ns default |
event | -e | 否 | 模板名(不填时,默认下载全部) | -e apitest |
output-dir | -d | 否 | 模板存放路径 | -d ./ |
force | -f | 否 | 当本地有与云端同名的模板时,会强制覆盖 | 无 |
说明:
- 当输出目录不填时,会默认为当前目录。
- 当不指定 region 和 namespace 时,默认使用 configure 里的 region 和 default 命名空间 。
- 可执行
scf configure get
查看 configure 配置信息。
$scf eventdata get -n hello
[>] Downloading event-data: {apitest} ...
[o] Download event-data: {apitest} success
[>] Downloading event-data: {costest} ...
[o] Download event-data: {costest} success
$ ls
index.py scf_event_data template.yaml
$ ls scf_event_data/
apitest.json costest.json
注意:
当本地存在和云端同名的模板文件时,会下载失败。如果您想要覆盖本地文件,则使用
-f
参数。
$scf eventdata get -n hello -e apitest
[>] Downloading event-data: {apitest} ...
[o] Download event-data: {apitest} success
SCF CLI 可以通过 scf eventdata update
将本地模板文件上传至云端。
scf eventdata update
支持的参数如下:
参数 | 简写 | 必填 | 说明 | 示例 |
---|---|---|---|---|
name | -n | 是 | 函数名 | -n hello_world |
dir | -d | 是 | 模板路径 | -d ./ |
region | -r | 否 | 指定函数所在区域,可参见 区域列表 | -r ap-beijing |
namespace | -ns | 否 | 命名空间 | -ns default |
force | -f | 否 | 当本地有与云端同名的模板时,会强制覆盖 | 无 |
- 当不指定 region 和 namespace 时,默认使用 configure 里的 region 和 default 命名空间 。
- 可执行
scf configure get
查看 configure 配置信息。- 如果 dir 指定到目录,则上传该目录下的所有 json 文件。如果 dir 指定到具体文件,则上传指定文件。
$scf eventdata update -n hello -d scf_event_data/
[>] Region:ap-guangzhou
[>] Namespace:default
[>] Function:hello
[>] Eventdata {apitest} exist in remote,updating event...
[o] Eventdata {apitest} update success!
[>] Eventdata {costest} exist in remote,updating event...
[o] Eventdata {costest} update success!
注意:
当云端存在和本地同名的模板文件时,会上传失败。如果您想要覆盖云端文件,则使用
-f
参数。
$scf eventdata update -n hello -d scf_event_data/apitest.json
[>] Region:ap-guangzhou
[>] Namespace:default
[>] Function:hello
[o] Eventdata {apitest} update success!
本页内容是否解决了您的问题?