Behat is a php framework for testing business expectations. It was introduced into TYPO3 Neos during a code sprint in Karlsruhe for testing its Backend.
This presentation was hold at the TYPO3 Camp Stuttgart 2013 and it should give an overview of Behat, BDD, and how it can be integrated in a TYPO3 Flow Application.
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
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