iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

在時間快不夠用、事情爆炸的情況下要一直提醒自己冷靜有耐心的面對
剩不到一週,繼續努力!/images/emoticon/emoticon16.gif

Yes

Integration Test

整合測試是軟體測試其中一個階段,重點在確保不同模組的功能可以配合著一起運作。例如:

  • 服務與資料庫的互動
  • 不同服務間的通訊往來
  • 服務與外部 API 之互動
  • 應用程式中不同層級的互動

資料庫的整合測試

資料庫的整合測試會去測試系統與資料庫之間的互動,確保 SQL 查詢、資料模型和資料結構、commit transactions 等能正常運作。

例如,可以使用 @DataJpaTest 註解來表示資料庫的整合測試,這個註解會自動配置一個 embedded database(如 H2資料庫),並進行相對應的自動配置:

import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest
public class MyRepositoryIntegrationTest {
    // 測試邏輯
}

透過這個設定可以較為輕鬆的測試 Repository 介面和持久化邏輯。

REST API 的整合測試

Spring Boot提供了 @SpringBootTestTestRestTemplate@SpringBootTest 是替整個應用程式上下文建立一個完整的運行環境,而 TestRestTemplate 則用在執行 HTTP 請求和驗證 HTTP 回應。

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.beans.factory.annotation.Autowired;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyApiIntegrationTest {

    @Autowired
    private TestRestTemplate restTemplate;

    // 測試邏輯
}

  • webEnvironment 這個屬性是用來確保系統在隨機的埠上啟動,以避免在測試過程中與其他服務發生衝突。

使用 TestContainers 進行整合測試

隨著容器化技術的興起,軟體開發和部署方式經歷了顯著轉變。容器化技術讓應用程式得以輕鬆打包到容器中,並在各種環境中運行,從而解決了環境配置的問題,同時提供了高一致性和可移植性。

在傳統的整合測試中,經常需要配置和管理各種依賴,例如資料庫、訊息佇列和外部服務。這些配置通常很複雜,也可能和生產環境共享導致測試受到影響,無法確保在不同環境中的一致性。隨著 CI/CD 的普及,自動化測試和環境管理變得格外重要。必須確保每次都能在一致的環境中測試,並且順暢的整合到 CI/CD 流程中。

在這種情況下,TestContainers 提供了一種容器化解決方案。它使用 Docker 容器在測試過程中啟動各種資源(例如資料庫和 Kafka...等),並確保在測試結束時這些資源有正確的背關閉。

補充:End-to-End Testing (E2E 測試)

  • End-to-End Testing 主要目的是去驗證系統的整體工作流程,從開始到結束是否符合預定的需求和功能。它涵蓋了整個系統中所有模組和子系統,並檢查所有元件(例如前端、後端、資料庫、網路等)都能在真實條件下正常配合運作。
  • 典型的 E2E 測試案例有:使用者認證(驗證 user 可以登入並讀取其資料)、資料流動(驗證資料能夠正確在前後端、資料庫等地傳輸、互動和交換)等。

各測試間的區別:

https://ithelp.ithome.com.tw/upload/images/20231012/20162682NUELX2cQqz.png

  • 單元測試:聚焦於最小單位的程式碼,確保每個功能的正確性。
  • 整合測試:確保不同的模組或層級間能夠正確互動,比單元測試廣泛且複雜度較高。
  • End-to-End 測試:涵蓋了整個應用程式的運行,從 UI 界面到資料庫,確保所有元件順暢互相搭配運作。
單元測試 整合測試 End-to-End 測試
目的 & 範疇 測試單一的功能 測試多個模組間的互動 測試整個系統流程
測試速度
複雜度
涉及的元件 通常一個 多個模組或層級 所有元件(前端、後端、資料庫)

在一個完整的測試中,此三種類型通常會一起搭配使用,來最大程度的確保應用程式穩定性。

以上就是今天的內容啦~ 明天再來介紹 TDD 測試驅動開發!


上一篇
Day 26 - 測試的基礎:Unit Test
下一篇
Day 28 - TDD 測試驅動開發
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言