iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
IT 管理

Playwright + Test Design + AI Agent:自動化測試實戰系列 第 9

第 09 天:獨孤九劍的總訣式 - Fixtures

  • 分享至 

  • xImage
  •  

獨孤九劍的總訣式,顧名思義,是獨孤九劍的總綱口訣,涵蓋後面八式的變化概要。在自動化測試領域裡面,也有一種設計模式是貫穿整個測試框架,並且並可通用於整個測試流程,就是 Fixtures。本文將透過 Playwright 來說明 Fxitures 的設計模式的用途與範例。

內功心法:負責管理測試環境的機制 Fixtures

Fixtures 是負責讓執行測試前後,負責初始化和釋放資源的一種模式。使用 Fxitures 能夠讓測試環境的初始化和釋放的流程更為統一並且穩定。通常 Fixture 有三個目的:初始化資源(Setup)、釋放資源(Teardown)、測試案例的執行生命週期(LifeCycle Management)。初始化資源可以包含於建立資料庫連線、建立測試用的檔案與資料、或者啟動模擬伺服器 (Mock Server),而對應的就是釋放資源,如關閉資料庫連線、移除暫存檔案、清理測試資料等等。

使用 Fixture 的優點,是為了能夠在測試案例執行期間能夠有效的管理環境或資源,一個測試案例或一組測試組合的執行生命週期可以包含:

  • 測試框架初始化 -> 測試組合初始化 -> 測試案例初始化 -> 測試案例執行 -> 測試案例釋放資源 -> 測試組合釋放資源 -> 測試框架釋放資源

在 Playwright 裡面有兩種 fixtures,在 Playwright 可以使用這兩個 fixtures 讓所有測試案例開始執行的狀態維持一致,並且不用在每個次社案例中重複撰寫相同的初始化和清理的邏輯,也可以讓每個測試執行期間都可以保有一致的環境。

  • Built-in fixtures
  • Custom Fixtures

Built-in fixtures

在 playwright 內建幾個 fixture 類型,以下列範例為例,可以從函式使用 page,這個是一個新開的分頁 (tab)。另外還有兩個跟瀏覽器相關的 fixture,一個是瀏覽器的實體 (instance),等於你手動開啟瀏覽器 (Chromium/Firefox/Safari),在整個測試過程中共同使用。接著還有 Context,類比於你開啟一個無痕模式,每個測試都會有自己的 Context,避免測試間互相干擾。內建 Fixtures 最大的優點就是,Playwright 已經幫你處理瀏覽器的啟動、關閉、清理資源等等。

Custom Fixture

但除了內建的 fixture (page、context、browser),我們還可以自訂 fixutre,並且自己撰寫初始化/清理邏輯,讓多個測試案例可以共用。通常在執行測試案例前可能會需要建立測試資料,例如:建立登入使用者的帳號密碼,你可以通過 base.extend撰寫需要建立的物件,並且使用 use 將資源傳遞給測試案例使用。

招式演練:

這個範例是展示內建的 page fixture,並且不需要撰寫額外邏輯就可以在測試案例內使用。

import { expect, test } from '@playwright/test'

test('Login should successful', async {page}) => {
	await page.goto('')
    const signInButton = page.getByRole('button', { name: 'Login' |)
	await expect(signInButton).toBeVisible()
}

下列這個範例,是一個 Custom Fixture 的範例,透過在 base.extend 建立 testData 並且在測試案例使用 testData 取得登入的帳號和密碼。

const test = base.extend({
	testData: async {} use => {
		const data = { 
			email: "@example.com", 
			password: "123456" 
		}
		await use(data)	
	})
}

test("Should Login with normal user", asnc({page, testData}) => {
	await page.goto("")
	
	const user = page.getByRole("textbox", { name: "Email" });
	await user(testData.email);

	const password = page.getByRole("textbox",  name: "Password" );
		await password(testData.password);

	const loginButton = page.getByRole("button", { name: "Login" });

	const url = page.url()
	expext 
});

秘笈傳授:專案結構

保持簡單(Keep it simple):在不同等級的 Fixture處理不同的初始化,盡量將 Fixture 內通常只需要同樣等級的事情,例如:測試框架的 Fixture 處理專案設定的初始化、測試套件(Test Suite)則處理多個測試案例會使用到的物件,最後才是測試案例層級的 Fixture,換句話說,就是選擇正確的範圍。把常用的 setup 抽成 fixture,避免每個測試重複登入、建立測試資料,如果可以盡量共用。

收功:今日總結

在自動化測試領域中,Fixtures 其實就像是「獨孤九劍的總訣式」,是貫穿整個測試框架管理生命週期的核心機制。它的主要功能在於管理測試環境,包括測試前的初始化 (Setup)、測試後的釋放 (Teardown),以及測試生命週期 (LifeCycle Management) 。透過 Fixture,可以確保每個測試案例在一致、乾淨的環境下執行,避免案例之間互相干擾,並有效減少重複程式碼,讓測試架構更具可維護性。

在 Playwright 中,Fixture 分為兩類。內建 Fixtures(如 page、context、browser)由測試框架提供,可以直接使用,可以協助開啟瀏覽器、清理資源與環境隔離。而自訂 Fixtures 則讓開發者能透過 base.extend 建立專案需要的資源,例如登入使用者、API client 或資料庫連線,並在測試中重複使用。這種模式既能提升測試的靈活性,也能保持一致的狀態控制。在使用 Fixture 要注意保持簡單、選擇正確範圍、重用與封裝。只要掌握這些原則,Fixture 不僅能讓測試執行起來更穩定,而且測試碼也會比較好維護。


上一篇
第 08 天:遇強則強的獨孤九劍,使用測試模組降低技術債
下一篇
第 10 天:獨孤九劍的破劍式,一劍破萬法,Page Object Model (POM)
系列文
Playwright + Test Design + AI Agent:自動化測試實戰11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言