2017-02-21 52 views
0

我有一個restFul API http://localhost:8080/books/ {id},它返回帶有特定ID的圖書。PACT:如何使用提供程序數據庫中存在的有效數據創建動態路徑

例如:

GET http://localhost:8080/books/1

將返回

{ 「ID」:1, 「頁」:20, 「價」:100 }

GET http://localhost:8080/books/2

將返回

{ 「ID」:2, 「頁」:30, 「價」:120 }

我已經寫了使用正則表達式我的消費者預期到位(編號),並已產生了PACT 。

提供者現在沒有數據。 (目前在數據庫中沒有書信息)。當我在提供者端運行協議驗證時,它會失敗,因爲它無法通過點擊實際服務來交叉檢查合同來獲取任何信息。

合同能否在供應商數據庫中不存在數據的情況下進行驗證?或者是否有相同的解決方法?

此外,如果我們將提供程序部署到多個環境中,提供程序的數據庫可以更改,如何處理?

欣賞幫助。謝謝。

+0

基本上數據如何在PACT中處理?如何將正確的數據提供給提供者,以便返回的響應是我們需要的200。 – Sam

回答

0

爲什麼要解決這個問題?合同測試的目的是讓您可以驗證合同的雙方是否得到適當的滿足!

您可能需要查看提供者狀態[1]。

您使用哪種語言?

提供的文章爲您提供了一些背景知識。在JVM中,您可以查看@State註釋https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-provider-junit#example-of-http-test

在您的消費者中,您將指定一個狀態,例如「給定ID爲1的書存在」。在提供者方面,框架將調用符合此期望的@State註釋。這使您有機會確保在測試用例運行之前存在任何狀態數據(在本例中爲該書)。

[1] https://docs.pact.io/documentation/provider_states.html

+0

感謝您的支持。如果我理解正確,如果它在提供者端是空的數據庫,提供者需要插入一些數據(通過使用提供者狀態或其他方式)。那麼只有這個請求會被髮送給提供者,以便我們得到一個200響應。我的理解是否正確? – Sam

+0

是的,在針對提供者執行測試之前,JVM單元測試運行將調用符合消費者指定狀態的@State註釋(本例中爲「給定ID爲1的書」)。這使得提供者有機會在測試本身運行之前設置測試夾具。 –

+0

明白了,非常感謝!最後一個查詢(因爲我對PACT完全陌生),所以在這種情況下,消費者在合同中指定的端點將包含一個id(比如book-Id 1)嗎?這最終意味着合同的終端將包含一個硬編碼的值,供應商將其插入其DB中。我們在想,這不看起來有點奇怪嗎?例如:/ bookStore/bookId/1(這將出現在消費者定義的PACT合同中) – Sam

相關問題