Playwright Test Otomasyonu: Docker ile Uçtan Uca Testleri Çalıştırma 🐳
Playwright ve TypeScript kullanarak uçtan uca (end-to-end) testleri nasıl yazacağınızı,
Docker ile test ortamını nasıl izole edeceğinizi ve test otomasyonunu CI/CD sürecine nasıl entegre edeceğinizi öğreneceksiniz.
🧠 Bu Rehberde Ne Öğreneceksiniz?
- Playwright test aracını TypeScript ile kullanmak
- Test ortamını izole ederek farklı sistemlerde tutarlılık sağlamak
- Docker imajı içinde E2E testleri çalıştırmak
- HTML ve JSON test raporları üretmek
- CI/CD süreçlerine testleri entegre etmek
1️⃣ Test Ortamını Hazırlama
Adım 1.1 — Proje Dizini Oluşturma
mkdir rabisu-playwright-test
cd rabisu-playwright-test
npm init -y
Bu komutlar proje klasörünü oluşturur ve varsayılan package.json dosyasını oluşturur.
Adım 1.2 — Playwright ve TypeScript Kurulumu
npm install --save-dev playwright
npm install --save-dev typescript @types/node toml @playwright/test
Bu komutlar; Playwright çekirdeğini, TypeScript derleyicisini, Node tür tanımlarını ve TOML yapılandırma kütüphanesini kurar.
Adım 1.3 — Playwright Tarayıcılarını ve Bağımlılıklarını Kurma
npx playwright install-deps
npx playwright install
Bu komutlar sistem bağımlılıklarını yükler ve Chromium, Firefox, Webkit tarayıcılarını indirir.
Adım 1.4 — TypeScript Yapılandırması
nano tsconfig.json
İçerik:
{
"compilerOptions": {
"strict": true,
"module": "commonjs"
},
"include": ["tests"]
}
Bu ayarlar TypeScript derleyicisinin sıkı tip kontrolü yapmasını ve yalnızca tests klasöründeki dosyaları derlemesini sağlar.
2️⃣ Testleri Yazma
Adım 2.1 — Test Klasörü ve Yapılandırma
mkdir tests
cd tests
nano configTypes.ts
İçerik:
import { Browser, Page } from "playwright";
import fs from "fs";
import toml from "toml";
const config = toml.parse(fs.readFileSync("./config.toml", "utf-8"));
declare global {
const page: Page;
const browser: Browser;
const browserName: string;
}
export default {
RABISU_TEST_URL: config.rabisu_test_url ?? "",
};
Bu dosya, testlerde kullanılacak genel değişkenleri tanımlar ve URL bilgisini config.toml dosyasından okur.
Adım 2.2 — Test URL’sini Tanımlama
cd ..
nano config.toml
İçerik:
rabisu_test_url = "https://www.digitalocean.com/products/droplets"
Bu dosya testlerin erişeceği URL’yi belirtir (örneği rabisu.cloud olarak değiştirebilirsiniz).
Adım 2.3 — Kayıt Yöntemleri Testi
tests/kayitYontemleri.spec.ts:
import endpoint from "./configTypes";
import { test, expect } from "@playwright/test";
test("Kayıt olmak için 3 farklı seçeneğin bulunmasını bekler", async ({ page }) => {
await page.goto(endpoint.RABISU_TEST_URL);
await page.waitForLoadState("networkidle");
const kayit_secenek_sayisi = await page
.locator(".SignupButtonsStyles__ButtonContainer-sc-yg5bly-0 > a")
.count();
expect(kayit_secenek_sayisi).toBe(3);
});
Bu test, e-posta, Google ve GitHub ile kayıt seçeneklerinin bulunduğunu doğrular.
Adım 2.4 — Paket Sayısı Testi
tests/paketSayisi.spec.ts:
import endpoint from "./configTypes";
import { test, expect } from "@playwright/test";
test("Abonelik için 2 ana paket (Basic ve Premium) bulunmasını bekler", async ({ page }) => {
await page.goto(endpoint.RABISU_TEST_URL);
await page.waitForLoadState("networkidle");
const mevcut_paket_sayisi = await page
.locator(".CPUInfoStyles__StyledLeftCpuInfo-sc-ooo7a2-4 > div")
.count();
expect(mevcut_paket_sayisi).toBe(2);
});
Bu test, sayfadaki temel ve premium paket sayısının 2 olduğunu doğrular.
Adım 2.5 — Fiyat Karşılaştırma Testi
tests/fiyatKarsilastirma.spec.ts:
import endpoint from "./configTypes";
import { test, expect } from "@playwright/test";
test("Temel sanal sunucu maliyetlerinde 4 farklı CPU seçeneği bulunmasını bekler", async ({ page }) => {
await page.goto(endpoint.RABISU_TEST_URL);
await page.waitForLoadState("networkidle");
const cpu_secenek_sayisi = await page
.locator(".PricingComparisonToolStyles__StyledCpuSelector-sc-1k0sndv-7 > button")
.count();
expect(cpu_secenek_sayisi).toBe(4);
});
Bu test, 1, 2, 4 ve 8 CPU seçeneklerinin sayısını kontrol eder.
3️⃣ Testleri Çalıştırma ve Raporlama
Adım 3.1 — Tüm Tarayıcılarda Testleri Çalıştırın
npx playwright test --browser=all
Bu komut, tüm .spec.ts dosyalarını Chromium, Firefox ve Webkit üzerinde çalıştırır.
Adım 3.2 — HTML Raporu Oluşturma
npx playwright test --browser=all --reporter=html
npx playwright show-report
Bu komutlar test sonuçlarını HTML raporu olarak kaydeder ve http://localhost:9323 adresinde görüntüler.
Uzak sunucuda erişmek için:
ssh -L 9323:localhost:9323 user@sunucu_ip
Bu, yerel tarayıcıdan rapora erişim sağlar.
4️⃣ Docker ile Test Otomasyonu
Adım 4.1 — package.json Güncellemesi
{
"scripts": {
"test": "playwright test --browser=all",
"test-html-report": "playwright test --browser=all --reporter=html",
"test-json-report": "PLAYWRIGHT_JSON_OUTPUT_NAME=results.json playwright test --browser=chromium --reporter=json"
}
}
Bu script’ler test komutlarını kısaltır ve Docker içinde çalıştırmayı kolaylaştırır.
Adım 4.2 — Dockerfile Oluşturma
FROM mcr.microsoft.com/playwright:focal
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/
COPY tests/ /app/tests/
COPY tsconfig.json /app/
COPY config.toml /app/
RUN npm install
Bu Dockerfile, Node ortamında Playwright testlerini çalıştırmak için gerekli tüm bağımlılıkları içerir.
Adım 4.3 — Docker İmajını Derleme ve Testi Çalıştırma
docker build -t playwright-rabisu-test .
docker run --rm playwright-rabisu-test:latest npm run test
Docker imajı oluşturulur ve testler izole bir kapsayıcıda çalıştırılır.
Beklenen çıktı:
✓ 9 test geçti (41s)
❓ Sıkça Sorulan Sorular (SSS)
- Uçtan Uca (E2E) Testler neden önemlidir?
Gerçek kullanıcı senaryolarını simüle eder, sistemin uçtan uca çalıştığını doğrular.
- Docker kullanmak testlerde hangi sorunu çözer?
Farklı ortamlardaki uyumsuzlukları izole eder. “Bende çalışıyor ama sunucuda çalışmıyor” sorununu ortadan kaldırır.
- Playwright ile Selenium arasındaki fark nedir?
Playwright modern tarayıcı mimarilerini destekler, sürücü kurulumu gerekmez, WebKit dahil üç tarayıcıyı destekler.
- CI/CD entegrasyonu nasıl yapılır?
Pipeline’a docker run playwright-rabisu-test:latest npm run test komutu eklenir. Her push sonrası testler otomatik çalışır.
- Neden TOML kullanıyoruz?
Basit, okunabilir ve yapılandırma için idealdir. JSON’a göre daha net bir söz dizimi sunar.
🏁 Sonuç
Playwright ile uçtan uca test otomasyonunuzu Docker ile kapsülleyerek farklı sistemlerde aynı sonuçları alabilirsiniz.
Bu yapıyı Rabisu Bulut sanal sunucularınızda uygulayarak yazılım geliştirme süreçlerinizi otomatik ve güvenilir hale getirebilirsiniz. 🚀
💡 Şimdi Rabisu Bulut platformunda deneyin!