測試金字塔 (Testing Pyramid)
前言
測試金字塔是一個用來劃分不同層次測試的策略。透過將測試分成三個主要層次:單元測試 (Unit Test)、應用層測試 (API Test)、以及端對端測試 (E2E Test),我們能更有效地驗證系統的各個部分,確保每一層的功能都能運作正常,並且提升整體的測試效率。
單元測試 (Unit Test)
通常我們會進行單元測試,驗證某個模組或功能的正確性。例如,測試 GraphQL API 的呼叫是否能正確取得使用者資料。這是測試最基礎的部分,能快速驗證小範圍的功能是否運作正常。
應用層測試 (API Test)
當我們確保了單元測試的功能正確後,下一步是進行應用層測試,這主要是用來驗證系統的 API 是否能正確運作。像是查詢某使用者時,檢查回傳的資料是否完整且正確。這能幫助我們確認系統內部的服務是否能正常運作,並且回傳正確的資料給使用者。
# 單元測試 (Unit Test)
import requests
def test_get_issues():
query = '''
{
issues {
nodes {
id
title
}
}
}'''
response = requests.post("https://api.linear.app/graphql", json={'query': query})
assert response.status_code == 200
assert "issues" in response.json()["data"]
端對端測試 (E2E Test)
使用 Playwright 自動化測試,模擬使用者透過登入頁面進行 Email 登入,並使用 MailSlurp 獲取驗證碼來完成登入流程。
from mailslurp_client import MailSlurp
from playwright.sync_api import sync_playwright
def test_login_with_verification():
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://linear.app/login")
page.fill("input[name='email']", "user@example.com")
page.click("button[type='submit']")
mailslurp = MailSlurp(api_key="your_api_key")
inbox = mailslurp.create_inbox(email_address="user@example.com")
email = mailslurp.wait_for_latest_email(inbox.id, timeout=30000)
code = extract_code_from_email(email.body)
page.fill("input[name='verification_code']", code)
page.click("button[type='submit']")
assert page.url == "https://linear.app/dashboard"
browser.close()
結論
透過「測試金字塔」,我們可以清楚劃分不同層級的測試範圍,從最底層的單元測試到最頂層的 E2E 測試。這樣的架構不僅幫助我們提升測試效率,還能讓我們更有系統地驗證每個功能點。隨著不同層級的練習,我們能更好地理解每個測試層級的目的,並且確保產品在各層面都保持高品質。
Comments ()