Ortaya Karışık

TR EN

Pelican Statik Sitenizi Playwright ile Test Edin: Hatalara Elveda

Daha önce Playwright Arch Linux Kurulum yazımda bu canavarı sistemimize nasıl kuracağımızı anlatmıştım. Şimdi o gücü, kendi blogumuzdaki (Pelican) hataları ayıklamak için sahaya sürme vakti.

Statik site kurmak kolay, ama karmaşık temalar ve JavaScript eklentileri arttıkça "bir yerler kırıldı mı?" korkusu başlar. Gelin, uv ve playwright ikilisiyle Pelican sitemizi nasıl otomatize test ederiz, yakından bakalım.

🛠️ Neden Playwright? (Pelican Perspektifi)#

Pelican sitenizi pelican content -o output ile derlediğinizde elinizde bir sürü HTML kalır. Ancak: 1. JavaScript ile çalışan "Dark Mode" butonun çalışıyor mu? 2. Konsolda gizli bir 404 veya Uncaught TypeError var mı? 3. Sayfalar arası geçişlerde o çok sevdiğin animasyon patlıyor mu?

Bunları sadece bir tarayıcıyı programlayarak (headless browser) anlayabiliriz.

📦 uv ile Test Ortamını Hazırlamak#

Hala standart pip kullanmıyorsunuz değil mi? uv ile saniyeler içinde test ortamını kuralım:

yuceltoluyag@archlinux:~$ uv add --dev pytest playwright
yuceltoluyag@archlinux:~$ uv run playwright install webkit

🧠 Sinsi Hataları Yakalayan Fixture#

İşin uzmanlık (expert) kısmı burası. Sadece sayfa açıldı mı diye bakmıyoruz; arka planda konsola düşen her hatayı yakalayan "katı" (strict) bir test fixture'ı kuruyoruz. tests/conftest.py içine şunu gömelim:

import pytest
from playwright.sync_api import sync_playwright

@pytest.fixture(scope="session")
def browser():
    with sync_playwright() as p:
        browser = p.webkit.launch()
        yield browser
        browser.close()

@pytest.fixture
def page(browser):
    context = browser.new_context()
    page = context.new_page()

    # Konsol hatalarını biriktirelim
    errors = []
    page.on("pageerror", lambda exc: errors.append(exc))
    page.on("console", lambda msg: errors.append(msg.text) if msg.type == "error" else None)

    yield page

    # Test bittiğinde hata varsa patlat!
    assert not errors, f"Sayfada JavaScript hataları bulundu: {errors}"
    context.close()

🧪 Temel ve İleri Seviye Test Senaryoları#

Pelican'ın ürettiği output klasöründeki dosyaları doğrudan file:/// protokolü ile test edeceğiz. İşte birkaç "hayat kurtaran" test örneği:

1. Sayfa Yüklenmesi ve Başlık Kontrolü#

from pathlib import Path
from urllib.request import pathname2url
from playwright.sync_api import expect

def test_home_page_loads(page):
    index_path = Path("output/index.html").absolute()
    page.goto(f"file://{pathname2url(str(index_path))}")
    expect(page).to_have_title("Yücel Toluyag")

2. JavaScript Devre Dışıyken Test Etme (Expert Tip)#

Siteniz JS kapalıyken de okunabilir olmalı. Playwright ile bunu test etmek çok kolay:

def test_no_js_fallback(browser):
    # Yeni bir context aç, JS'i kapat
    context = browser.new_context(java_script_enabled=False)
    page = context.new_page()

    page.goto(f"file://{pathname2url(str(Path('output/index.html').absolute()))}")

    # Eğer <noscript> içinde bir hata mesajı gösteriyorsanız onu kontrol edin
    # Veya kritik içeriğin hala orada olduğunu doğrulayın
    expect(page.get_by_text("Yücel Toluyag")).to_be_visible()
    context.close()

Eski bir sayfanızı yeni bir URL'e yönlendirdiyseniz, bunun doğru çalışıp çalışmadığını status code üzerinden doğrulayabilirsiniz:

def test_internal_redirect(page):
    response = page.goto("https://yuceltoluyag.com/eski-yazi/")
    assert response.status == 200
    assert response.url == "https://yuceltoluyag.com/yeni-yazi/"

4. XPath ile İlişkisel DOM Kontrolleri#

Bazen CSS selector'ları yetmez. Örneğin, belirli bir başlığın hemen yanındaki veya altındaki butonu seçmek için XPath kullanabilirsiniz:

def test_article_sibling_button(page):
    # 'Makaleler' başlığının hemen ardından gelen 'Devamını oku' butonunu bul
    button = page.locator("xpath=//h2[contains(text(), 'Makaleler')]/following-sibling::a[1]")
    expect(button).to_have_attribute("href", "/makaleler/")

🚀 Testleri Çalıştırma#

Terminalden şu komutu verdiğinizde Playwright gizlice tarayıcıyı açar, Pelican'ın ürettiği siteyi tarar ve eğer bir JS hatası veya kırık yapı varsa size raporlar:

yuceltoluyag@archlinux:~$ uv run pytest tests/

Neden Bu Zahmete Giriyoruz?#

Çünkü statik siteler "basit" değildir. Özellikle kendi temanızı yazıyorsanız veya karmaşık CSS/JS yapıları kullanıyorsanız, bir makaleyi güncellerken tüm site yapısını bozma riskiniz her zaman vardır. Playwright ile bu riski sıfıra indiriyoruz.

Unutmayın; test yazmak zaman kaybı değil, gelecekteki uykusuz gecelerden çalınmış bir sigortadır. Playwright Arch Linux Kurulum rehberimle başladığınız bu yolda, artık siteniz gerçek bir mühendislik ürünü gibi sağlam duruyor kardaş.

Hadi eyvallah!


🔗 İlgili Yazılar#

Webmentions

Beğeniler

  • Beğeniler yükleniyor...

Yorumlar & Yanıtlar

  • Yorumlar yükleniyor...

Yorumlar
Bluesky ile Yanıtla

Fediverse veya Mastodon'da bir hesabınız varsa, bu gönderiye yanıt verebilirsiniz.

Bu URL'yi favori Fediverse uygulamanızın arama alanına veya Mastodon sunucunuzun web arayüzüne kopyalayıp yapıştırın.

Yorumlar yükleniyor...