我正在使用pact-python(0.10.0),并希望验证来自提供程序的响应。我得到的答案是这样的:
"92c0ebfa-ffe5-4f4b-bfc4-ceb98063683f": {
"2018-01-01T00:08:54+00:00": 270.0,
"2018-01-01T02:09:29+00:00": 360.0
}
有没有办法可以验证响应中的密钥(在这种情况下是uuid和timestamps)。在使用Matchers(Term或Like)时,我得到了json编码错误:
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
TypeError: keys must be a string
答案 0 :(得分:0)
从pact-python 0.10.0开始,无法将Term
和Like
等匹配器应用于对象的键。复杂性在于将这些值转换为JSON对象密钥以传输到模拟服务。 Python抱怨匹配器不能成为Python dicts
并且JSON需要字符串作为对象键。
Pact的Java实现似乎支持使用eachKeyLike的类型匹配器,它会声明它是一个字符串而不是正则表达式比较,因此可以扩展pact-python以支持类似的东西。到目前为止,我的调查让我认为改变需要一点时间来组装。
答案 1 :(得分:0)
Matthew,底层的ruby代码当前不支持此功能。您需要将python转换为通过FFI绑定使用Rust实现。罗恩可以为此提供一些指导。