{"id":38344,"date":"2026-01-29T13:30:43","date_gmt":"2026-01-29T10:30:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/"},"modified":"2026-01-29T13:30:43","modified_gmt":"2026-01-29T10:30:43","slug":"playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/","title":{"rendered":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights"},"content":{"rendered":"<h2>Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights<\/h2>\n<p>Otomasyon testleri, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Playwright gibi g\u00fc\u00e7l\u00fc bir ara\u00e7la test yazarken, test verilerini etkili bir \u015fekilde y\u00f6netmek, testlerinizin g\u00fcvenilirli\u011fini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve kapsam\u0131n\u0131 do\u011frudan etkiler. Yanl\u0131\u015f veya yetersiz veri y\u00f6netimi, testlerin k\u0131r\u0131lmas\u0131na, yanl\u0131\u015f pozitiflere ve zaman kayb\u0131na yol a\u00e7abilir. Bu makalede, Playwright testlerinizde veri y\u00f6netimini optimize etmek i\u00e7in kullanabilece\u011finiz be\u015f temel y\u00f6ntemi ve TestDino Insights&#8217;\u0131n bu konudaki yakla\u015f\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Test Verisi Y\u00f6netimi Neden Bu Kadar \u00d6nemli?<\/h3>\n<p>Test otomasyonunda veri y\u00f6netimi, sadece testlerin \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda test stratejinizin genel ba\u015far\u0131s\u0131 i\u00e7in kritik bir rol oynar. Do\u011fru veri y\u00f6netimi olmadan, testleriniz h\u0131zl\u0131ca karma\u015f\u0131kla\u015fabilir ve bak\u0131m\u0131 zor hale gelebilir.<\/p>\n<h4>G\u00fcvenilirlik ve Tekrarlanabilirlik<\/h4>\n<p>Test verilerinin do\u011fru ve tutarl\u0131 bir \u015fekilde y\u00f6netilmesi, testlerinizin her zaman ayn\u0131 ko\u015fullar alt\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu da test sonu\u00e7lar\u0131n\u0131n g\u00fcvenilirli\u011fini art\u0131r\u0131r ve hatalar\u0131n tekrarlanabilirli\u011fini garanti eder. Aksi takdirde, ayn\u0131 testin farkl\u0131 zamanlarda farkl\u0131 sonu\u00e7lar vermesiyle kar\u015f\u0131la\u015fabilirsiniz.<\/p>\n<h4>Test Kapsam\u0131n\u0131 Geni\u015fletme<\/h4>\n<p>Farkl\u0131 senaryolar\u0131 ve u\u00e7 durumlar\u0131 test etmek i\u00e7in \u00e7e\u015fitli veri setlerine ihtiya\u00e7 duyulur. Etkili veri y\u00f6netimi, bu farkl\u0131 veri setlerini kolayca olu\u015fturman\u0131za ve testlerinize entegre etmenize olanak tan\u0131r, b\u00f6ylece test kapsam\u0131n\u0131z\u0131 geni\u015fletirsiniz.<\/p>\n<h4>Bak\u0131m Kolayl\u0131\u011f\u0131<\/h4>\n<p>Verilerin test kodundan ayr\u0131 tutulmas\u0131, kodun daha temiz ve okunabilir olmas\u0131n\u0131 sa\u011flar. Verilerde bir de\u011fi\u015fiklik oldu\u011funda, sadece veri kayna\u011f\u0131n\u0131 g\u00fcncellemeniz yeterli olur, bu da test kodunda de\u011fi\u015fiklik yapma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<h4>Performans ve H\u0131z<\/h4>\n<p>\u0130yi yap\u0131land\u0131r\u0131lm\u0131\u015f test verileri, testlerin daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131na yard\u0131mc\u0131 olabilir. \u00d6rne\u011fin, testten \u00f6nce veritaban\u0131nda gerekli verileri haz\u0131rlamak veya API&#8217;ler arac\u0131l\u0131\u011f\u0131yla h\u0131zl\u0131ca veri olu\u015fturmak, kullan\u0131c\u0131 aray\u00fcz\u00fc \u00fczerinden manuel veri giri\u015fi yapmaktan \u00e7ok daha h\u0131zl\u0131d\u0131r.<\/p>\n<h3>Y\u00f6ntem 1: Sabit Kodlanm\u0131\u015f (Hardcoded) ve Inline Veri Kullan\u0131m\u0131<\/h3>\n<p>Test verilerini do\u011frudan test dosyas\u0131n\u0131n i\u00e7ine yazmak, en basit ve en h\u0131zl\u0131 y\u00f6ntemlerden biridir. \u00d6zellikle k\u00fc\u00e7\u00fck, tek seferlik veya prototip testler i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Avantajlar\u0131 ve Dezavantajlar\u0131<\/h4>\n<p><strong>Avantajlar\u0131:<\/strong><br \/>\n*   H\u0131zl\u0131 ba\u015flang\u0131\u00e7 ve kolay uygulama.<br \/>\n*   K\u00fc\u00e7\u00fck testler veya tek kullan\u0131ml\u0131k senaryolar i\u00e7in ideal.<br \/>\n*   Harici dosya veya ba\u011f\u0131ml\u0131l\u0131k gerektirmez.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><br \/>\n*   Veri de\u011fi\u015fti\u011finde test kodunun da de\u011fi\u015fmesi gerekir.<br \/>\n*   Yeniden kullan\u0131labilirlik d\u00fc\u015f\u00fckt\u00fcr.<br \/>\n*   Test kapsam\u0131 geni\u015fledik\u00e7e y\u00f6netimi zorla\u015f\u0131r.<br \/>\n*   Hassas verilerin (\u015fifreler gibi) kod i\u00e7inde bulunmas\u0131 g\u00fcvenlik riski olu\u015fturabilir.<\/p>\n<h4>Basit Senaryolar \u0130\u00e7in Kullan\u0131m<\/h4>\n<p>Bu y\u00f6ntem, genellikle kullan\u0131c\u0131 ad\u0131, \u015fifre gibi az say\u0131da ve s\u0131k de\u011fi\u015fmeyen veriler i\u00e7in veya belirli bir form alan\u0131na girilecek tek bir de\u011fer i\u00e7in tercih edilir.<\/p>\n<h4>Playwright ile \u00d6rnek Uygulama<\/h4>\n<p>A\u015fa\u011f\u0131daki \u00f6rnekte, bir giri\u015f testi i\u00e7in kullan\u0131c\u0131 ad\u0131 ve \u015fifrenin do\u011frudan test i\u00e7inde nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz:<\/p>\n<pre><code>\nimport { test, expect } from '@playwright\/test';\n\ntest('Kullan\u0131c\u0131 ge\u00e7erli kimlik bilgileriyle giri\u015f yapabilmeli', async ({ page }) => {\n  const username = 'testuser';\n  const password = 'password123';\n\n  await page.goto('https:\/\/example.com\/login');\n  await page.fill('#username', username);\n  await page.fill('#password', password);\n  await page.click('#loginButton');\n\n  await expect(page.url()).toContain('\/dashboard');\n  await expect(page.locator('.welcome-message')).toHaveText(<code>Ho\u015f geldiniz, ${username}!<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>Y\u00f6ntem 2: Yap\u0131land\u0131rma Dosyalar\u0131 ile Veri Y\u00f6netimi (JSON, YAML, .env)<\/h3>\n<p>Test verilerini harici yap\u0131land\u0131rma dosyalar\u0131nda saklamak, daha b\u00fcy\u00fck ve karma\u015f\u0131k projeler i\u00e7in sabit kodlanm\u0131\u015f verilere g\u00f6re \u00e7ok daha iyi bir yakla\u015f\u0131md\u0131r. Bu y\u00f6ntem, verileri koddan ay\u0131rarak daha temiz, daha y\u00f6netilebilir ve daha g\u00fcvenli testler olu\u015fturman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h4>JSON Dosyalar\u0131 ile Yap\u0131land\u0131r\u0131lm\u0131\u015f Veri<\/h4>\n<p>JSON (JavaScript Object Notation), yap\u0131land\u0131r\u0131lm\u0131\u015f verileri depolamak i\u00e7in yayg\u0131n olarak kullan\u0131lan hafif bir veri de\u011fi\u015fim format\u0131d\u0131r. Kullan\u0131c\u0131 profilleri, \u00fcr\u00fcn detaylar\u0131 veya test senaryolar\u0131 gibi karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 saklamak i\u00e7in idealdir.<\/p>\n<p><strong>\u00d6rnek <code>test-data.json<\/code>:<\/strong><\/p>\n<pre><code>\n{\n  \"users\": [\n    {\n      \"username\": \"adminUser\",\n      \"password\": \"adminPassword\",\n      \"role\": \"admin\"\n    },\n    {\n      \"username\": \"standardUser\",\n      \"password\": \"userPassword\",\n      \"role\": \"user\"\n    }\n  ],\n  \"products\": [\n    {\n      \"name\": \"Laptop\",\n      \"price\": 1200,\n      \"quantity\": 1\n    },\n    {\n      \"name\": \"Mouse\",\n      \"price\": 25,\n      \"quantity\": 2\n    }\n  ]\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>Ortam De\u011fi\u015fkenleri ve .env Kullan\u0131m\u0131<\/h4>\n<p>Ortam de\u011fi\u015fkenleri, \u00f6zellikle hassas veriler (API anahtarlar\u0131, veritaban\u0131 ba\u011flant\u0131 dizeleri) ve ortamdan ortama de\u011fi\u015fen veriler (test ortam\u0131 URL'leri) i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr. <code>dotenv<\/code> paketi, <code>.env<\/code> dosyalar\u0131ndan ortam de\u011fi\u015fkenlerini y\u00fcklemeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><strong>\u00d6rnek <code>.env<\/code> dosyas\u0131:<\/strong><\/p>\n<pre><code>\nBASE_URL=https:\/\/test.example.com\nAPI_KEY=your_secret_api_key\nADMIN_USERNAME=adminUser\nADMIN_PASSWORD=adminPassword\n<\/pre>\n<p><\/code><\/p>\n<h4>Playwright Testlerinde Entegrasyon<\/h4>\n<p>JSON verilerini okumak i\u00e7in Node.js'in <code>fs<\/code> mod\u00fcl\u00fcn\u00fc kullanabilir, ortam de\u011fi\u015fkenlerine ise <code>process.env<\/code> \u00fczerinden eri\u015febilirsiniz.<\/p>\n<pre><code>\nimport { test, expect } from '@playwright\/test';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport dotenv from 'dotenv';\n\n\/\/ .env dosyas\u0131n\u0131 y\u00fckle\ndotenv.config();\n\n\/\/ JSON verisini oku\nconst testDataPath = path.join(__dirname, 'test-data.json');\nconst testData = JSON.parse(fs.readFileSync(testDataPath, 'utf-8'));\n\ntest('Admin kullan\u0131c\u0131s\u0131 giri\u015f yapabilmeli', async ({ page }) => {\n  const adminUser = testData.users.find(user => user.role === 'admin');\n  const baseUrl = process.env.BASE_URL || 'https:\/\/default.example.com';\n\n  await page.goto(<code>${baseUrl}\/login<\/code>);\n  await page.fill('#username', adminUser.username);\n  await page.fill('#password', adminUser.password);\n  await page.click('#loginButton');\n\n  await expect(page.url()).toContain('\/admin-dashboard');\n});\n\ntest('\u00dcr\u00fcn sepete eklenebilmeli', async ({ page }) => {\n  const product = testData.products[0]; \/\/ Laptop\n\n  await page.goto(process.env.BASE_URL || 'https:\/\/default.example.com');\n  await page.locator(<code>text=${product.name}<\/code>).click();\n  await page.click('#addToCartButton');\n\n  await expect(page.locator('.cart-item-count')).toHaveText('1');\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>Y\u00f6ntem 3: Dinamik Veri \u00dcreticileri (Faker.js vb.)<\/h3>\n<p>Bazen, \u00f6zellikle kay\u0131t formlar\u0131 veya veri giri\u015fi testleri gibi senaryolarda, her test \u00e7al\u0131\u015ft\u0131rmas\u0131nda benzersiz ve ger\u00e7ek\u00e7i verilere ihtiyac\u0131n\u0131z olur. Dinamik veri \u00fcreticileri, bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in m\u00fckemmel ara\u00e7lard\u0131r.<\/p>\n<h4>Neden Dinamik Veriye \u0130htiya\u00e7 Duyar\u0131z?<\/h4>\n<p>*   <strong>Benzersizlik:<\/strong> Kullan\u0131c\u0131 ad\u0131 veya e-posta gibi alanlar\u0131n her testte benzersiz olmas\u0131 gerekebilir, aksi takdirde \u00e7ak\u0131\u015fmalar ya\u015fanabilir.<br \/>\n*   <strong>Ger\u00e7ek\u00e7ilik:<\/strong> Rastgele ancak ger\u00e7ek\u00e7i isimler, adresler, telefon numaralar\u0131, testlerin daha ger\u00e7ek\u00e7i senaryolar\u0131 sim\u00fcle etmesine yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Test Kapsam\u0131:<\/strong> Farkl\u0131 veri t\u00fcrleri ve formatlar\u0131 ile uygulamay\u0131 test etmek, daha geni\u015f bir hata yelpazesini ortaya \u00e7\u0131karabilir.<br \/>\n*   <strong>Veri Kirlili\u011fi:<\/strong> Test ortam\u0131nda s\u00fcrekli ayn\u0131 verileri kullanmak yerine, dinamik veriler sayesinde veri kirlili\u011fini azaltabilirsiniz.<\/p>\n<h4>Faker.js ile Ger\u00e7ek\u00e7i Veri \u00dcretimi<\/h4>\n<p><code>faker-js<\/code> (eski ad\u0131yla <code>faker.js<\/code>), Node.js ortam\u0131nda sahte ancak ger\u00e7ek\u00e7i veri \u00fcretmek i\u00e7in en pop\u00fcler k\u00fct\u00fcphanelerden biridir. \u0130simler, adresler, e-postalar, telefon numaralar\u0131, \u00fcr\u00fcnler ve daha fazlas\u0131n\u0131 kolayca \u00fcretebilir.<\/p>\n<p><strong>Kurulum:<\/strong><br \/>\n<code>npm install @faker-js\/faker<\/code><\/p>\n<h4>Playwright Testlerinde Kullan\u0131m \u00d6rnekleri<\/h4>\n<pre><code>\nimport { test, expect } from '@playwright\/test';\nimport { faker } from '@faker-js\/faker';\n\ntest('Yeni kullan\u0131c\u0131 kayd\u0131 ba\u015far\u0131l\u0131 olmal\u0131', async ({ page }) => {\n  const firstName = faker.person.firstName();\n  const lastName = faker.person.lastName();\n  const email = faker.internet.email({ firstName, lastName });\n  const password = faker.internet.password({ length: 10, memorable: true, pattern: \/[A-Z0-9]\/ });\n\n  await page.goto('https:\/\/example.com\/register');\n\n  await page.fill('#firstName', firstName);\n  await page.fill('#lastName', lastName);\n  await page.fill('#email', email);\n  await page.fill('#password', password);\n  await page.fill('#confirmPassword', password);\n  await page.click('#registerButton');\n\n  await expect(page.url()).toContain('\/registration-success');\n  await expect(page.locator('.success-message')).toHaveText('Kayd\u0131n\u0131z ba\u015far\u0131yla tamamland\u0131!');\n});\n\ntest('\u00dcr\u00fcn yorumu eklenebilmeli', async ({ page }) => {\n  const reviewText = faker.lorem.paragraph();\n  const rating = faker.number.int({ min: 1, max: 5 });\n\n  await page.goto('https:\/\/example.com\/product\/123'); \/\/ Belirli bir \u00fcr\u00fcn sayfas\u0131na git\n  await page.click('#addReviewButton');\n\n  await page.fill('#reviewText', reviewText);\n  await page.locator(<code>input[name=\"rating\"][value=\"${rating}\"]<\/code>).check();\n  await page.click('#submitReview');\n\n  await expect(page.locator('.review-list')).toContainText(reviewText);\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>Y\u00f6ntem 4: Veritaban\u0131 ve API Entegrasyonlar\u0131<\/h3>\n<p>Karma\u015f\u0131k senaryolarda veya uygulaman\u0131n belirli bir durumunu test etmek i\u00e7in, do\u011frudan veritaban\u0131 veya API'ler arac\u0131l\u0131\u011f\u0131yla test verisi haz\u0131rlamak veya sorgulamak \u00e7ok daha verimli olabilir. Bu y\u00f6ntem, UI testlerinden \u00f6nce sistemin arka ucunda gerekli veriyi olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<h4>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 \u0130\u00e7in Veritaban\u0131 Y\u00f6netimi<\/h4>\n<p>Veritaban\u0131 entegrasyonu, \u00f6zellikle a\u015fa\u011f\u0131daki durumlarda faydal\u0131d\u0131r:<br \/>\n*   <strong>\u00d6n Ko\u015ful Verisi:<\/strong> Bir testin ba\u015flamas\u0131 i\u00e7in belirli bir kullan\u0131c\u0131 durumu, \u00fcr\u00fcn envanteri veya sipari\u015f ge\u00e7mi\u015fi gibi verilerin \u00f6nceden var olmas\u0131 gerekti\u011finde.<br \/>\n*   <strong>Veri Temizli\u011fi:<\/strong> Her test \u00e7al\u0131\u015ft\u0131rmas\u0131ndan sonra veritaban\u0131n\u0131 temizleyerek testler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 ortadan kald\u0131rmak.<br \/>\n*   <strong>Do\u011frulama:<\/strong> UI \u00fczerinde yap\u0131lan bir i\u015flemin veritaban\u0131nda do\u011fru bir \u015fekilde yans\u0131t\u0131l\u0131p yans\u0131t\u0131lmad\u0131\u011f\u0131n\u0131 kontrol etmek.<\/p>\n<p>Node.js'te pop\u00fcler veritaban\u0131 s\u00fcr\u00fcc\u00fcleri aras\u0131nda <code>mysql2<\/code>, <code>pg<\/code> (PostgreSQL i\u00e7in) ve <code>mongoose<\/code> (MongoDB i\u00e7in) bulunur.<\/p>\n<h4>API'ler Arac\u0131l\u0131\u011f\u0131yla Test Verisi Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z\u0131n bir API'si varsa, bu API'yi kullanarak test verisi olu\u015fturmak veya de\u011fi\u015ftirmek, UI \u00fczerinden manuel olarak i\u015flem yapmaktan \u00e7ok daha h\u0131zl\u0131 ve g\u00fcvenilirdir. Bu, \u00f6zellikle bir kay\u0131t, \u00fcr\u00fcn ekleme veya sipari\u015f olu\u015fturma gibi i\u015flemler i\u00e7in ge\u00e7erlidir. <code>axios<\/code> veya yerle\u015fik <code>fetch<\/code> API'si, HTTP istekleri yapmak i\u00e7in kullan\u0131labilir.<\/p>\n<h4>Playwright Testlerinde Veri Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>Playwright testlerinde, <code>test.beforeAll<\/code> veya <code>test.beforeEach<\/code> kancalar\u0131n\u0131 kullanarak testlerden \u00f6nce veritaban\u0131 veya API i\u015flemlerini ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<pre><code>\nimport { test, expect } from '@playwright\/test';\nimport axios from 'axios';\nimport { Client } from 'pg'; \/\/ PostgreSQL \u00f6rne\u011fi\n\n\/\/ Veritaban\u0131 ba\u011flant\u0131 bilgileri (\u00f6rne\u011fin .env dosyas\u0131ndan okunabilir)\nconst dbConfig = {\n  user: 'testuser',\n  host: 'localhost',\n  database: 'testdb',\n  password: 'testpassword',\n  port: 5432,\n};\n\nlet pgClient: Client;\nlet createdUserId: number;\n\ntest.beforeAll(async () => {\n  \/\/ Veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 kur\n  pgClient = new Client(dbConfig);\n  await pgClient.connect();\n\n  \/\/ Testten \u00f6nce veritaban\u0131n\u0131 temizle\n  await pgClient.query('DELETE FROM users WHERE email LIKE \\'testuser_%\\'');\n\n  \/\/ API arac\u0131l\u0131\u011f\u0131yla yeni bir kullan\u0131c\u0131 olu\u015ftur\n  const newUserResponse = await axios.post('http:\/\/localhost:3000\/api\/users', {\n    username: 'testuser_' + Date.now(),\n    email: 'testuser_' + Date.now() + '@example.com',\n    password: 'password123'\n  });\n  createdUserId = newUserResponse.data.id;\n  console.log(<code>API ile kullan\u0131c\u0131 olu\u015fturuldu: ID ${createdUserId}<\/code>);\n});\n\ntest.afterAll(async () => {\n  \/\/ Testlerden sonra olu\u015fturulan kullan\u0131c\u0131y\u0131 veritaban\u0131ndan sil\n  if (createdUserId) {\n    await pgClient.query('DELETE FROM users WHERE id = $1', [createdUserId]);\n    console.log(<code>Kullan\u0131c\u0131 silindi: ID ${createdUserId}<\/code>);\n  }\n  await pgClient.end();\n});\n\ntest('API ile olu\u015fturulan kullan\u0131c\u0131 giri\u015f yapabilmeli', async ({ page }) => {\n  \/\/ Veritaban\u0131ndan olu\u015fturulan kullan\u0131c\u0131n\u0131n bilgilerini al\n  const result = await pgClient.query('SELECT * FROM users WHERE id = $1', [createdUserId]);\n  const user = result.rows[0];\n\n  await page.goto('http:\/\/localhost:3000\/login');\n  await page.fill('#email', user.email);\n  await page.fill('#password', 'password123'); \/\/ API ile olu\u015fturulurken verilen \u015fifre\n  await page.click('#loginButton');\n\n  await expect(page.url()).toContain('\/dashboard');\n  await expect(page.locator('.welcome-message')).toHaveText(<code>Ho\u015f geldiniz, ${user.username}!<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>Y\u00f6ntem 5: Test Verilerini Playwright Test Yap\u0131s\u0131na Entegre Etme (Fixtures, POM)<\/h3>\n<p>Playwright'\u0131n g\u00fc\u00e7l\u00fc test yap\u0131s\u0131, test verilerini daha d\u00fczenli ve yeniden kullan\u0131labilir bir \u015fekilde y\u00f6netmek i\u00e7in \u00f6zel ara\u00e7lar sunar. Fixture'lar ve Page Object Model (POM), bu entegrasyonu sa\u011flaman\u0131n ana yollar\u0131d\u0131r.<\/p>\n<h4>Playwright Fixture'lar\u0131 ile Veri Payla\u015f\u0131m\u0131<\/h4>\n<p>Playwright'\u0131n <code>test.extend<\/code> \u00f6zelli\u011fi, testler aras\u0131nda payla\u015f\u0131lan kaynaklar\u0131 (fixtures) tan\u0131mlaman\u0131za olanak tan\u0131r. Bu kaynaklar, test verileri, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f sayfalar veya \u00f6zel yard\u0131mc\u0131 fonksiyonlar olabilir. Fixture'lar, test verilerini test kodundan ay\u0131rarak daha temiz ve mod\u00fcler testler yazman\u0131z\u0131 sa\u011flar.<\/p>\n<p><strong>\u00d6rnek Fixture Tan\u0131mlama:<\/strong><br \/>\n<code>tests\/fixtures\/auth.ts<\/code><\/p>\n<pre><code>\nimport { test as baseTest } from '@playwright\/test';\n\ntype MyFixtures = {\n  loggedInUser: { username: string; email: string; };\n  loginAsUser: (username: string, password: string) => Promise<void>;\n};\n\nexport const test = baseTest.extend<MyFixtures>({\n  loggedInUser: async ({ page }, use) => {\n    \/\/ Ger\u00e7ek bir kullan\u0131c\u0131 giri\u015fi sim\u00fcle et\n    const username = 'fixtureUser';\n    const email = 'fixture@example.com';\n    const password = 'fixturePassword';\n\n    await page.goto('https:\/\/example.com\/login');\n    await page.fill('#username', username);\n    await page.fill('#password', password);\n    await page.click('#loginButton');\n    await page.waitForURL('**\/dashboard');\n\n    await use({ username, email }); \/\/ Teste bu kullan\u0131c\u0131 verilerini sa\u011fla\n  },\n\n  loginAsUser: async ({ page }, use) => {\n    \/\/ Giri\u015f fonksiyonunu fixture olarak sun\n    await use(async (username, password) => {\n      await page.goto('https:\/\/example.com\/login');\n      await page.fill('#username', username);\n      await page.fill('#password', password);\n      await page.click('#loginButton');\n      await page.waitForURL('**\/dashboard');\n    });\n  },\n});\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Fixture Kullan\u0131m\u0131:<\/strong><\/p>\n<pre><code>\nimport { test, expect } from '..\/fixtures\/auth'; \/\/ \u00d6zel fixture'\u0131m\u0131z\u0131 import et\n\ntest('Oturum a\u00e7m\u0131\u015f kullan\u0131c\u0131 paneli g\u00f6rebilmeli', async ({ page, loggedInUser }) => {\n  await expect(page.locator('.welcome-message')).toHaveText(<code>Ho\u015f geldiniz, ${loggedInUser.username}!<\/code>);\n});\n\ntest('Farkl\u0131 bir kullan\u0131c\u0131 olarak giri\u015f yapabilmeli', async ({ page, loginAsUser }) => {\n  await loginAsUser('anotherUser', 'anotherPassword');\n  await expect(page.locator('.welcome-message')).toHaveText('Ho\u015f geldiniz, anotherUser!');\n});\n<\/pre>\n<p><\/code><\/p>\n<h4>Page Object Model ve Veri Enkaps\u00fclasyonu<\/h4>\n<p>Page Object Model (POM), web sayfalar\u0131n\u0131 nesneler olarak temsil eden bir tasar\u0131m desenidir. Her sayfa nesnesi, o sayfadaki elemanlar\u0131 (locator'lar\u0131) ve bu elemanlarla etkile\u015fim kuran y\u00f6ntemleri i\u00e7erir. Test verilerini, sayfa nesneleri i\u00e7inde veya onlara parametre olarak ge\u00e7irerek enkaps\u00fcle edebilirsiniz. Bu, testlerin daha okunabilir, s\u00fcrd\u00fcr\u00fclebilir ve yeniden kullan\u0131labilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>\u00d6rnek Page Object:<\/strong><br \/>\n<code>pages\/LoginPage.ts<\/code><\/p>\n<pre><code>\nimport { Page, Locator } from '@playwright\/test';\n\nexport class LoginPage {\n  readonly page: Page;\n  readonly usernameInput: Locator;\n  readonly passwordInput: Locator;\n  readonly loginButton: Locator;\n  readonly errorMessage: Locator;\n\n  constructor(page: Page) {\n    this.page = page;\n    this.usernameInput = page.locator('#username');\n    this.passwordInput = page.locator('#password');\n    this.loginButton = page.locator('#loginButton');\n    this.errorMessage = page.locator('.error-message');\n  }\n\n  async navigate() {\n    await this.page.goto('https:\/\/example.com\/login');\n  }\n\n  async login(username: string, password: string) {\n    await this.usernameInput.fill(username);\n    await this.passwordInput.fill(password);\n    await this.loginButton.click();\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p><strong>POM ile Test Verisi Kullan\u0131m\u0131:<\/strong><\/p>\n<pre><code>\nimport { test, expect } from '@playwright\/test';\nimport { LoginPage } from '..\/pages\/LoginPage';\n\ntest('Ge\u00e7ersiz kimlik bilgileriyle giri\u015f yap\u0131lamamal\u0131', async ({ page }) => {\n  const loginPage = new LoginPage(page);\n  await loginPage.navigate();\n\n  \/\/ Test verisi do\u011frudan test i\u00e7inde veya harici bir kaynaktan gelebilir\n  const invalidUsername = 'invaliduser';\n  const invalidPassword = 'wrongpassword';\n\n  await loginPage.login(invalidUsername, invalidPassword);\n\n  await expect(loginPage.errorMessage).toBeVisible();\n  await expect(loginPage.errorMessage).toHaveText('Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre.');\n});\n<\/pre>\n<p><\/code><\/p>\n<h4>Mod\u00fcler ve Yeniden Kullan\u0131labilir Testler<\/h4>\n<p>Fixtures ve POM'u bir arada kullanarak, test verilerinizi ve etkile\u015fimlerinizi mod\u00fcler bir yap\u0131da tutabilirsiniz. Bu, ayn\u0131 test verilerini veya veri haz\u0131rl\u0131k ad\u0131mlar\u0131n\u0131 farkl\u0131 testlerde kolayca yeniden kullanman\u0131z\u0131 sa\u011flar, b\u00f6ylece kod tekrar\u0131n\u0131 azalt\u0131r ve testlerin bak\u0131m\u0131n\u0131 basitle\u015ftirir.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Test verisi y\u00f6netimi stratejinizi olu\u015ftururken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 \u00f6nemli noktalar \u015funlard\u0131r:<\/p>\n<h4>Veri Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131n\u0131 Sa\u011flama<\/h4>\n<p>Her testin kendi verisi \u00fczerinde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flay\u0131n ve testler aras\u0131nda veri ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 minimize edin. Bir testin di\u011ferini etkilememesi i\u00e7in, testlerden \u00f6nce veritaban\u0131 temizli\u011fi veya dinamik veri \u00fcretimi gibi y\u00f6ntemleri kullan\u0131n.<\/p>\n<h4>Veri Temizli\u011fi ve Geri Alma<\/h4>\n<p>Testlerden sonra olu\u015fturulan verileri temizlemek (\u00f6rne\u011fin, veritaban\u0131ndan silmek veya API arac\u0131l\u0131\u011f\u0131yla silme i\u015flemi yapmak) \u00e7ok \u00f6nemlidir. Bu, test ortam\u0131n\u0131n bir sonraki \u00e7al\u0131\u015ft\u0131rma i\u00e7in temiz kalmas\u0131n\u0131 sa\u011flar ve testler aras\u0131 \u00e7ak\u0131\u015fmalar\u0131 \u00f6nler. <code>test.afterEach<\/code> veya <code>test.afterAll<\/code> kancalar\u0131 bu ama\u00e7la kullan\u0131labilir.<\/p>\n<h4>G\u00fcvenlik ve Hassas Veriler<\/h4>\n<p>\u015eifreler, API anahtarlar\u0131 veya ki\u015fisel bilgiler gibi hassas verileri asla do\u011frudan kod i\u00e7ine veya versiyon kontrol sistemine (Git gibi) y\u00fcklenen dosyalara yazmay\u0131n. Bunun yerine, <code>.env<\/code> dosyalar\u0131, ortam de\u011fi\u015fkenleri veya g\u00fcvenli bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc kullan\u0131n.<\/p>\n<h4>\u00d6l\u00e7eklenebilirlik \u0130\u00e7in Stratejiler<\/h4>\n<p>Projeniz b\u00fcy\u00fcd\u00fck\u00e7e ve test say\u0131n\u0131z artt\u0131k\u00e7a, veri y\u00f6netim stratejinizin \u00f6l\u00e7eklenebilir olmas\u0131 gerekir.<br \/>\n*   <strong>Veri Havuzlar\u0131:<\/strong> B\u00fcy\u00fck veri setlerini y\u00f6netmek i\u00e7in merkezi bir veri havuzu veya test verisi y\u00f6netim sistemi kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<br \/>\n*   <strong>Parametrelendirilmi\u015f Testler:<\/strong> Playwright'\u0131n <code>test.describe.configure({ mode: 'parallel' })<\/code> ve d\u00f6ng\u00fclerle testleri parametrele\u015ftirerek farkl\u0131 veri setleriyle ayn\u0131 testi birden \u00e7ok kez \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>Test Verisi Olu\u015fturma Ara\u00e7lar\u0131:<\/strong> Kapsaml\u0131 test verisi olu\u015fturmak i\u00e7in \u00f6zel ara\u00e7lar veya komut dosyalar\u0131 geli\u015ftirin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Playwright ile etkili otomasyon testleri yazmak, sa\u011flam bir test verisi y\u00f6netim stratejisi gerektirir. Sabit kodlanm\u0131\u015f verilerden dinamik \u00fcreticilere, yap\u0131land\u0131rma dosyalar\u0131ndan veritaban\u0131 ve API entegrasyonlar\u0131na kadar bir\u00e7ok farkl\u0131 y\u00f6ntem bulunmaktad\u0131r. Playwright'\u0131n fixture'lar\u0131 ve Page Object Model gibi yerle\u015fik \u00f6zellikleriyle bu y\u00f6ntemleri birle\u015ftirerek, testlerinizin g\u00fcvenilirli\u011fini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve genel kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz. TestDino Insights olarak, test otomasyon s\u00fcre\u00e7lerinizde en uygun veri y\u00f6netim yakla\u015f\u0131mlar\u0131n\u0131 benimsemenizi ve b\u00f6ylece daha sa\u011flam, h\u0131zl\u0131 ve bak\u0131m\u0131 kolay test paketleri olu\u015fturman\u0131z\u0131 \u00f6neriyoruz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>1. Hangi test verisi y\u00f6netim y\u00f6ntemi benim projem i\u00e7in en iyisidir?<\/h4>\n<p>Projenizin b\u00fcy\u00fckl\u00fc\u011f\u00fcne, karma\u015f\u0131kl\u0131\u011f\u0131na, test senaryolar\u0131n\u0131z\u0131n do\u011fas\u0131na ve hassas veri gereksinimlerinize ba\u011fl\u0131d\u0131r. K\u00fc\u00e7\u00fck projeler i\u00e7in sabit kodlanm\u0131\u015f veriler veya JSON dosyalar\u0131 yeterli olabilirken, b\u00fcy\u00fck ve karma\u015f\u0131k projeler i\u00e7in dinamik veri \u00fcreticileri, veritaban\u0131\/API entegrasyonlar\u0131 ve Playwright fixture'lar\u0131 gibi daha geli\u015fmi\u015f y\u00f6ntemlerin bir kombinasyonu gerekebilir.<\/p>\n<h4>2. Test verilerini harici bir dosyada saklamak ne gibi avantajlar sa\u011flar?<\/h4>\n<p>Harici dosyalarda (JSON, YAML, .env) veri saklamak, verileri test kodundan ay\u0131r\u0131r. Bu, kodun daha temiz ve okunabilir olmas\u0131n\u0131 sa\u011flar, verilerde de\u011fi\u015fiklik oldu\u011funda sadece veri dosyas\u0131n\u0131 g\u00fcncelleme esnekli\u011fi sunar ve hassas verileri versiyon kontrol\u00fcnden ayr\u0131 tutarak g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<h4>3. Playwright fixture'lar\u0131 test verisi y\u00f6netiminde nas\u0131l yard\u0131mc\u0131 olur?<\/h4>\n<p>Playwright fixture'lar\u0131, testler aras\u0131nda payla\u015f\u0131lan kaynaklar\u0131 (\u00f6rne\u011fin, \u00f6nceden olu\u015fturulmu\u015f kullan\u0131c\u0131 oturumlar\u0131, belirli veri setleri) tan\u0131mlaman\u0131za olanak tan\u0131r. Bu, veri haz\u0131rl\u0131k ad\u0131mlar\u0131n\u0131 merkezile\u015ftirir, kod tekrar\u0131n\u0131 azalt\u0131r ve testlerin daha mod\u00fcler ve okunabilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>4. Dinamik veri \u00fcreticileri (Faker.js gibi) ne zaman kullan\u0131lmal\u0131d\u0131r?<\/h4>\n<p>Dinamik veri \u00fcreticileri, her test \u00e7al\u0131\u015ft\u0131rmas\u0131nda benzersiz ve ger\u00e7ek\u00e7i verilere ihtiya\u00e7 duydu\u011funuzda kullan\u0131lmal\u0131d\u0131r. \u00d6zellikle yeni kullan\u0131c\u0131 kayd\u0131, form doldurma, \u00fcr\u00fcn yorumu ekleme gibi senaryolarda veri \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemek ve test kapsam\u0131n\u0131 geni\u015fletmek i\u00e7in idealdir.<\/p>\n<h4>5. Testlerden sonra test verilerini temizlemek neden \u00f6nemlidir?<\/h4>\n<p>Testlerden sonra olu\u015fturulan verileri temizlemek, test ortam\u0131n\u0131n bir sonraki \u00e7al\u0131\u015ft\u0131rma i\u00e7in temiz ve \u00f6ng\u00f6r\u00fclebilir kalmas\u0131n\u0131 sa\u011flar. Bu, testler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7ak\u0131\u015fmalar\u0131 \u00f6nler, b\u00f6ylece test sonu\u00e7lar\u0131n\u0131n g\u00fcvenilirli\u011fini art\u0131r\u0131r ve \"flaky\" (aral\u0131kl\u0131 olarak ba\u015far\u0131s\u0131z olan) testlerin olu\u015fmas\u0131n\u0131 engeller.<\/p>\n","protected":false},"excerpt":{"rendered":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights\nOtomasyon testleri, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-38344","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights\" \/>\n<meta property=\"og:description\" content=\"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights Otomasyon testleri, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-29T10:30:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights\",\"datePublished\":\"2026-01-29T10:30:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\"},\"wordCount\":2220,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\",\"name\":\"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-29T10:30:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/","og_locale":"tr_TR","og_type":"article","og_title":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights","og_description":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights Otomasyon testleri, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-29T10:30:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights","datePublished":"2026-01-29T10:30:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/"},"wordCount":2220,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/","url":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/","name":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-29T10:30:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/playwright-test-verilerini-yonetmenin-5-yolu-testdino-insights\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Playwright Test Verilerini Y\u00f6netmenin 5 Yolu | TestDino Insights"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38344"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38344\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}