selenium ile web testi

26
Web Testi

Upload: mahmut-guendogdu

Post on 15-Apr-2017

142 views

Category:

Software


2 download

TRANSCRIPT

Web Testi

Nedir? Gerekli midir? Zor mudur?• Nedir: Test her çalıştığında web uygulamayı kullanıcı gibi suradaki

textbox nesnesini doldur buradaki butona bas. X yere gitti veya y sonuç verdi ise test başırılıdır değil ise hatalıdır diye raporlayan araçtır.

• Gerekli mi:Testler geliştiriciler için gereksiz gibi gelir ancak varlıkları ile erken hata tespiti ve «bir yeri yaptım , bir yer bozuldu» döngüsünden bizi kurtar. Zaman kazandırır

• Zor mu: Hayır örnek ile göreceğiz.

Selenium• Nedir: Selenium ücretsiz,açık kaynak kodlu, web uygulamalarının test etmek için

oluşturulmuş kütüphanedir. 2004 yılında Jason Huggins (ThoughtWorks) abimiz "fast, fast, fast." baskısından sıkılıp tekrar eden işleri farklı tarayıcılarda gerçekleştirmek için geliştirdiği javascript temelli farkli dillere api leri bulunan kütüpane.

• Selenium için bazıları cross browser test aracı dese de aslında yaptığı şey bir web uygulaması kullanıcısının hareketlerini otomatize etme

• Dört ana bileşenini bulunmaktadir. Selenium IDE, Selenium GRID ,Selenium remote Control ve Selenium Web Driver.

Selenium IDE• Kullanması en kolay Selenium bileşenidir• Aslında bir firefox eklentisidir.• Herhangi bir kod yazmadan test gerçekleştir• Record tuşu ile testi otomatik oluşturabileceğimiz

gibi command,target,value kısımlarını ile seçerek de oluşturabiliriz

• Hızlı test olusturmak için ideal• Sadece firefox desteği mevcut• C#, Java , ruby ... İçin export mevcut

Örnek 1

Selenium Grid ve Remote Control• Selenium Grid: Test senaryolarımızı farklı

ayarlar ile paralel olarak çalıştırmıza olana veren bileşenidir.

• Selenium Remote Control ise uzak testler gerçekleştibilmemizi sağlayan bileşen.

• Selenium Grid+Remote control ile paralel ve remote testler gerçekleştirerek güzel bir comboya imza atmış oluyoruz.

Selenium Web Driver• Test senaryolarımızı Java , ruby , python ve c# gibi bir çok dilde

kodlayarak yazabileceğimiz nunit , xunit gibi birim testleri ile de eşleştirebileceğimiz kodlarımızı lokal makinemizde çeşitli tarayıcılarda çalıştırabildiğimiz selenium bileşenidir.

• Programlanarak ve debug edilerek kullanıldığı ve unit testleri ile kullanılabildiği için benim favorim.

• Çoklu tarayıcı desteği. (firefox,safari,chrome,Internet Explorer)

Komutlar• Sayfa Komutları (Sayfaya git, Refresh ...)• Element Komutlar (value gir, value oku,click ..)• Doğrulama Komutları

Element Secici/Bulucu Türleri (Locator)• ClassName • CssSelector • Id • LinkText • Name • PartialLinkText(string partialLinkTextToFind);• TagName(string tagNameToFind);• XPath(string xpathToFind);

ClassName ile seçim

HTML

<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>

C#

IList<IWebElement> cheeses = driver.FindElements(By.ClassName("cheese"));

ID ile seçim

HTML

<div id="coolestWidgetEvah">...</div>

C#

IWebElement element = driver.FindElement(By.Id("coolestWidgetEvah"));

Name ile seçim

HTML

<input name="cheese" type="text"/>

C#

IWebElement element = driver.FindElement(By.Name("cheese"));

Link Text ile seçim

HTML

<a href="http://google.com/search?q=cheese">cheese</a>

C#

IWebElement element = driver.FindElement(By.LinkText("cheese"));

Partial Link Text ile seçim

HTML

<a href="http://google.com/search?q=cheese"> search for cheese</a>

C#

IWebElement element = driver.FindElement(By.PartialLinkText("cheese"));

Css Selector ile seçim

HTML

<div id="food"><span class="dairy">milk</span><span class="dairy aged">cheese</span></div>

C#

IWebElement element = driver.FindElement(By.CssSelector("#food span.dairy.aged"));

XPath ile seçim

HTML

<input type="text" name="example" /> <INPUT type="text" name="other" />

C#

IWebElement element = driver.FindElement(By.CssSelector("#food span.dairy.aged"));

Selectorlar yetmedi ise Javascript Executor

Örnek 1 IWebElement element = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");

Örnek 2

IList<IWebElement> labels = driver.FindElements(By.TagName("label")); IList<IWebElement> inputs = (IList<IWebElement>)((IJavaScriptExecutor)driver).ExecuteScript("var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);

Ufak bir detay Explicit and Implicit WaitsTestler oluştururken en çok hatayı element henüz hazır değil,sayfa henüz yüklenmemiş ise alıyoruz. Gerek internet hızı, gerek javacriptin kontrolleri dönüştürmesi sebebi ile bazen beklememiz gerekiyor.Implicit Wait: Webdriver a elementi dom dan seçmesi için verebileceğimi timeout değeridriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); ile belirlenir

Explicit Wait: Webdriver a timeout süresi kadar her 500 milisaniyede bir tekrar denemesinı sağlayan yapı. Page reload olduğu veya ajax ile veri beklediğimiz anlarda candır.

var element = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("someid")));

Örnek 2Programatik Yazılmış Web testi

Örnek 3Selenium ide den Export

SpectFlow

Örnek 4SpeckFlow

Selenium.Support• Bu kütüphane ile daha okunaklı (readable) ve daha sürdürülebilir

(maintainable) selenium kodları yazmak mümkün.

İlgili güzel teknolojiler• Seleno (Asp.net Mvc için özelleştirilmiş Strongly typed gibi özellikleri

de bulunan selenium destekli test kütüpanesi)• Telerik Test Framework 2016.1• MS Coded UI• Continuous integration ile Testleri çoklu hale getirme.

Kaynak• http://www.seleniumhq.org/

• http://googletesting.blogspot.com.tr/2007/09/seleniums-inventor.html

• http://www.firatdogan.net/post/124228808606/selenium-1-2-webdriver-ve-grid

• http://www.slideshare.net/yuxel/selenium-14821101

SON