Arayüzsüz tarayıcıları, web ve tarayıcı otomasyonu

Size tarayici otomasyonu hakkinda ufak bir bilgi verecegim. Tarayici denince akla web sitelerinde gezmemizi saglayan ekranda, html gosteren bir uygulama geliyor. Cogu tarayici kendine has bir motorla calisiyor arka planda ve ekranimizda sitelerle etkilesime girmemizi sagliyor. Ama aslinda tarayicinin yaptigi is ekranda goruntuleme yapmadan da gizlice yapilabiliyor. Sadece bu isi yapan tarayicilar da mevcut gunumuzde. Bunlara kafasiz (headless’dan cevirme, yani arayuzu olmayan) tarayici deniyor. Genel tuketicini icin anlami olmayan bu konu, programalama ve urun gelistirici kitle tarafindan cok anlamli bir sekilde kullanilabilir durumda.

Ozellikle programatik test ve otomasyon yapma konusunda kafasiz tarayicilari kullanarak bir akisi isletebilirsiniz. Mesela;

  • http://orneksite.com adresini yukle,
  • Sayfa kodlarinin yuklenmesi ve calistirilmasi tamamlandiginda,
  • “Isim” adli alana “Fatih” yazisini gir,
  • “Gonder” adli butona tikla,
  • 5 saniye bekle
  • Ekran goruntusu alip kaydet

gibi bir akisi isletebilirsiniz. Ozellikle arayuz testi ve arayuz akislarini tarayici otomasyonu yapmak gelistirme surecinde cok faydali olabilir.

Sadece ekran goruntusu alma islemi icin bile kafasiz tarayicilari kullanan sirketler var. Ekran goruntusu ustunden bile gelistirme surecinizde 100 sayfalik bir web sitesinde hangi sayfalarda bozukluklar oldugunu otomatik olarak tespit edebilirsiniz. Cok yaygin bir ornek olarak, her gelistirme versiyonunda ekran goruntusu alip bir onceki surumle programatik renk karsilastirmasi yapip her sumude sayfalarin yuzde olarak ne kadar degistigini takip edebilirsiniz mesela. Boylece basit bir css hatasi bile yapsaniz nereleri bozdugunuzu kolayca tespit edebilirsiniz.

Kullanabilecegim arayuzsuz tarayici var mi?

Kafasiz tarayicilardan en bilinenleri Phantom adinda nodejs ile yonetilebilen bir tarayici, Chrome headless adinda chromium projesini baz alan iki projeye bakabilirsiniz.

https://github.com/dhamaniasad/HeadlessBrowsers burada gunumuzdeki tum kafasiz tarayicilari listelemisler.

iOS icin gelistirilen uygulamayi test etmek

Son 4-5 aydir moonit’de moonit’in iphone uygulamasini gelistirmeye calisiyoruz. Web’deki seyler rutin bir sekilde devam ediyor zaten fakat su an genellikle xcode’da calisiyor ve genellikle iphone, ipad gibi cihazlar ustunde testler yapiyorum. Daha once de masaustu veya mobil cihazlar icin uygulama gelistirmisligim var fakat uzun suredir boyle bir gelistirme ortamindan uzaktim. Ozellikle de objective-c gibi statik bir dilden ve apple gibi herseyi low level tutan bir sirketin frameworku/gelistirme ortami ile calismanin web’deki esnek ve hareket edilebilirligin bir yandan programciyi tembellestirdigi, bir yandan da amatorlestirdigini farketmemi sagladi. Her ne kadar yaptiginiz seyi profesyonel yaparsaniz yapin calistiginiz ortam sizi bazi seylere zorlamiyorsa bu kacinilmaz.

Neyse bu yazida bahsetmek istedigim sey web ile iOS gelistirme ortami arasinda test sureci, uygulamaniza bir tester daha dahil etmenin farklarini anlatmak. Web ornegini hepimiz biliyoruz, yine de hizlica ozetliyorum. Bir web uygulamasini gelistirirken eger php gibi bir ortamda calisiyorsaniz zaten uygulamanizi derleme, proje olarak butun halde degerlendirme gibi bir durum soz konusu olmayacaktir, bunun olmamasindan dolayi bircok gelistirici ftp’den sunucularindaki calisan uygulamayi anlik olarak duzenleyip gelistirebiliyorlar, hatta bu bazen kotu bir aliskanlik olarak gelistiricilerin eline yapismis bile olabiliyor. Bir web uygulamasi calisirken guncellenip hatalarin giderilmis olmasi veya degisikliklerin uygulanmasi sadece tester/kullanici’nin ziyaretine kaliyor. Hatta sunucu/domain konfigurasyonunuza gore uygulamanizi daha ilk satirdan itibaren public bir yerde online hale getirip insanlardan test etmelerini isteyebiliyorsunuz. Ne kadar esnek ve guzel degil mi?

Iste bu surec iOS uygulama gelisiminde cok farkli bir perspektifte. Aslinda ben bi sureci, bir masaustu uygulamasi gelistirmeyle esdeger goruyorum. Iphone veya ipad’e uygulama yaziyorsaniz yazdiginiz uygulamayi bir kere app store’a submit ettiginizde onaylandiktan sonra mudahala edemediginiz bir seye donusuyor. Tabi ki update’ler cikarip yeni surumler yayinlayabilirsiniz fakat artik oyle bir konumdasiniz ki her surumu kullanan bir kullanici kitlesiyle karsi karsiyasiniz. Web uygulamasinda boyle bir sey yoktur, uygulamanizi guncellediginizde herkes guncel surume erisir. Farkli surumlerle basa cikma disinda eger bir hata gorurseniz bu hatayi duzeltmek icin yeni surum yayinlamaniz, bu yeni surumu tekrar onay prosedurunden gecirmeli ve kullanicilarin cihazlarini guncellemelerini beklemelisiniz. Dolayisiyla bir hatayi veya gelistirmeyi yayina almak aynen bir dergi cikariyor gibi zahmetli oldugu gibi riskli de. Bu riskten dolayi uygulamanizi yayina almadan once cok iyi ve defalarca test etmeniz gerekiyor. Butun bunlarin yaninda web gibi kucuk parcalara ayirip her gelistirmeden sonra deploy etme aliskanliginizi birakmaniz gerekiyor. Cunku artik o kadar hizli update olabilen ve/veya update edince o problemden kurtuldugunuz bir uygulamaniz yok.

Boyle bir dezavantaji dusundugunuzde cok surum cikarmak yerine az surum cok degisiklik/duzenleme yapmayi tercih etmeye basliyorsunuz. Bunlarin arasinda en onemlisi ilk surum tabi ki. Cunku artik public bir directory’ye kaydoluyorsunuz ve aninda bircok insan uygulamanizi indirmeye/kullanmaya basliyor. Dolayisiyla ilk cikisi saglam ve stabil bir uygulama ile yapmak zorundasiniz.

Bu da test surecini ne kadar dogru yapabildiginizle ilgili. Tabi ki apple’in gelistirici sinirlamalari uygulamanizi kucuk de olsa bir alpha test grubuna dagitmanizi cok engelliyor. Bu konuda birkac arac kullaniyoruz moonit’de. ios uygulamalarinin test grubuna dagitimi ve o test grubuna spesifik cihazlara yuklenebilirligini saglamak icin TestFlight diye bir servisi kullaniyoruz. Servisin yaptigi sey test grubundaki insanlarin cihazlarini bu servise kaydetmesi, sonrasinda da gelistiricinin bu kisileri test grubuna dahil etmesinin ardindan test icin derlenmis uygulama surumlerini bu gruba dagitmak.

Bunun disinda uygulamaniza checkpoint’ler koyup her checkpoint’de tester’dan feedback isteyebiliyorsunuz. TestFlight da size bunlari istatistik ve veri olarak sunuyor.

Eger iOS uygulamasi gelistiren birisiyseniz veya bir iOS gelistirici takiminin parcasiysaniz TestFlight bircok isi kolaylastiracaktir.