情境模式
概觀
HTTP / FastHttp / WebSocket user 的 tasks 可包成情境物件,控制每個 tick 要跑哪些 task。三種模式:
sequence— 每個 task 依序執行(預設)。weighted— 每 tick 依weight加權挑一個。conditional— 以run_if/skip_if預測式(透過參數解析器評估)控制。
格式
{
"mode": "sequence",
"tasks": [
{"method": "get", "request_url": "${var.base}/products"},
{"method": "post", "request_url": "${var.base}/cart",
"json": {"product_id": 1}}
]
}
舊式 {"get": {...}} map 與裸列表也仍可用,runner 會 normalise 成 {"mode": "sequence", "tasks": [...]}。
加權挑選
每個 task 可帶正整數 weight;runner 每 tick 挑一個,機率與 weight 成正比。未提供 weight 預設 1。
{
"mode": "weighted",
"tasks": [
{"method": "get", "request_url": "/", "weight": 3},
{"method": "get", "request_url": "/expensive", "weight": 1}
]
}
條件流程
run_if 與 skip_if 皆使用相同預測式語言;run_if 必須為真才執行該 task,skip_if 必須為假才執行。
預測式
形式 |
意義 |
|---|---|
|
直接 truthy 檢查。 |
|
解析占位符後 truthy 檢查。 |
|
解析後 |
|
解析後 |
|
|
|
解析後 truthy 檢查。 |
範例
{
"mode": "sequence",
"tasks": [
{"method": "post", "request_url": "/login",
"json": {"email": "${var.email}"},
"extract": [{"var": "auth", "from": "json_path", "path": "token"}]},
{"method": "get", "request_url": "/profile",
"headers": {"Authorization": "Bearer ${var.auth}"},
"run_if": {"truthy": "${var.auth}"}},
{"method": "post", "request_url": "/cart",
"json": {"product_id": 1},
"skip_if": {"equals": ["${var.tenant}", "internal"]}}
]
}