W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在某些情況下,同一端點(diǎn)的2個(gè)使用者希望有2個(gè)不同的響應(yīng)。
這種方法還使您可以立即知道哪個(gè)使用者正在使用API??的哪一部分。您可以刪除API產(chǎn)生的部分響應(yīng),并且可以查看哪些自動(dòng)生成的測(cè)試失敗。如果沒有失敗,那么您可以安全地刪除響應(yīng)的那部分,因?yàn)闆]有人使用它。
讓我們看下面的示例,該示例為生產(chǎn)者定義的合同稱為producer
。有2個(gè)使用者:foo-consumer
和bar-consumer
。
消費(fèi)者foo-service
request { url '/foo' method GET() } response { status OK() body( foo: "foo" } }
消費(fèi)者bar-service
request { url '/foo' method GET() } response { status OK() body( bar: "bar" } }
您不能為同一請(qǐng)求產(chǎn)生2個(gè)不同的響應(yīng)。因此,您可以正確打包合同,然后從stubsPerConsumer
功能中受益。
在生產(chǎn)者方面,消費(fèi)者可以擁有一個(gè)文件夾,其中僅包含與他們相關(guān)的合同。通過將stubrunner.stubs-per-consumer
標(biāo)志設(shè)置為true
,我們不再注冊(cè)所有存根,而是僅注冊(cè)與使用者應(yīng)用程序名稱相對(duì)應(yīng)的存根。換句話說,我們將掃描每個(gè)存根的路徑,如果它在路徑中包含帶有使用者名稱的子文件夾,則它將被注冊(cè)。
在foo
生產(chǎn)商一方,合同看起來像這樣
. └── contracts ├── bar-consumer │ ├── bookReturnedForBar.groovy │ └── shouldCallBar.groovy └── foo-consumer ├── bookReturnedForFoo.groovy └── shouldCallFoo.groovy
作為bar-consumer
使用者,您可以將spring.application.name
或stubrunner.consumer-name
設(shè)置為bar-consumer
,也可以按以下方式設(shè)置測(cè)試:
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest(properties = ["spring.application.name=bar-consumer"]) @AutoConfigureStubRunner(ids = "org.springframework.cloud.contract.verifier.stubs:producerWithMultipleConsumers", repositoryRoot = "classpath:m2repo/repository/", stubsMode = StubRunnerProperties.StubsMode.REMOTE, stubsPerConsumer = true) class StubRunnerStubsPerConsumerSpec extends Specification { ... }
然后,僅允許引用在名稱中包含bar-consumer
的路徑下注冊(cè)的存根(即來自src/test/resources/contracts/bar-consumer/some/contracts/…?
文件夾的存根)。
或明確設(shè)置消費(fèi)者名稱
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest @AutoConfigureStubRunner(ids = "org.springframework.cloud.contract.verifier.stubs:producerWithMultipleConsumers", repositoryRoot = "classpath:m2repo/repository/", consumerName = "foo-consumer", stubsMode = StubRunnerProperties.StubsMode.REMOTE, stubsPerConsumer = true) class StubRunnerStubsPerConsumerWithConsumerNameSpec extends Specification { ... }
然后,僅允許引用在名稱中包含foo-consumer
的路徑下注冊(cè)的存根(即來自src/test/resources/contracts/foo-consumer/some/contracts/…?
文件夾的存根)。
您可以查看問題224,以了解有關(guān)此更改背后原因的更多信息。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: