Conftest verify 测试中如何使用--data加载的外部JSON测试数据
Conftest测试用例调用外部--data加载测试数据的实现方法
核心实现逻辑
Conftest通过--data参数递归加载的YAML/JSON文件,会自动映射为Rego中data对象下的可访问路径,路径规则为:相对于--data指定的根目录的相对路径,去掉文件扩展名,测试用例可以直接将该路径指向的对象作为with input as的入参,替代原本内联的JSON内容。
具体操作步骤
- 规范目录结构,将所有大体积测试输入JSON独立存储,示例结构如下:
./policy/:存放所有正式合规策略代码./policy/examples/:存放测试用例依赖的外部输入JSON,比如:good_deployment.json:合规的K8s Deployment资源样例bad_deployment_missing_security_context.json:缺少安全配置的违规资源样例
- 执行
conftest verify命令时,通过--data参数指定加载根目录(即策略代码所在目录,和官方文档的示例保持一致):
此时工具会递归扫描conftest verify --data ./policy./policy下所有JSON/YAML文件,自动将./policy/examples/good_deployment.json的内容映射为data.examples.good_deployment路径下的可访问对象。 - 在Rego测试用例中直接引用对应路径的外部数据作为输入,替代原本内联的JSON串,示例代码如下:
# 引入examples目录下加载的测试数据集 import data.examples # 测试合规资源不会触发违规 test_deployment_with_valid_security_context { no_violations with input as examples.good_deployment } # 测试缺少安全配置的资源会触发违规 test_deployment_without_security_context_triggers_violation { not no_violations with input as examples.bad_deployment_missing_security_context }
常见注意事项
- 路径映射不要搞混层级:比如
--data ./policy时,存放在./policy/examples/xxx.json的文件对应路径是data.examples.xxx;如果--data指定的是其他独立测试数据目录,比如--data ./test_fixtures,那存放的文件对应路径会从data下开始按相对目录层级映射,不要和正式策略的data路径混淆。 - 文件名避免使用空格、特殊字符,推荐使用小写蛇形命名,防止Conftest的路径解析出现异常。
- Conftest加载data文件时会自动忽略以
.开头的隐藏文件,临时测试数据不要使用隐藏文件命名规则。
内容的提问来源于stack exchange,提问作者tomasbasham
相关产品推荐
相关产品推荐

