1
0
Files
DiAL/probes.example.yaml
lanyuanxiaoyao 146cef982e feat: 新增 DB checker — 支持 PostgreSQL/MySQL/SQLite 连接测试与 SQL 查询断言
- 实现 db 类型 checker,使用 Bun 内置 SQL 类
- 支持 db.url 连接字符串和可选 db.query 查询语句
- expect 支持 maxDurationMs、rowCount、rows 逐列校验
- 凭据屏蔽序列化输出
- SQLite 内存数据库测试覆盖
2026-05-16 09:00:15 +08:00

271 lines
5.6 KiB
YAML

server:
host: "127.0.0.1"
port: 3000
dataDir: "/tmp/probes_data"
runtime:
maxConcurrentChecks: 20
defaults:
interval: "30s"
timeout: "10s"
http:
method: GET
maxBodyBytes: "10MB"
cmd:
maxOutputBytes: "1MB"
targets:
# ========== HTTP targets ==========
- name: "Baidu 首页可用"
type: http
group: "搜索引擎"
http:
url: "https://www.baidu.com"
expect:
status: [200]
maxDurationMs: 5000
- name: "JSON API — 完整流水线"
type: http
group: "后端服务"
interval: "1m"
timeout: "15s"
http:
url: "https://httpbin.org/json"
headers:
Accept: "application/json"
expect:
headers:
Content-Type:
contains: "application/json"
maxDurationMs: 8000
body:
- json:
path: "$.slideshow.title"
equals: "Sample Slide Show"
- json:
path: "$.slideshow.slides[0].title"
contains: "Wake"
- json:
path: "$.slideshow.slides[0].type"
equals: "all"
- regex: '"title"'
- name: "HTML 页面 — CSS 选择器"
type: http
http:
url: "https://httpbin.org/html"
expect:
body:
- css:
selector: "h1"
contains: "Moby-Dick"
- css:
selector: "body"
exists: true
- name: "HTML 页面 — XPath 提取节点文本"
type: http
http:
url: "https://httpbin.org/html"
expect:
body:
- xpath:
path: "/html/body/h1/text()"
contains: "Melville"
- name: "POST 接口测试"
type: http
http:
url: "https://httpbin.org/post"
method: POST
headers:
Content-Type: "application/json"
body: '{"action":"check","version":1}'
expect:
status: [200]
body:
- json:
path: "$.json.action"
equals: "check"
- json:
path: "$.json.version"
gte: 1
- name: "请求头验证"
type: http
http:
url: "https://httpbin.org/headers"
headers:
X-Custom-Header: "dial-server"
expect:
status: [200]
body:
- json:
path: "$.headers.X-Custom-Header"
equals: "dial-server"
- name: "响应头自定义校验"
type: http
http:
url: "https://httpbin.org/response-headers"
headers:
accept: "application/json"
expect:
body:
- json:
path: "$.Content-Type"
equals: "application/json"
- name: "多状态码允许"
type: http
http:
url: "https://httpbin.org/status/200"
expect:
status: [200, 201, 204]
- name: "状态码范围匹配"
type: http
http:
url: "https://httpbin.org/status/204"
expect:
status: ["2xx"]
- name: "自签名证书跳过 SSL"
type: http
http:
url: "https://internal.local/health"
ignoreSSL: true
expect:
status: ["2xx"]
- name: "跟随重定向"
type: http
http:
url: "https://httpbin.org/redirect/1"
maxRedirects: 5
expect:
status: [200]
# ========== Cmd targets ==========
- name: "Bun 版本输出匹配"
type: cmd
group: "系统检查"
cmd:
exec: "bun"
args: ["--version"]
expect:
exitCode: [0]
stdout:
- match: "^\\d+\\.\\d+\\.\\d+"
- name: "自定义文本输出"
type: cmd
cmd:
exec: "bun"
args: ["-e", "console.log('check ok')"]
expect:
stdout:
- equals: "check ok\n"
maxDurationMs: 3000
- name: "脚本执行无 stderr"
type: cmd
cmd:
exec: "bun"
args: ["-e", "process.stdout.write('ok')"]
expect:
exitCode: [0]
stderr:
- empty: true
- name: "日期脚本输出包含年份"
type: cmd
cmd:
exec: "bun"
args: ["-e", "console.log(new Date().getFullYear())"]
expect:
stdout:
- match: "^20\\d{2}\n?$"
- name: "环境变量覆盖"
type: cmd
cmd:
exec: "bun"
args: ["-e", "console.log(process.env.LANG ?? '')"]
env:
LANG: "C"
expect:
stdout:
- contains: "C"
- name: "运行平台非空输出"
type: cmd
cmd:
exec: "bun"
args: ["-e", "console.log(process.platform)"]
expect:
stdout:
- match: ".+"
- name: "多规则 stdout 顺序校验"
type: cmd
interval: "5m"
cmd:
exec: "bun"
args: ["-e", "console.log('version: 2.0.1, status: healthy')"]
expect:
stdout:
- contains: "version:"
- match: "\\d+\\.\\d+\\.\\d+"
- contains: "healthy"
- name: "stderr 内容检查"
type: cmd
cmd:
exec: "bun"
args: ["-e", "process.stderr.write('simulated error\\n'); process.exit(1)"]
expect:
exitCode: [1]
stderr:
- contains: "simulated error"
# ========== DB targets ==========
- name: "SQLite 内存数据库连接测试"
type: db
group: "数据库"
db:
url: "sqlite://:memory:"
expect:
maxDurationMs: 1000
- name: "SQLite 内存数据库查询行数"
type: db
db:
url: "sqlite://:memory:"
query: "SELECT 1 as cnt"
expect:
maxDurationMs: 1000
rowCount:
gte: 1
- name: "SQLite 内存数据库多列结果校验"
type: db
db:
url: "sqlite://:memory:"
query: "SELECT 1 as id, 'Alice' as name, 'engineer' as role"
expect:
rowCount:
equals: 1
rows:
- id:
gte: 1
name:
exists: true
role:
contains: "engineer"