Spring Boot WebFlux-09——WebFlux 集成測試及部署

第09課:WebFlux 集成測試及部署

前言

在平常工做中,免不了自測 UT,由於覆蓋率不達標,是不容許提交測試,那怎麼進行 WebFlux 項目的測試呢。@WebFluxTest 是 WebFlux 測試的重要註解。css

結構

回到這個工程中,使用 springboot-webflux-3-mongodb 工程,工程如圖:java

目錄核心以下:react

  • pom.xml 添加 Test 相關依賴;
  • test / CityWebFluxControllerTest WebFlux API 測試類;

代碼 GiHub 詳見這裏nginx

POM 依賴

pom.xml 添加對應的測試依賴:git

<!-- Spring Boot Test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> 

CityWebFluxControllerTest WebFlux API 測試類

@WebFluxTest 用於測試 Spring WebFlux 控制器,支持自動配置 Spring WebFlux 基礎組件,能夠限制掃描範圍等。github

代碼以下:web

@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class CityWebFluxControllerTest { @Autowired private WebTestClient webClient; private static Map<String, City> cityMap = new HashMap<>(); @BeforeClass public static void setup() throws Exception { City wl = new City(); wl.setId(1L); wl.setProvinceId(2L); wl.setCityName("WL"); wl.setDescription("WL IS GOOD"); cityMap.put("WL", wl); } @Test public void testSave() throws Exception { City expectCity = webClient.post().uri("/city") .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromObject(cityMap.get("WL"))) .exchange() .expectStatus().isOk() .expectBody(City.class).returnResult().getResponseBody(); Assert.assertNotNull(expectCity); Assert.assertEquals(expectCity.getId(), cityMap.get("WL").getId()); Assert.assertEquals(expectCity.getCityName(), cityMap.get("WL").getCityName()); } } 

代碼詳解:spring

  • @WebFluxTest 注入了 WebTestClient 對象,用於測試 WebFlux 控制器,好處是快速,並沒有需啓動完整 HTTP 容器。
  • WebTestClient.post() 方法構造了 POST 測試請求,並使用 uri 指定路由。
  • expectStatus() 用於驗證返回狀態是否爲 ok(),即 200 返回碼。
  • expectBody(City.class) 用於驗證返回對象體是爲 City 對象,並利用 returnResult 獲取對象。
  • Assert 是之前咱們經常使用的斷言方法驗證測試結果。

運行 Test,獲得如圖驗證結果:mongodb

file

工程運行方式

瞭解工程服務器部署,先了解工程如何運行。apache

上面使用應用啓動類運行工程,這是其中一種工程運行方式。Spring Boot 應用的運行方式很簡單,下面介紹下這三種運行方式。

1. 使用應用啓動類

在 IDEA 中直接執行應用啓動類,來運行 Spring Boot 應用,平常開發中,會常常使用這種方式啓動應用。經常使用的會有 Debug 啓動模式,方便在開發中進行代碼調試和 bug 處理。天然,Debug 啓動模式會比正常模式稍微慢一些。

2. 使用 Maven 運行

經過 Maven 運行,須要配置 Spring Boot Maven 插件,在 pom.xml 配置文件中,新增 build 節點並配置插件 spring-boot-maven-plugin,代碼以下:

<build> <plugins> <!-- Spring Boot Maven 插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 

在工程根目錄中,運行以下 Maven 命令來運行 Spring Boot 應用:

mvn spring-boot:run 

實際調用的是 pom.xml 配置的 Spring Boot Maven 插件 spring-boot-maven-plugin,上面執行了插件提供的 run 指令。也能夠在 IDEA 右側工具欄的 Maven Project Tab 中,找到 Maven 插件的 spring-boot-maven-plugin,執行相應的指令。全部指令以下:

# 生成構建信息文件 spring-boot:build-info # 幫助信息 spring-boot:help # 從新打包 spring-boot:repackage # 運行工程 spring-boot:run # 將工程集成到集成測試階段,進行工程的聲明週期管理 spring-boot:start spring-boot:stop 

3. 使用 Java 命令運行

使用 Maven 或者 Gradle 安裝工程,生成可執行的工程 jar 後,運行以下 Java 命令來運行 Spring Boot 應用:

java -jar target/xxx.jar 

這裏運行了 spring-boot-maven-plugin 插件編譯出來的可執行 jar 文件。經過上述三種方式均可以成功運行 Spring Boot 工程,成功運行輸出的控制檯信息如圖 1-10 所示。

工程服務器部署

基礎環境安裝如上面說的,須要 JDK 環境、Maven 環境等。

Win 服務器

推薦使用 AlwaysUp:

使用方式也很簡單:

Linux 服務器

推薦 yum 安裝基礎環境,好比安裝 JDK:

yum -y list java* yum -y install java-1.8.0-openjdk* java -version 

安裝 Maven:

yum -y list apache-maven sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo sudo yum install -y apache-maven mvn --v 

Linux 使用 nohup 命令進行對後臺程序的啓動關閉。

關閉應用的腳本:stop.sh

啓動應用的腳本:start.sh

重啓應用的腳本:stop.sh

總結

這一篇主要一塊兒實踐了簡單的 WebFlux API 控制層的測試,Service 測試 Mock 和之前同樣,以及工程運行、服務器部署的操做。

工程:springboot-webflux-9-test。

代碼 GiHub 詳見這裏

相關文章
相關標籤/搜索