WireMock和Spring MVC模擬器

2022-07-11 22:12:18 字數 3194 閱讀 1178

spring cloud contract提供了乙個方便的類,可以將json wiremock存根載入到springmockrestserviceserver中。

以下是乙個例子:

@runwith(springrunner.class)

@springboottest(webenvironment = webenvironment.none)

@autowired

private resttemplate resttemplate;

@autowired

private service service;

@test

public void contextloads() throws exception

}

baseurl前面是所有模擬呼叫,stubs()方法將乙個存根路徑資源模式作為引數。

所以在這個例子中,/stubs/resource.json定義的存根被載入到模擬伺服器中,所以如果resttemplate被要求訪問,那麼它將得到所宣告的響應。

可以指定多個存根模式,每個可以是乙個目錄(對於所有「.json」的遞迴列表)或乙個固定的檔名(如上例所示)或乙個螞蟻樣式模式。

目前,我們支援tomcat,jetty和undertow作為spring boot嵌入式伺服器,而wiremock本身對特定版本的jetty(目前為9.2)具有「本機」支援。

要使用本地jetty,您需要新增本機執行緒依賴關係,並排除spring boot容器(如果有的話)。

spring restdocs

可用於為具有spring mockmvc或resteasy的http api生成文件(例如,asciidoctor格式)。

在生成api文件的同時,還可以使用spring cloud contract wiremock生成wiremock存根。

只需編寫正常的restdocs測試用例,並使用@autoconfigurerestdocs在restdocs輸出目錄中自動儲存存根。

例如:

@runwith(springrunner.class)

@springboottest

@autoconfigurerestdocs(outputdir = "target/snippets")

@autoconfiguremockmvc

@autowired

private mockmvc mockmvc;

@test

public void contextloads() throws exception

}

從此測試將在「target / snippets / stubs / resource.json」上生成乙個wiremock存根。

它將所有get請求與「/ resource」路徑相匹配。

沒有任何其他配置,這將建立乙個存根與http方法的請求匹配器和除「主機」和「內容長度」之外的所有頭。

為了更準確地匹配請求,例如要匹配post或put的正文,我們需要明確建立乙個請求匹配器。

這將做兩件事情:1)建立乙個只匹配您指定的方式的存根,2)斷言測試用例中的請求也匹配相同的條件。

主要的入口點是wiremockrestdocs.verify(),可以替代document()便利方法。

例如:

@runwith(springrunner.class)

@springboottest

@autoconfigurerestdocs(outputdir = "target/snippets")

@autoconfiguremockmvc

@autowired

private mockmvc mockmvc;

@test

public void contextloads() throws exception "))

.andexpect(status().isok())

.anddo(verify().jsonpath("$.id")

.stub("resource"));

}}

所以這個合同是說:任何有效的post與「id」欄位將得到與本測試相同的響應。

您可以將來電鏈結到.jsonpath()以新增其他匹配器。

如果 您不

熟悉jayway文件,

可以幫助您加快json路徑的速度。

您也可以使用wiremock api來驗證請求是否與建立的存根匹配,而不是使用jsonpathcontenttype方法。

例:

@test

public void contextloads() throws exception "))

.andexpect(status().isok())

.anddo(verify()

.wiremock(wiremock.post(

urlpathequals("/resource"))

.withrequestbody(matchingjsonpath("$.id"))

.stub("post-resource"));

}

wiremock api是豐富的 - 您可以通過正規表示式以及json路徑來匹配標頭檔案,查詢引數和請求正文,因此這可以用於建立具有更廣泛引數的存根。

上面的例子會生成乙個這樣的stub:

後resource.json

]

},"response" :

}}

注意您可以使用wiremock()方法或jsonpath()contenttype()方法建立請求匹配器,但不能同時使用兩者。

在消費方面,假設上面生成的resource.json可以在類路徑中使用,您可以使用wiremock以多種不同的方式建立乙個存根,其中包括上述使用@autoconfigurewiremock(stubs="classpath:resource.json")的描述。

Spring 框架 spring註解的引入和使用

xmlns context spring context.xsd 必須 註解配置引入 該配置隱式引入了spring註解處理器bean autowiredannotationbeanpostprocessor 自動裝配 commonannotationbeanpostprocessor 共同註解 re...

什麼是Spring和Spring的優點

什麼是spring框架 spring是乙個開源的一站式開發框架 它以ioc 控制反轉 和aop 面向切面 為核心 使用基本的j abean來完成以前只能由ejb來完成的工作 取代了ejb的臃腫 低效的開發模式 spring是j aee應用層中的解決方案 在表現層提供了springmvc以及strut...

Spring 和配置事務

的預設配置如下 事務傳播 propagation required 隔離級別 isolation default 採用資料庫預設的事務隔離級別 事務是讀 寫 任何runtimeexception將觸發事務回滾,任何checkedexception將不觸發事務回滾 service.含義如下 第乙個 通...