如何从契约状态传递参数

How to pass arguments from in pact state

我们正在使用 pact 创建一些合同测试。我们对此很陌生,所以我们真的不知道状态是如何运作的。现在我们只知道我们在 given 中使用的 phare 出现在状态设置主体调用的 state 属性 中。

鉴于此消费者测试:

headers = {'Authorization': 'Token f921c9568ab910264187332ed17f8c5e3aaa0edf'}
(pact
 .given('User exists and has resources')
 .upon_receiving('Request for user resources')
 .with_request('GET', f'/api/users/{user_id}/resources', headers=headers)
 .will_respond_with(200, body=expected))

以及供应商上的验证码:

class ProviderTestCase(TestCase):
    def test_service_provider_against_broker(self):
        verifier = Verifier(provider="Provider", provider_base_url=PROVIDER_URL)

        success, logs = verifier.verify_with_broker(
            **BROKER_OPTS,
            verbose=True,
            provider_states_setup_url='https://webhook.site/82751898-e89d-4531-a86c-8bf5e1e35f88',
            enable_pending=False,
        )

        self.assertEqual(success, 0)

然后在 运行 测试之前,我在 webhook 的 POST 请求中得到以下正文:

{
  "consumer": "Consumer",
  "state": "User exists and has resources",
  "states": [
    "User exists and has resources"
  ],
  "params": {}
}

然后我看到关键字 params。但我真的不知道如何填充它。我也不知道为什么 states 是一个数组。我认为这个模块的文档还很不完整(或者至少我还没有找到好的文档)。

你知道如何从消费者发送参数吗?像 auth 令牌,或者一些在测试之前设置数据库的任意变量是 运行.

Pact Python 当前不支持 Pact 规范 V3,后者支持 multiple states with parameters

如果您的消费者使用 支持 V3 的语言,您可以使用支持此功能的CLI verifier