天天看點

Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫Groovy檔案

使用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”。

Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫Groovy檔案
Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫Groovy檔案

在resources檔案夾下建立一個contracts檔案夾用來存放契約檔案;

項目目錄結構如下圖所示:

Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫Groovy檔案

2、建立Groovy檔案

(1)在建立的contracts檔案夾下建立一個groovy檔案

  1. 需要添加對groovy的支援

    在項目上右擊選擇“Add Framework Support…”, 勾選 groovy, 并在右側上方選擇引入的groovy依賴包(可以從官方網頁去下載下傳源碼包到本地并解壓,然後在這裡配置引入即可); 

    文章是是瞎子源碼包到本地解壓配置的,如下圖所示:

    Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫Groovy檔案
  2. 配置完之後,右擊contracts檔案夾,建立groovy檔案。
    Spring Cloud Contract 初識之二 :契約編寫1、使用Maven添加插件和引入依賴包2、建立Groovy檔案3、編寫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