Behat ve mink İle Davraniş odaklı
Gelİştİrme
Mustafa İLERİ
Mayıs'14 PHP - IST
Mustafa İlerİ
@mustafaileri
http://tr.linkedin.com/in/mustafaileri
mi@mustafaileri.com
www.mustafaileri.com
https://github...
Behavior Driven
Development
Davranıs odaklı gelistirme, test odaklı gelistirmeye
dayanarak ortaya çıkmıs bir yaılım gelist...
NASIL ORTAYA
ÇIKTI ?
TDD gibi çevik yöntemler kullanan Dan North, hep aynı sorunlar ve yanlıs
anlamalarla karsılasıyor.
Ge...
public class CustomerLookupTest extends TestCase {
testFindsCustomerById() {
...
}
testFailsForDuplicateCustomers() {
...
...
Test Odaklı Gelİştİrme
Birim Testler:
Her bir birim için yapması gereken isi doğrulayan testler olmalı.
Entegrasyon Testle...
BDD VS TDDDavranış Odaklı GELİŞTİRME
Fonksiyonel Testler:
Uyulama üzerinde yer alan bilesenler doğru isi yapıyor mu?
Kulla...
BDD VS TDD
BDDtestlerİyazılıMürünlerİnİzİn
sonkullanıcıvekullanıcıkabul
testlerİİçİnHARCANANzamanıönemlİ
ölçüde azaltır.
BDDtestlerİy...
BDDTESTLERİYenİÖzellİKlerİN
analİZlerİNİNveYazılımın
sorumluluklarınındahanetBİRşekİLDE
GELİŞTİRİCİYE BİldİrİlmesİNİ SAĞLA...
ÇALIŞAN UYGULAMALAR GELİŞTİRİRSİNİZ VE
GELİŞTİRDİĞİNİZUYGULAMALARIN
SÜRDÜRÜLEBİLİRLİĞİNDEN
EMİN OLURSUNUZ.
ÇALIŞAN UYGULAM...
DÖKÜMANTASYON
GELİŞTİRİLEN UYGULAMANIN DÖKÜMANTASYONUNUN SÜREKLİ GÜNCEL TUTULMASINI SAĞLAR.
Testler normal İnsanların okuy...
BDD TERMİNOLOJİLERİ
Story: Olusan veya olusması muhtemel durumu bildirir.
Scenario: Olusan veya olusması muhtemel durumlar...
Scrum
Hızlı Bakış
Yaılım Mühendisliği'nde bir uygulama gelistirme yöntemidir. Bu gelistirme yönteminin temel
özelliği gözlemci, gelistirmeci...
As a <role>,
I want <something>
So that <benefit>
„
Product
Owner
Development
Team
Product
Backlog
Sprint
Backlog
Product
Hikayelerivedavranıssaltestleriolusturur
Takım taraf...
GHERKINGHERKIN
Herkes tarafından anlasılabilen ve yaılabilen test ayırıstırıcısı.
Feature: Some terse yet descriptive text of what is desired
Textual description of the business value of this feature
Busi...
Cucumber
(Ruby)
jbehave
(java)
nbehave
(c#)
specflow
(c#)
freshen
(python)
lettuce
(python)
BEHAT
(PHP)
İs gelistirmenin beklentilerini test etmeye yarayan bir PHP çatısıdır.
Konstantin Kudryashov tarafından gelistirildi.
En g...
Test Projesi Olusturmak
Behat'ı yükledikten sonra test diini olusturulup test projesi için gerekli kod alt
yapısı olusturu...
Özellik Tanımlama(Feature)
Behat'ta istenilen özellik önce tanımlanır ve belirtilir sonrasında bu tanımlamaya
göre impleme...
Senaryo Tanımlama(Scenario)
Bir sonraki adım, belirtilen özelliklerin senaryoları belirlenir.
Scenario: List 2 files in a ...
Adım Tanımları(Step Defnitons)
Senaryoda bulunan beklentileri anlatan anlamli cümleler ve bunların yapacağı
isin tanımı.
1...
<?php
use BehatBehatContextBehatContext;
use BehatGherkinNodePyStringNode;
class FeatureContext extends BehatContext
{
pri...
MINKMINK
PHP 5.3+ üzerinde çalısan web
uygulamalrı için kullanıcı
kabul test çatısıdır.
Kurulum ve Hizli Konfİgürasyon
{
"require": {
"behat/behat": "2.4.*@stable",
"behat/mink": "1.4.*@stable",
"behat/mink-ext...
Mink Hazır Adım tanımlamaları
Given /^(?:|I )am on (?:|the )homepage$/
When /^(?:|I )go to (?:|the )homepage$/
Given /^(?:...
Mink Hazır Adım tanımlamaları
Then /^(?:|I )should not see text matching (?P<pattern>"(?:[^"]|")*")$/
Then /^the response ...
Örnek Uygulama
Feature: php-ist 2014 etkinlik bilgilerini kontrol eder
Bu test etkinligin tarih yer ve konusmaci bilgileri...
Örnek Uygulama
<?php
use BehatMinkExtensionContextMinkContext;
class FeatureContext extends MinkContext
{
/**
* @Then /^I ...
Örnek Uygulamalar
https://github.com/phpistorg/behat-testleri
https://github.com/phpistorg/behat-mink-testleri
Jıra EklentİSİ
Jira eklentisi, BDD testlerinin uygun formatta yaılarak bu testlerin gelistiriciye is
olarak gelmesini sağl...
Kaynakça
http://dannorth.net/introducing-bdd/
http://en.wikipedia.org/wiki/Behavior-driven_development
http://behat.org/
h...
Upcoming SlideShare
Loading in …5
×

Davranis Odakli Gelistirmeye Giris, Behat ve Mink

1,466 views

Published on

Davranis odakli gelistirmeye giris ve BDD testlerinin Behat ve Mink kullanilarak gelistirilmesi.
BDD testlerinin cevik yazilim gelistirme metodolojilerindeki yeri.

Published in: Software
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,466
On SlideShare
0
From Embeds
0
Number of Embeds
325
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Davranis Odakli Gelistirmeye Giris, Behat ve Mink

  1. 1. Behat ve mink İle Davraniş odaklı Gelİştİrme Mustafa İLERİ Mayıs'14 PHP - IST
  2. 2. Mustafa İlerİ @mustafaileri http://tr.linkedin.com/in/mustafaileri mi@mustafaileri.com www.mustafaileri.com https://github.com/mustafaileri http://www.slideshare.net/mustafaileri
  3. 3. Behavior Driven Development Davranıs odaklı gelistirme, test odaklı gelistirmeye dayanarak ortaya çıkmıs bir yaılım gelistime sürecidir. Dan North tarafından ortaya atıldı. Amaç : Senaryoların önceden belirlenerek bunlara göre gelistirme yapmak.
  4. 4. NASIL ORTAYA ÇIKTI ? TDD gibi çevik yöntemler kullanan Dan North, hep aynı sorunlar ve yanlıs anlamalarla karsılasıyor. Gelistiriciler tarafında problem olan ve cevap bekleyen sorular: 1. Nereden başlamalıyım? 2. Neyi test etmeli veya neyi test etmemeliyim? 3. Testleri nasıl adlandırmalıyım? ...
  5. 5. public class CustomerLookupTest extends TestCase { testFindsCustomerById() { ... } testFailsForDuplicateCustomers() { ... } ... } CustomerLookup - finds customer by id - fails for duplicate customers - ... TDD Testİ BDD Testİ Kurgulanan İlk BDD TESTİ Herşey Chris Stevenson'ın yadığı, yanıltıcı derecede basit jUnit testini daha anlasılır daha kısa hale getirmek ile basladı.
  6. 6. Test Odaklı Gelİştİrme Birim Testler: Her bir birim için yapması gereken isi doğrulayan testler olmalı. Entegrasyon Testleri: Parçalar birbirleri ile düzgün çalısabiliyor mu? ... Genelde gelistirici tarafından gelistirme asamasında koda yönelik testler yaılır. BDD VS TDD
  7. 7. BDD VS TDDDavranış Odaklı GELİŞTİRME Fonksiyonel Testler: Uyulama üzerinde yer alan bilesenler doğru isi yapıyor mu? Kullanıcı KabulTestleri: Uygulama ve bilesenler belirlenen kriterlere göre uygun ve düzgün çalısıyor mu? ... Genelde is sahibi ve analistler tarafından anali sırasında davranısa yönelik testler yaılır.
  8. 8. BDD VS TDD
  9. 9. BDDtestlerİyazılıMürünlerİnİzİn sonkullanıcıvekullanıcıkabul testlerİİçİnHARCANANzamanıönemlİ ölçüde azaltır. BDDtestlerİyazılıMürünlerİnİzİn sonkullanıcıvekullanıcıkabul testlerİİçİnHARCANANzamanıönemlİ ölçüde azaltır.
  10. 10. BDDTESTLERİYenİÖzellİKlerİN analİZlerİNİNveYazılımın sorumluluklarınındahanetBİRşekİLDE GELİŞTİRİCİYE BİldİrİlmesİNİ SAĞLAR BDDTESTLERİYenİÖzellİKlerİN analİZlerİNİNveYazılımın sorumluluklarınındahanetBİRşekİLDE GELİŞTİRİCİYE BİldİrİlmesİNİ SAĞLAR.
  11. 11. ÇALIŞAN UYGULAMALAR GELİŞTİRİRSİNİZ VE GELİŞTİRDİĞİNİZUYGULAMALARIN SÜRDÜRÜLEBİLİRLİĞİNDEN EMİN OLURSUNUZ. ÇALIŞAN UYGULAMALAR GELİŞTİRİRSİNİZ VE GELİŞTİRDİĞİNİZUYGULAMALARIN SÜRDÜRÜLEBİLİRLİĞİNDEN EMİN OLURSUNUZ.
  12. 12. DÖKÜMANTASYON GELİŞTİRİLEN UYGULAMANIN DÖKÜMANTASYONUNUN SÜREKLİ GÜNCEL TUTULMASINI SAĞLAR. Testler normal İnsanların okuyabileceğİ şekİldedİr.
  13. 13. BDD TERMİNOLOJİLERİ Story: Olusan veya olusması muhtemel durumu bildirir. Scenario: Olusan veya olusması muhtemel durumlar için senaryoları bildirir. Role: Verilen senaryoyu hangi rolle gerçeklestireceğimii belirtir.
  14. 14. Scrum Hızlı Bakış
  15. 15. Yaılım Mühendisliği'nde bir uygulama gelistirme yöntemidir. Bu gelistirme yönteminin temel özelliği gözlemci, gelistirmeci ve tekrara dayalı olmasıdır. Scrum Ken Schwaber ve Jef Sutherland tarafından 1990'ların başında gelistirildi ve temel fkirleri Schwaber (Schwaber 2004) tarafından ortaya konmustur. SCRUM' A HIZLI BAKIŞ Scrum Master Ürün Sahibi Takım * Kullanıcı * Yönetici ROLLER toplantilar Sprint Planlama Toplantıları Günlük Scrum Sprint Değerlendirmesi Retropektif Hikayeler belirlenir, davranıssal testler ile yaılım ekibine iletilir. Davranıssal testler çalıstırılarak, Yayına alınmaya haır hikayeler belirlenir
  16. 16. As a <role>, I want <something> So that <benefit> „
  17. 17. Product Owner Development Team Product Backlog Sprint Backlog Product Hikayelerivedavranıssaltestleriolusturur Takım tarafından belirleniyor. Gelistirmeyiyapar Testleri çalıstırarak ürünün uygulnluğunu test eder 1 2 3 4
  18. 18. GHERKINGHERKIN Herkes tarafından anlasılabilen ve yaılabilen test ayırıstırıcısı.
  19. 19. Feature: Some terse yet descriptive text of what is desired Textual description of the business value of this feature Business rules that govern the scope of the feature Any additional information that will make the feature easier to understand Scenario: Some determinable business situation Given some precondition And some other precondition When some action by the actor And some other action And yet another action Then some testable outcome is achieved And something else we can check happens too Scenario: A different situation ...
  20. 20. Cucumber (Ruby) jbehave (java) nbehave (c#) specflow (c#) freshen (python) lettuce (python) BEHAT (PHP)
  21. 21. İs gelistirmenin beklentilerini test etmeye yarayan bir PHP çatısıdır. Konstantin Kudryashov tarafından gelistirildi. En güncel sürümü 3.0 BEHAT Nedİr? { "require": { "behat/behat": "2.4.*@stable" }, "config": { "bin-dir": "bin/" } } KURULUM kullanım bin/behat –init vim features/your_first.feature ------------------------------------------- Feature: Your first feature In order to start using Behat As a manager or developer I need to try Scenario: Successfully describing scenario Given there is something When I do something Then I should see something ------------------------------------------- bin/behat
  22. 22. Test Projesi Olusturmak Behat'ı yükledikten sonra test diini olusturulup test projesi için gerekli kod alt yapısı olusturulur. cd ls_project app/behat –-init +d features - place your *.feature files here +d features/bootstrap - place your context classes here +f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here
  23. 23. Özellik Tanımlama(Feature) Behat'ta istenilen özellik önce tanımlanır ve belirtilir sonrasında bu tanımlamaya göre implemente edilir. # features/ls.feature Feature: ls In order to see the directory structure As a UNIX user I need to be able to list the current directory's contents
  24. 24. Senaryo Tanımlama(Scenario) Bir sonraki adım, belirtilen özelliklerin senaryoları belirlenir. Scenario: List 2 files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """ Step Defnitions Diyelim ki Eğer ki O zaman
  25. 25. Adım Tanımları(Step Defnitons) Senaryoda bulunan beklentileri anlatan anlamli cümleler ve bunların yapacağı isin tanımı. 1 scenario (1 undefined) 5 steps (5 undefined) 0m0.02s (9.55Mb) --- FeatureContext has missing steps. Define them with these snippets: /** * @Given I am in a directory :arg1 */ public function iAmInADirectory($arg1) { throw new PendingException(); } /** * @Given I have a file named :arg1 */ public function iHaveAFileNamed($arg1) { throw new PendingException(); } /** * @When I run :arg1 */ public function iRun($arg1) { throw new PendingException(); } /** * @Then I should get: */ public function iShouldGet(PyStringNode $string) { throw new PendingException(); }
  26. 26. <?php use BehatBehatContextBehatContext; use BehatGherkinNodePyStringNode; class FeatureContext extends BehatContext { private $output; /** @Given /^I am in a directory "([^"]*)"$/ */ public function iAmInADirectory($dir) { if (!file_exists($dir)) { mkdir($dir); } chdir($dir); } /** @Given /^I have a file named "([^"]*)"$/ */ public function iHaveAFileNamed($file) { touch($file); } /** @When /^I run "([^"]*)"$/ */ public function iRun($command) { exec($command, $output); $this->output = trim(implode("n", $output)); } /** @Then /^I should get:$/ */ public function iShouldGet(PyStringNode $string) { if ((string) $string !== $this->output) { throw new Exception( "Actual output is:n" . $this->output ); } } }
  27. 27. MINKMINK PHP 5.3+ üzerinde çalısan web uygulamalrı için kullanıcı kabul test çatısıdır.
  28. 28. Kurulum ve Hizli Konfİgürasyon { "require": { "behat/behat": "2.4.*@stable", "behat/mink": "1.4.*@stable", "behat/mink-extension": "*", "behat/mink-goutte-driver": "*", "behat/mink-selenium2-driver": "*" }, "minimum-stability": "dev", "config": { "bin-dir": "bin/" } } use BehatMinkExtensionContextMinkContext; class FeatureContext extends MinkContext { ......
  29. 29. Mink Hazır Adım tanımlamaları Given /^(?:|I )am on (?:|the )homepage$/ When /^(?:|I )go to (?:|the )homepage$/ Given /^(?:|I )am on "(?P<page>[^"]+)"$/ When /^(?:|I )go to "(?P<page>[^"]+)"$/ When /^(?:|I )reload the page$/ When /^(?:|I )move backward one page$/ When /^(?:|I )move forward one page$/ When /^(?:|I )press "(?P<button>(?:[^"]|")*)"$/ When /^(?:|I )follow "(?P<link>(?:[^"]|")*)"$/ When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with "(?P<value>(?:[^"]|")*)"$/ When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with:$/ When /^(?:|I )fill in "(?P<value>(?:[^"]|")*)" for "(?P<field>(?:[^"]|")*)"$/ When /^(?:|I )fill in the following:$/ When /^(?:|I )select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/ When /^(?:|I )additionally select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/ When /^(?:|I )check "(?P<option>(?:[^"]|")*)"$/ When /^(?:|I )uncheck "(?P<option>(?:[^"]|")*)"$/ When /^(?:|I )attach the file "(?P[^"]*)" to "(?P<field>(?:[^"]|")*)"$/ Then /^(?:|I )should be on "(?P<page>[^"]+)"$/ Then /^(?:|I )should be on (?:|the )homepage$/ Then /^the (?i)url(?-i) should match (?P<pattern>"([^"]|")*")$/ Then /^the response status code should be (?P<code>d+)$/ Then /^the response status code should not be (?P<code>d+)$/ Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)"$/ Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)"$/ Then /^(?:|I )should see text matching (?P<pattern>"(?:[^"]|")*")$/
  30. 30. Mink Hazır Adım tanımlamaları Then /^(?:|I )should not see text matching (?P<pattern>"(?:[^"]|")*")$/ Then /^the response should contain "(?P<text>(?:[^"]|")*)"$/ Then /^the response should not contain "(?P<text>(?:[^"]|")*)"$/ Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)" in the "(?P<element>[^"]*)" element$/ Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)" in the "(?P<element>[^"]*)" element$/ Then /^the "(?P<element>[^"]*)" element should contain "(?P<value>(?:[^"]|")*)"$/ Then /^the "(?P<element>[^"]*)" element should not contain "(?P<value>(?:[^"]|")*)"$/ Then /^(?:|I )should see an? "(?P<element>[^"]*)" element$/ Then /^(?:|I )should not see an? "(?P<element>[^"]*)" element$/ Then /^the "(?P<field>(?:[^"]|")*)" field should contain "(?P<value>(?:[^"]|")*)"$/ Then /^the "(?P<field>(?:[^"]|")*)" field should not contain "(?P<value>(?:[^"]|")*)"$/ Then /^the "(?P<checkbox>(?:[^"]|")*)" checkbox should be checked$/ Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" (?:is|should be) checked$/ Then /^the "(?P<checkbox>(?:[^"]|")*)" checkbox should not be checked$/ Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" should (?:be unchecked|not be checked)$/ Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" is (?:unchecked|not checked)$/ Then /^(?:|I )should see (?P<num>d+) "(?P<element>[^"]*)" elements?$/ Then /^print current URL$/ Then /^print last response$/ Then /^show last response$/
  31. 31. Örnek Uygulama Feature: php-ist 2014 etkinlik bilgilerini kontrol eder Bu test etkinligin tarih yer ve konusmaci bilgilerini kontrol eder. Background: Given I am on homepage Scenario: Etkinligin "3rd May 2014" tarihinde olup olmadigini kontrol edelim. Then I should see "3rd May 2014" Scenario: Konusmacilari test edelim. Then I follow "Speakers" Then I should see "Mehmet Karcı" Then I should see "Osman Üngür" Then I should see "Hugo Hamon" Then I should see "Mustafa İleri" Then I should see "Lemi Orhan Ergin" Then I should see "Ramazan Korkmaz" Then I should see "Hugo Hamon" Then I should see "Alvaro Videla" Then I should see "Suat İmamoğlu" Then I should not see "Fatih Gürsoy" @javascript Scenario: Google sayfa testi Then I search on google with "php ist" Then I should see "php-ist PHP Conference 2014" @javascript Scenario: Mekan kisminda google maps haritasini kontrol edelim Then check maps on venue
  32. 32. Örnek Uygulama <?php use BehatMinkExtensionContextMinkContext; class FeatureContext extends MinkContext { /** * @Then /^I search on google with "([^"]*)"$/ */ public function iSearchOnGoogleWith($arg1) { $this->getSession()->visit('http://www.google.com.tr'); $page = $this->getSession()->getPage(); $page->find('css', 'input[type=text]')->setValue($arg1); $page->find('css', 'button')->click(); $this->getSession()->wait(500); } /** * @Then /^check maps on venue$/ */ public function checkMapsOnVenue() { $page = $this->getSession()->getPage(); $page->findLink('Venue')->click(); $this->assertElementOnPage( 'html body div div#schedule.section section#venue.section div.inner div.content div#map_canvas div.gm-style'); } }
  33. 33. Örnek Uygulamalar https://github.com/phpistorg/behat-testleri https://github.com/phpistorg/behat-mink-testleri
  34. 34. Jıra EklentİSİ Jira eklentisi, BDD testlerinin uygun formatta yaılarak bu testlerin gelistiriciye is olarak gelmesini sağlar. Eğer testler basarılı olursa is cozulerek kapatılır. Aksi durumda basarısız olma nedeni isin içine yaılır. http://etensions.behat.org/jira-etension/
  35. 35. Kaynakça http://dannorth.net/introducing-bdd/ http://en.wikipedia.org/wiki/Behavior-driven_development http://behat.org/ http://www.slideshare.net/mhelmich/t3con13?qid=bf6b3e7d-560d-4a03-8f60-20683c7cc2cb&v=qf1&b=&from_search=3 http://www.slideshare.net/davidcontavalli1/zf2-bdd?qid=bf6b3e7d-560d-4a03-8f60-20683c7cc2cb&v=qf1&b=&from_search=1 http://www.slideshare.net/nyccamp/behat-by-seth-cohn http://www.slideshare.net/headrevision/web-acceptance-testing-with-behat?qid=6021a166-eac0-435d-bf66-ee08d4c7bdef&v=qf1&b=&from_search=7 http://selimober.com/blog/2013/07/19/bdd-ye-giris/ http://www.mountaingoatsofware.com/blog/the-forgotten-layer-of-the-test-automation-pyramid http://watirmelon.com/2011/06/10/yet-another-sofware-testing-pyramid/ http://martinfowler.com/bliki/TestPyramid.html http://mink.behat.org/ http://www.mustafaileri.com/pot/60579550214/behat-ve-mink-ile-bdd-testleri-eski-ya

×