在跑Playwright 自動化測試時, 如何同時呼叫 Mockito工具, 去mock java 後端物件 prmsService, 請提供說明實作步驟和流程

 要在 Playwright 自動化測試執行期間,同時呼叫 Mockito 工具來 Mock Java 後端物件(如 prmsService),需要將兩者環境有效集成。這通常通過啟動一個嵌入式 Java 測試伺服器(如 Spring Boot 測試框架)來模擬後端行為,然後讓 Playwright 測試與這個模擬的伺服器交互。

以下是詳細的分步實作流程:

完整實作步驟

步驟 1: 準備後端環境

  1. 引入依賴 確保後端 Java 專案具備以下依賴:

    xml
    <dependencies> <!-- Mockito --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>5.x.x</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>5.x.x</version> <scope>test</scope> </dependency> <!-- Spring Boot 測試 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
  2. 撰寫後端服務與 Controller 這是原始的後端服務與 Controller:

    java
    @RestController public class PrmsController { private final PrmsService prmsService; public PrmsController(PrmsService prmsService) { this.prmsService = prmsService; } @GetMapping("/api/prms/data") public String getPrmsData() { return prmsService.fetchData(); } } @Service public class PrmsService { public String fetchData() { return "Real PRMS Data"; } }
  3. 模擬 prmsService 行為 使用 Mockito 和 Spring 測試框架模擬 prmsService

    java
    @SpringBootTest @AutoConfigureMockMvc public class PrmsControllerTest { @MockBean private PrmsService prmsService; @Autowired private MockMvc mockMvc; @Test public void mockPrmsService() throws Exception { // 模擬 `prmsService` 返回值 when(prmsService.fetchData()).thenReturn("Mocked PRMS Data"); // 測試模擬的 API 行為 mockMvc.perform(get("/api/prms/data")) .andExpect(status().isOk()) .andExpect(content().string("Mocked PRMS Data")); } }
  4. 啟動嵌入式伺服器 當執行測試時,Spring Boot 測試框架會啟動內嵌伺服器,通常默認埠為 http://localhost:8080

    步驟 2: 撰寫 Playwright 測試腳本

    1. 安裝 Playwright 確保前端專案安裝了 Playwright:

      bash
      npm install @playwright/test
    2. Playwright 測試與後端互動 撰寫測試腳本,讓 Playwright 測試與模擬後端伺服器交互:

      javascript
      const { test, expect } = require('@playwright/test'); test('Validate Mocked PRMS Backend Data', async ({ page }) => { // 訪問前端頁面(如本地前端伺服器) await page.goto('http://localhost:3000'); // 發送請求到嵌入式後端伺服器 const response = await page.request.get('http://localhost:8080/api/prms/data'); const responseData = await response.text(); // 確認返回的 Mock 數據 expect(responseData).toBe('Mocked PRMS Data'); // 如果前端需要渲染此數據 const displayedData = await page.textContent('#prms-data'); expect(displayedData).toBe('Mocked PRMS Data'); });

    步驟 3: 整合執行

    1. 啟動測試環境

      • 確保執行 Java 測試時啟動內嵌的 Spring Boot 測試伺服器。
      • 確保前端伺服器(如 React、Vue 等)運行在 http://localhost:3000
    2. 執行 Playwright 測試 執行 Playwright 測試,驗證數據:

      bash
      npx playwright test
    3. 驗證結果 測試應成功模擬後端 prmsService 行為,Playwright 應從後端獲取模擬數據,並驗證其渲染在前端是否正確。


    效益與優化

    效益

    1. 前後端分離測試:Playwright 測試可在後端尚未實現時執行,模擬行為使測試更靈活。
    2. 隔離性強:後端和前端測試互不依賴,避免因未實現的功能阻礙測試。
    3. 穩定性高:後端的 Mock 保證測試結果穩定,排除實際數據的干擾。

    優化建議

    1. 自動啟動內嵌伺服器:使用工具如 Gradle 或 Maven 來自動啟動嵌入式測試伺服器。
    2. 使用 WireMock 或 MockServer:如果不希望使用完整後端服務,可以採用輕量級工具模擬 API。

留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock