You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用opa test编写规则单元测试时,如何同时提供input和data?

在OPA测试中同时指定Input和Data的方法

当然可以在opa test中同时提供input和data,而且完全支持为所有测试用例复用同一组全局data,具体实现方式如下:

全局共享Data的实现

在测试文件中直接定义规则依赖的data内容即可,所有测试用例会自动复用这组数据:

假设你的目标规则在policy/authz.rego,对应的测试文件policy/authz_test.rego可以这么写:

package authz

// 全局共享的data,所有测试用例都会使用这组数据
data.roles = {
    "alice": "admin",
    "bob": "viewer"
}

// 测试用例1:验证admin有写入权限
test_admin_write_allowed {
    input = {"user": "alice", "action": "write"}
    allow == true
}

// 测试用例2:验证viewer无写入权限
test_viewer_write_denied {
    input = {"user": "bob", "action": "write"}
    allow == false
}

如果你的规则依赖其他包的data(比如data.org.groups),直接在测试文件中定义对应包的数据即可:

package authz

import data.org.groups

// 定义依赖的外部包data
data.org.groups = {
    "admin_team": ["alice"],
    "view_team": ["bob"]
}

// 测试用例...

单测试用例覆盖Data(可选)

如果个别测试需要使用不同的data,可以用with关键字临时覆盖全局data,不影响其他用例:

test_temp_data_override {
    input = {"user": "charlie", "action": "read"}
    allow == true with data.roles as {"charlie": "viewer"}
}

执行测试

直接运行opa test policy/即可,测试用例会同时使用你定义的input和data。

内容的提问来源于stack exchange,提问作者Kiskit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 19:12:03