使用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
相关产品推荐
相关产品推荐

