使用IntelliJ 作為該文章的IDEA
1、使用Maven添加插件和引入依賴包
(1)在項目的pom.xml中添加一下的代碼:
插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
// 該處需要定義你的spring cloud contract的版本号
<version>${spring-cloud-contract.version}</version>
<extensions>true</extensions>
<configuration>
// 該處填寫你的測試基類的項目路徑
<baseClassForTests>com.example.MvcTest</baseClassForTests>
</configuration>
</plugin>
</plugins>
</build>
依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
// 該處需要定義你的spring cloud dependencies的版本号
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<version>${spring-cloud-contract.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
(2)在項目中建立resources檔案夾
在項目下的test檔案夾下建立一個resources的檔案夾,該檔案夾與test下的java檔案夾同級。
右擊建立的檔案夾,選擇 “Mark Directory as” 下的 “Test Resources Root”。
在resources檔案夾下建立一個contracts檔案夾用來存放契約檔案;
項目目錄結構如下圖所示:
2、建立Groovy檔案
(1)在建立的contracts檔案夾下建立一個groovy檔案
-
需要添加對groovy的支援
在項目上右擊選擇“Add Framework Support…”, 勾選 groovy, 并在右側上方選擇引入的groovy依賴包(可以從官方網頁去下載下傳源碼包到本地并解壓,然後在這裡配置引入即可);
文章是是瞎子源碼包到本地解壓配置的,如下圖所示:
- 配置完之後,右擊contracts檔案夾,建立groovy檔案。
3、編寫Groovy檔案
groovy檔案編寫demo如下:
根據上述接口編寫的groovy契約腳本為:
package contracts
org.springframework.cloud.contract.spec.Contract.make {
request { // (1)
method 'PUT' // (2)
url '/fraudcheck' // (3)
body([ // (4)
"client.id": $(regex('[0-9]{10}')),
loanAmount: 99999
])
headers { // (5)
contentType('application/json')
}
}
response { // (6)
status OK() // (7)
body([ // (8)
fraudCheckStatus: "FRAUD",
"rejection.reason": "Amount too high"
])
headers { // (9)
contentType('application/json')
}
}
}
1. 從消費者的角度來看,當在內建測試中送出請求時:
- // (1) 消費者發送一個請求
- // (2) 使用“PUT”請求
- // (3) 向url "/fraudcheck"
- // (4) body是一串Json字元串:1)具有與正規表達式`[0-9]{10}相比對的字段“client.id” 2)有一個等于‘9999’的字段“loanAMount”
- // (5) 請求頭Content-Type為application/json
- // (6) 然後,響應将與以下内容一起發送
- // (7) 傳回狀态碼為‘200’
- // (8) 傳回的Json體與下面的相等:{ "fraudCheckStatus": "FRAUD", "rejectionReason": "Amount too high" }
- // (9) 請求頭為Content-Type為application/json
2. 從生産者的角度來看,在自動生成的生産者端測試中:
- // (1) 向生産者發送一個請求
- // (2) 使用POST請求
- // (3) 向url "/fraudcheck"
- // (4) body是一串Json字元串:1)具有與正規表達式`[0-9]{10}相比對的字段“client.id” 2)有一個等于‘9999’的字段“loanAMount”
- // (5) 請求頭Content-Type為application/json
- // (6) 然後,将測試斷言是否已将響應發送到
- // (7) 傳回狀态碼為‘200’
- // (8) 傳回的Json體與下面的相等:{ "fraudCheckStatus": "FRAUD", "rejectionReason": "Amount too high" }
- // (9) 請求頭為Content-Type為application/json