差異處
這裏顯示兩個版本的差異處。
java:wiremock:record-events-from-webhook [2021/08/14 22:57] tony [Thinking & Design] |
java:wiremock:record-events-from-webhook [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>wiremock}} | ||
- | ====== WireMock - Record events from webhook ====== | ||
- | ===== Problem ===== | ||
- | 我有一隻待測程式(SUT)會相依於外部服務(External Service)的WebHook機制,操作流程如下: | ||
- | - SUT會對外部服務特定事件註冊WebHook位置。 | ||
- | - 當外部服務發生特定事件時,會發送event到SUT所註冊的位置。 | ||
- | - SUT對外部服務反註冊WebHook位置。 | ||
- | {{:java:wiremock:wc_test_with_webhook.png|}}\\ | ||
- | WireMock有提供[[http://wiremock.org/docs/webhooks-and-callbacks/|webhook]]的extension,讓你可以自行編寫程式或mappingfile腳本去做到在"特定操作後,發送webhook操作",但它並不支援Recording的功能。本篇文章,主要分享如何讓WireMock擁有錄製webhook的功能。 | ||
- | ===== How to? ===== | ||
- | ==== Pre-notice ==== | ||
- | 由於Solution與整個Record流程息息相關,我必須先說明我所採用的流程。在我的故事中,有四隻程式: | ||
- | - Record Program: 負責控制整個WireMock腳本記錄流程的程式。 | ||
- | - SUT: 待測程式,透過REST API提供與External Service相關功能的服務。 | ||
- | - WireMock: 負責記錄SUT與External Service互動的過程並產生腳本,提供REST API讓Record Program控制Record流程。 | ||
- | - External Service: SUT所互動的外部服務。 | ||
- | {{:java:wiremock:ws_recording_procedure.png|}}\\ | ||
- | 詳細流程如下: | ||
- | - Record Program請WireMock開始記錄SUT與External Service互動過程。 | ||
- | - Record Program對SUT觸發command,並開始poll command完成結果。 | ||
- | - SUT對WireMock做操作。 | ||
- | - WireMock將操作轉送給External Service。 | ||
- | - Record Program發現command執行完成。 | ||
- | - Record Program請WireMock停止記錄。 | ||
- | - WireMock產生SUT與External Service互動過程的執行腳本(mappings)。 | ||
- | - Record Program針對腳本命名。 | ||
- | ==== Thinking & Design ==== | ||
- | 針對Pre-notice的流程,我有幾個問題需要解決: | ||
- | - WireMock如何捕捉External Service發送給SUT的callback event? | ||
- | - 補捉之後如何將這些events放置到腳本的Post中? | ||
- | - 放置到腳本中後,如何在適當的時間由WireMock返回給SUT? | ||
- | 針對以上三個問題,理想上如果解決了,應該可以產生如下方的腳本內容。webhook callback的內容會被放在postServerActions中,會在WireMock回應SUT後觸發這些動作。 | ||
- | {{:java:wiremock:ws_recording_webhook_json.png|}} | ||
- | |||
- | |||
- | Note. 第一個問題,我曾想過2個解決方法。第一個方法是同時註冊SUT與WireMock的callback URL給External Service,讓External Service同時發event給兩者;但由於無法確定event收到的先後順序而影響到步驟6的執行,所以捨棄這個方法。 | ||
- | |||
- | |||
- | |||
- | ==== Implement ==== | ||
- | |||
- | |||
- | ===== ===== | ||
- | ---- | ||
- | \\ | ||
- | ~~DISQUS~~ |