Flow Applikationen
mit Behat testen
Markus Goldbeck
Senior Developer typovision GmbH
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
2
Markus Goldbeck
• Senior Developer bei der typovision GmbH
• TYPO3 Neos Member
• @MarkusGoldbeck
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 3
Was ist Behat?
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 4
A php framework for testing
your business expectations.
http://behat.org/
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 5
Aber wir haben doch
Unit und Functional Tests !
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
6
Unit Tests
Unit Tests
• testet funktionale Einzelteile
• sind die inneren und detailliertesten Komponenten der Software
• testet die Module isoliert
• für Modultests müssen externe Komponenten wie
Datenbankverbindungen aufwendig durch Mock-Objekte simuliert
werden
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
7
Functional Tests
Functional Tests
• sind eine Form von Integrationstest
• soll die einzelnen Komponenten zusammen testen
• auch hier muss für das testen mit externen Komponenten wie
Datenbankverbindungen diese aufwendig durch Mock-Objekte
simuliert werden
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 8
Und wofür brauch ich jetzt
noch Behat bzw. BDD ?
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
9
Behavior Driven Development
Behavior Driven Development
• Es werden während der Anforderungsanalyse die
• Aufgaben
• Ziele und
• Ergebnisse textuell festgehalten
• Anforderungen in „Wenn-Dann“- Sätze
• basierend auf ubiquitären Sprache des Domain-Driven Designs
=> einfacher Übergang zwischen fachlicher Anforderung und
Programmiersprache
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
10
Behavior Driven Development
Vorteile
• leichte Lesbarkeit durch „sprechende“ Tests
• Test von „außen“
• könnte vom Stakeholder selber geschrieben werden
• kann von jedem geschrieben werden, der die Business Logik kennt
• durch die Abstraktion der Tests kann sich die Implementierung ändern,
die Funktion bzw. der Test kann aber immer noch funktionieren
=> als Erweiterung für Unit und Functional Tests, um die Business Logik zu
testen
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 11
Einbindung von Behat in
TYPO3 Flow Applikationen
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
12
Einbindung
Flowpack.Behat
• fertiges Flow Package von Christopher Hlubek networkteam GmbH
• https://github.com/Flowpack/Flowpack.Behat
• Einbindung über Composer oder direkt clonen Packages/Application
{
"name": "typo3/neos-base-distribution",
"description" : "TYPO3 Neos Base Distribution",
"license": "GPL-3.0+",
"config": {
"vendor-dir": "Packages/Libraries",
"bin-dir": "bin"
},
"require": {
"typo3/neos": "dev-master",
"typo3/neosdemotypo3org": "dev-master",
"typo3/sitekickstarter": "dev-master"
},
"require-dev": {
"typo3/buildessentials": "dev-master",
"mikey179/vfsstream": "1.1.*",
"flowpack/behat": "dev-master"
},
"minimum-stability": "dev",
"scripts": {
"post-update-cmd": "TYPO3FlowComposerInstallerScripts::postUpdateAndInstall",
"post-install-cmd": "TYPO3FlowComposerInstallerScripts::postUpdateAndInstall"
}
}
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
13
Einbindung
Flow Build path
• https://review.typo3.org/#/c/20756/3
• anlegen des Ordners „Behat“ in „Build“
• Einbindung composer.json
• cd Build/Behat
• composer install --dev
{
	

 "require": {
	

 	

 "behat/behat": "2.4.*",
	

 	

 "behat/mink-extension": "1.0.*",
	

 	

 "behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*"
	

 },
	

 "config": {
	

 	

 "bin-dir": "../../bin/"
	

 }
}
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
14
Einbindung
Konfiguration
• Behat braucht zwei spezielle Flow Kontexts
• „Development/Behat/Settings.yaml“
• wichtig: Angabe eigener Datenbank
• wichtig: Angabe des „drivers“
TYPO3:
Flow:
persistence:
# It is good practice to not specify user name and password of the database
# connection in this global Settings.yaml file. Rather specify them in the
# settings of the respective context (Production / Development ...).
backendOptions:
host: '127.0.0.1' # adjust to your database host
dbname: 'neosdev_behat' # adjust to your database name
user: 'root' # adjust to your database user
password: 'root' # adjust to your database password
driver: pdo_mysql
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
15
Einbindung
Konfiguration
• Behat braucht zwei spezielle Flow Kontexts
• „Testing/Behat/Settings.yaml“
• wichtig: Angabe eigener Datenbank
• wichtig: Angabe des „drivers“
TYPO3:
Flow:
persistence:
# It is good practice to not specify user name and password of the database
# connection in this global Settings.yaml file. Rather specify them in the
# settings of the respective context (Production / Development ...).
backendOptions:
host: '127.0.0.1' # adjust to your database host
dbname: 'neosdev_behat' # adjust to your database name
user: 'root' # adjust to your database user
password: 'root' # adjust to your database password
driver: pdo_mysql
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
16
Einbindung
Konfiguration vhost
• Behat Konfiguration auf die gleiche Flow Installation
• setzen von „SetEnv FLOW_CONTEXT Development/Behat“ Kontext
<VirtualHost *:80>
DocumentRoot "/Applications/MAMP/htdocs/NeosDev/Web/"
ServerName neos.dev
ServerAlias neos.dev
SetEnv FLOW_CONTEXT Development
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Applications/MAMP/htdocs/NeosDev/Web/"
ServerName neos.dev.behat
ServerAlias neos.dev.behat
SetEnv FLOW_CONTEXT Development/Behat
</VirtualHost>
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
17
Einbindung
Anlegen der Features
• anlegen von Behavior/Features/Botstrap/FeatureContext.php
• Kopie von behat.yml.dist anlegen und base_url analog zu vhost setzen
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
18
Einbindung
Anlegen der Features
• anlegen von Behavior/Features/Botstrap/FeatureContext.php
• Kopie von behat.yml.dist anlegen und base_url analog zu vhost setzen
require_once(__DIR__ . '/../../../../../Flowpack.Behat/Tests/Behat/FlowContext.php');
/**
* Features context
*/
class FeatureContext extends MinkContext {
}
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
19
Selenium
Testen von JavaScript
• im Beha
• @javascript neben @fixtures
• Download Selenium Server
• java -jar selenium-server-standalone-2.32.0.jar
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 20
Wie sieht so ein Behat Test
aus ?
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
21
Thema des Slides
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
Scenario:
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
"""
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 22
Gherkin - Gürkchen ?
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
23
Aufbau
Unterteilung der Tests
• Gherkin als Beschreibungssprache
• features
• Background
• scenarios
• Given
• When
• Then
• But
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
24
Aufruf der Tests
Aufruf der Features aus dem Flow root path
• alle features
bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/
behat.yml
• einzelne features
bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/
behat.yml Packages/Application/TYPO3.Neos/Tests/Behavior/features/
ContentModule/PreviewMode.feature
• einzelne scenarios
bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/
behat.yml Packages/Application/TYPO3.Neos/Tests/Behavior/features/
ContentModule/PageTree.feature:26
(c) 2013 - typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 25
So und jetzt bitte Beispiele
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
26
Behat Tests in TYPO3 Neos
Behat Tests sind bereits in TYPO3 Neos integriert
• steht am Anfang
• Ziel Backend stabiler machen und erhalten
• Beispiele /Packages/Application/TYPO3.Neos/Tests/Behavior
(c) 2013 - typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de
TYPO3 Flow Applikation testen mit Behat
27
Quellen
Quellen
• http://behat.org/
• https://de.wikipedia.org/wiki/Modultest
• http://de.wikipedia.org/wiki/Funktionstest
• https://github.com/Flowpack/Flowpack.Behat
• TYPO3.Neos/Documentation/DeveloperGuide/Testing/Behat
• https://speakerdeck.com/everzet/behat-by-example
Vielen Dank für Eure
Aufmerksamkeit

Testing TYPO3 Flow Applications with Behat

  • 1.
    Flow Applikationen mit Behattesten Markus Goldbeck Senior Developer typovision GmbH
  • 2.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 2 Markus Goldbeck • Senior Developer bei der typovision GmbH • TYPO3 Neos Member • @MarkusGoldbeck
  • 3.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 3 Was ist Behat?
  • 4.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 4 A php framework for testing your business expectations. http://behat.org/
  • 5.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 5 Aber wir haben doch Unit und Functional Tests !
  • 6.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 6 Unit Tests Unit Tests • testet funktionale Einzelteile • sind die inneren und detailliertesten Komponenten der Software • testet die Module isoliert • für Modultests müssen externe Komponenten wie Datenbankverbindungen aufwendig durch Mock-Objekte simuliert werden
  • 7.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 7 Functional Tests Functional Tests • sind eine Form von Integrationstest • soll die einzelnen Komponenten zusammen testen • auch hier muss für das testen mit externen Komponenten wie Datenbankverbindungen diese aufwendig durch Mock-Objekte simuliert werden
  • 8.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 8 Und wofür brauch ich jetzt noch Behat bzw. BDD ?
  • 9.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 9 Behavior Driven Development Behavior Driven Development • Es werden während der Anforderungsanalyse die • Aufgaben • Ziele und • Ergebnisse textuell festgehalten • Anforderungen in „Wenn-Dann“- Sätze • basierend auf ubiquitären Sprache des Domain-Driven Designs => einfacher Übergang zwischen fachlicher Anforderung und Programmiersprache
  • 10.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 10 Behavior Driven Development Vorteile • leichte Lesbarkeit durch „sprechende“ Tests • Test von „außen“ • könnte vom Stakeholder selber geschrieben werden • kann von jedem geschrieben werden, der die Business Logik kennt • durch die Abstraktion der Tests kann sich die Implementierung ändern, die Funktion bzw. der Test kann aber immer noch funktionieren => als Erweiterung für Unit und Functional Tests, um die Business Logik zu testen
  • 11.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 11 Einbindung von Behat in TYPO3 Flow Applikationen
  • 12.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 12 Einbindung Flowpack.Behat • fertiges Flow Package von Christopher Hlubek networkteam GmbH • https://github.com/Flowpack/Flowpack.Behat • Einbindung über Composer oder direkt clonen Packages/Application { "name": "typo3/neos-base-distribution", "description" : "TYPO3 Neos Base Distribution", "license": "GPL-3.0+", "config": { "vendor-dir": "Packages/Libraries", "bin-dir": "bin" }, "require": { "typo3/neos": "dev-master", "typo3/neosdemotypo3org": "dev-master", "typo3/sitekickstarter": "dev-master" }, "require-dev": { "typo3/buildessentials": "dev-master", "mikey179/vfsstream": "1.1.*", "flowpack/behat": "dev-master" }, "minimum-stability": "dev", "scripts": { "post-update-cmd": "TYPO3FlowComposerInstallerScripts::postUpdateAndInstall", "post-install-cmd": "TYPO3FlowComposerInstallerScripts::postUpdateAndInstall" } }
  • 13.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 13 Einbindung Flow Build path • https://review.typo3.org/#/c/20756/3 • anlegen des Ordners „Behat“ in „Build“ • Einbindung composer.json • cd Build/Behat • composer install --dev { "require": { "behat/behat": "2.4.*", "behat/mink-extension": "1.0.*", "behat/mink-goutte-driver": "*", "behat/mink-selenium2-driver": "*" }, "config": { "bin-dir": "../../bin/" } }
  • 14.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 14 Einbindung Konfiguration • Behat braucht zwei spezielle Flow Kontexts • „Development/Behat/Settings.yaml“ • wichtig: Angabe eigener Datenbank • wichtig: Angabe des „drivers“ TYPO3: Flow: persistence: # It is good practice to not specify user name and password of the database # connection in this global Settings.yaml file. Rather specify them in the # settings of the respective context (Production / Development ...). backendOptions: host: '127.0.0.1' # adjust to your database host dbname: 'neosdev_behat' # adjust to your database name user: 'root' # adjust to your database user password: 'root' # adjust to your database password driver: pdo_mysql
  • 15.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 15 Einbindung Konfiguration • Behat braucht zwei spezielle Flow Kontexts • „Testing/Behat/Settings.yaml“ • wichtig: Angabe eigener Datenbank • wichtig: Angabe des „drivers“ TYPO3: Flow: persistence: # It is good practice to not specify user name and password of the database # connection in this global Settings.yaml file. Rather specify them in the # settings of the respective context (Production / Development ...). backendOptions: host: '127.0.0.1' # adjust to your database host dbname: 'neosdev_behat' # adjust to your database name user: 'root' # adjust to your database user password: 'root' # adjust to your database password driver: pdo_mysql
  • 16.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 16 Einbindung Konfiguration vhost • Behat Konfiguration auf die gleiche Flow Installation • setzen von „SetEnv FLOW_CONTEXT Development/Behat“ Kontext <VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/NeosDev/Web/" ServerName neos.dev ServerAlias neos.dev SetEnv FLOW_CONTEXT Development </VirtualHost> <VirtualHost *:80> DocumentRoot "/Applications/MAMP/htdocs/NeosDev/Web/" ServerName neos.dev.behat ServerAlias neos.dev.behat SetEnv FLOW_CONTEXT Development/Behat </VirtualHost>
  • 17.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 17 Einbindung Anlegen der Features • anlegen von Behavior/Features/Botstrap/FeatureContext.php • Kopie von behat.yml.dist anlegen und base_url analog zu vhost setzen
  • 18.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 18 Einbindung Anlegen der Features • anlegen von Behavior/Features/Botstrap/FeatureContext.php • Kopie von behat.yml.dist anlegen und base_url analog zu vhost setzen require_once(__DIR__ . '/../../../../../Flowpack.Behat/Tests/Behat/FlowContext.php'); /** * Features context */ class FeatureContext extends MinkContext { }
  • 19.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 19 Selenium Testen von JavaScript • im Beha • @javascript neben @fixtures • Download Selenium Server • java -jar selenium-server-standalone-2.32.0.jar
  • 20.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 20 Wie sieht so ein Behat Test aus ?
  • 21.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 21 Thema des Slides 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 Scenario: 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 """
  • 22.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 22 Gherkin - Gürkchen ?
  • 23.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 23 Aufbau Unterteilung der Tests • Gherkin als Beschreibungssprache • features • Background • scenarios • Given • When • Then • But
  • 24.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 24 Aufruf der Tests Aufruf der Features aus dem Flow root path • alle features bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/ behat.yml • einzelne features bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/ behat.yml Packages/Application/TYPO3.Neos/Tests/Behavior/features/ ContentModule/PreviewMode.feature • einzelne scenarios bin/behat -v -c Packages/Application/TYPO3.Neos/Tests/Behavior/ behat.yml Packages/Application/TYPO3.Neos/Tests/Behavior/features/ ContentModule/PageTree.feature:26
  • 25.
    (c) 2013 -typovision GmbH | Thema der Präsentation | Autor | www.typovision.de 25 So und jetzt bitte Beispiele
  • 26.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 26 Behat Tests in TYPO3 Neos Behat Tests sind bereits in TYPO3 Neos integriert • steht am Anfang • Ziel Backend stabiler machen und erhalten • Beispiele /Packages/Application/TYPO3.Neos/Tests/Behavior
  • 27.
    (c) 2013 -typovision GmbH | TYPO3 Flow Applikation mit Behat testen| Markus Goldbeck | www.typovision.de TYPO3 Flow Applikation testen mit Behat 27 Quellen Quellen • http://behat.org/ • https://de.wikipedia.org/wiki/Modultest • http://de.wikipedia.org/wiki/Funktionstest • https://github.com/Flowpack/Flowpack.Behat • TYPO3.Neos/Documentation/DeveloperGuide/Testing/Behat • https://speakerdeck.com/everzet/behat-by-example
  • 28.
    Vielen Dank fürEure Aufmerksamkeit