Zamanda geriye bakış: test otomasyonunun evrimi

Maksim Sadym
Maksim Sadym

Test otomasyonunun doğuşu

Web tarayıcısının doğduğu 1990'lara geri dönelim. Test otomasyonu, tarayıcı ve cihazlar arası test zorluklarını çözmek için Selenium ve WebDriver projelerinin ortaya çıkmasıyla 2000'lere kadar gerçek bir çözüm olarak kullanılmadı.

Bu iki proje 2011'de Selenium WebDriver olarak birleşti ve 2018'de W3C standardı oldu. Buna genellikle WebDriver veya WebDriver "Klasik" denir.

Selenium WebDriver projesinin gelişimi.
Selenium WebDriver projesinin evrimi

WebDriver "Klasik" sürümünden önceki test otomasyonu oldukça zordu. Tarayıcı testini otomatikleştirebilmek, geliştiricilerin ve test uzmanlarının yaşam kalitesini önemli ölçüde iyileştirdi.

JavaScript'in yükselişi

Web geliştirme, JavaScript'e daha fazla odaklanacak şekilde geliştikçe WebdriverIO, Appium, Nightwatch, Protractor (desteği sonlandırıldı), Testcafe, Cypress, Puppeteer ve Playwright gibi yeni otomasyon çözümleri ortaya çıktı.

JavaScript otomasyon araçları.
JavaScript otomasyon araçları

Otomasyon yaklaşımları

Bu araçlar, tarayıcıları otomatikleştirme yöntemlerine göre genel olarak iki büyük gruba ayrılabilir:

  • Yüksek düzey: JavaScript'i tarayıcı içinde yürüten araçlar. Örneğin, Cypress ve TestCafe, testleri doğrudan tarayıcıda çalıştırmak için web API'lerinden ve Node.js'den yararlanır. Selenium'un ilk sürümünde de aynı yaklaşım kullanılıyordu.
  • Düşük düzey: Tarayıcının dışında uzaktan komutları yürüten araçlar. Araçlar birden fazla sekme açma veya cihaz modunu taklit etme gibi daha fazla kontrol gerektirdiğinde, tarayıcıyı protokoller aracılığıyla kontrol etmek için uzaktan komutlar yürütmeleri gerekir. İki ana otomasyon protokolü WebDriver "Klasik" ve Chrome Geliştirici Araçları Protokolü (CDP)'dür.

Sonraki bölümde, bu iki protokolün güçlü ve sınırlı yönlerini anlamak için bu protokollere göz atacağız.

WebDriver Classic ve CDP.

WebDriver "Klasik" ve Chrome Geliştirici Araçları Protokolü (CDP)

WebDriver "Klasik", tüm büyük tarayıcılar tarafından desteklenen bir web standardıdır. Otomasyon komut dosyaları, HTTP istekleri aracılığıyla bir sürücü sunucusuna komut gönderir. Sürücü sunucusu da tarayıcıya dahili, tarayıcıya özgü protokoller aracılığıyla iletişim kurar.

Tarayıcılar arası mükemmel bir desteğe sahiptir ve API'leri test için tasarlanmıştır ancak yavaş olabilir ve bazı düşük düzey kontrolleri desteklemez.

WebDriver "Klasik".
WebDriver "Klasik"

Örneğin, await coffee.click(); öğesini tıklayan bir test komut dosyanız olduğunu düşünün. Bu istek, bir dizi HTTP isteğine çevrilir.

# WebDriver: Click on a coffee element

curl -X POST http://127.0.0.1:4444/session/:element_id/element/click
   -H 'Content-Type: application/json'
   -d '{}'

Öte yandan Chrome Geliştirici Araçları Protokolü (CDP) başlangıçta Chrome Geliştirici Araçları ve hata ayıklama için tasarlanmış olsa da otomasyon için Puppeteer tarafından benimsenmiştir. CDP, WebSocket bağlantıları aracılığıyla doğrudan Chromium tabanlı tarayıcılarla iletişim kurarak daha hızlı performans ve düşük düzeyde kontrol sağlar.

Ancak yalnızca Chromium tabanlı tarayıcılarda çalışır ve açık bir standart değildir. Ayrıca CDP API'leri nispeten karmaşıktır. Bazı durumlarda CDP ile çalışmak ergonomik değildir. Örneğin, işlem dışı iFrame'lerle çalışmak çok fazla çaba gerektirir.

CDP.
Chrome Geliştirici Araçları Protokolü

Örneğin, bir öğenin await coffee.click(); tıklanması bir dizi CDP komutuna çevrilir.

// CDP: Click on a coffee element

// Mouse pressed
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mousePressed', x: 10.34, y: 27.1, clickCount: 1 }
}

// Mouse released
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mouseReleased', x: 10.34, y: 27.1, clickCount: 1 }
}

Düşük seviyeli denetimler nelerdir?

WebDriver "Classic"ın geliştirildiği günlerde düşük düzeyli kontrole ihtiyaç yoktu. Ancak zaman değişti, web artık çok daha yetenekli ve testler artık daha ayrıntılı işlemler gerektiriyor.

CDP, tüm hata ayıklama ihtiyaçlarını karşılamak için tasarlandığından WebDriver "Klasik" sürümüne kıyasla daha fazla alt düzey denetimi destekler. CDP aşağıdaki gibi özellikleri işleyebilir:

  • Konsolda mesaj yakalama
  • Ağ isteklerini durdurma
  • Cihaz modunu taklit etme
  • Coğrafi konumu taklit etme
  • Diğer özellikler

Bu özellikler, farklı mimari nedeniyle WebDriver "Klasik"te mümkün değildi. WebDriver "Klasik" HTTP tabanlı olduğundan tarayıcı etkinliklerine abone olmayı ve bunları dinlemeyi zorlaştırıyordu. Öte yandan CDP, WebSocket tabanlı olup varsayılan olarak iki yönlü mesajlaşmayı destekler.

Sıradaki adım: WebDriver BiDi

Hem WebDriver "Klasik" hem de CDP'nin güçlü yönlerinin özetini aşağıda bulabilirsiniz:

WebDriver "Klasik" Chrome Geliştirici Araçları Protokolü (CDP)
En iyi tarayıcı desteği Hızlı, iki yönlü mesajlaşma
W3C standardı Alt düzey kontrol sağlar
Test için tasarlandı

WebDriver BiDi, WebDriver "Klasik" ve CDP'nin en iyi yönlerini birleştirmeyi amaçlar. Şu anda geliştirilmekte olan yeni bir standart tarayıcı otomasyon protokolüdür.

WebDriver BiDi projesi (işleyiş şekli, vizyon ve standartlaştırma süreci) hakkında daha fazla bilgi edinin.