Pact-python匹配键作为响应

时间:2018-01-18 08:48:23

标签: python matcher pact

我正在使用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

2 个答案:

答案 0 :(得分:0)

从pact-python 0.10.0开始,无法将TermLike等匹配器应用于对象的键。复杂性在于将这些值转换为JSON对象密钥以传输到模拟服务。 Python抱怨匹配器不能成为Python dicts并且JSON需要字符串作为对象键。

Pact的Java实现似乎支持使用eachKeyLike的类型匹配器,它会声明它是一个字符串而不是正则表达式比较,因此可以扩展pact-python以支持类似的东西。到目前为止,我的调查让我认为改变需要一点时间来组装。

答案 1 :(得分:0)

Matthew,底层的ruby代码当前不支持此功能。您需要将python转换为通过FFI绑定使用Rust实现。罗恩可以为此提供一些指导。