开始使用cerberus进行合同测试。
当我们得到基于字典的JSON结构时,它可以很好地工作,例如:
{'results': [{"key": "value"}, {"key": "value"}, {"key":"value}]}
但当响应只是一个字典列表时,一切都会变得糟糕,例如:
[{"key": "value"}, {"key": "value"}, {"key":"value}]
我面临的基本错误是:
cerberus.validator.DocumentError: '[{'id': 'XXX', 'is_supported': True}]' is not a document, must be a dict在架构中指定顶级类型:"list“没有帮助,返回架构错误:
cerberus.schema.SchemaError: {'type': ['must be of dict type']}简单的解决方案就是传递列表并验证其中的所有实体。但看起来应该有更合适的方法来做到这一点。
据我所知(正如google所说的),顶级数组是一个有效的JSON结构,所以应该有一种方法来正确地验证它,不是吗?
发布于 2021-11-05 16:24:37
我更喜欢把这作为评论来发表,但我没有这个名气。尽管如此,这里还是有人问了同样的问题:https://github.com/pyeve/cerberus/issues/220
一种解决方案是编写Validator subclass,另一种是使用cerberus-list-schema,它显然是基于Cerberus的,但也支持列表和数组模式。
https://stackoverflow.com/questions/68888712
复制相似问题