Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Behat from zero to hero
“A practical guide to symfony integration and usage”
Matteo Moretti - Samuele Lilli@SymfonyDayIt -...
Matteo Moretti | Samuele Lilli
WHO ARE WE?
Matteo Moretti Samuele Lilli
Matteo Moretti | Samuele Lilli
OUR
EXPERIENCE
Matteo Moretti | Samuele Lilli
OUR EXPERIENCE
ON nuvola.madisoft.it
https://symfony.com/showcase/191
Matteo Moretti | Samuele Lilli
BEHAVIOUR
DRIVEN
DEVELOPMENT
Matteo Moretti | Samuele Lilli
BEHAT
Matteo Moretti | Samuele Lilli
A LONG TIME
AGO ...
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
TESTS ARE GREEN!
Matteo Moretti | Samuele Lilli
BUT,
SUDDENLY...
Matteo Moretti | Samuele Lilli
AS SOON AS
YOU ADD MORE
TESTS...
Matteo Moretti | Samuele Lilli
HARD TO MAINTAIN
Matteo Moretti | Samuele Lilli
RANDOM
FAILURES
Matteo Moretti | Samuele Lilli
SLOW TESTS
Matteo Moretti | Samuele Lilli
“WHY THE HELL THIS
TEST IS BROKEN?
I DIDN’T MODIFY THAT
CODE”
Matteo Moretti | Samuele Lilli
“MMM, 10 MINUTES TO
ADD A FEATURE. 2
HOURS TO FIX TESTS.”
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
WHAT IS
BEHAT?
Matteo Moretti | Samuele Lilli
IT’S A BDD TOOL!
Matteo Moretti | Samuele Lilli
IT’S A
STORY
BDD TOOL!
Matteo Moretti | Samuele Lilli
WHAT IS A
STORY?
Matteo Moretti | Samuele Lilli
HI! I’M A STORY!
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE
DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NA...
Matteo Moretti | Samuele Lilli
GHERKIN
Matteo Moretti | Samuele Lilli
IT’S A LANGUAGE!
Matteo Moretti | Samuele Lilli
IT’S A BUSINESS
READABLE
DOMAIN SPECIFIC
LANGUAGE!
Matteo Moretti | Samuele Lilli
LIKE YAML
INDENTATION
RULES PARSING
Matteo Moretti | Samuele Lilli
STORIES ARE ORGANIZED IN
FEATURES FILES (.feature)
Matteo Moretti | Samuele Lilli
GIVEN - WHEN - THEN
(AND, BUT) ARE KEYWORDS
THAT MATCH PHP CODE
AND EXECUTE IT.
STEPS
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
REGEX
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
HOW A GOOD
STORY LOOKS
LIKE?
Matteo Moretti | Samuele Lilli
FOCUS ON OUTPUT NOT INPUT
X
Matteo Moretti | Samuele Lilli
√
FOCUS ON OUTPUT NOT INPUT
Matteo Moretti | Samuele Lilli
DON’T USE UI REFERENCES
X
Matteo Moretti | Samuele Lilli
DON’T USE UI REFERENCES
√
Matteo Moretti | Samuele Lilli
USE BACKGROUND
Matteo Moretti | Samuele Lilli
USE TRANSFORMERS
Matteo Moretti | Samuele Lilli
USE TRANSFORMERS
Matteo Moretti | Samuele Lilli
COLLAPSE STEPS AS MUCH AS
POSSIBLE
UNLESS THESE GIVES YOU
BUSINESS/STORY VALUE
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
HOW
MUCH
DETAILS?
Matteo Moretti | Samuele Lilli
“What many people don’t realize is that
different levels of details are appropriate
for dif...
Matteo Moretti | Samuele Lilli
BEHAT → GHERKIN → FEATURES →
STORIES (SCENARIOS) → STEPS →
CONTEXTS
Matteo Moretti | Samuele Lilli
BEHAT → GHERKIN → FEATURES →
STORIES (SCENARIOS) → STEPS →
CONTEXTS
Matteo Moretti | Samuele Lilli
DIVIDE ET IMPERA
Matteo Moretti | Samuele Lilli
ONE FEATURE
PER .FEATURE FILE
Matteo Moretti | Samuele Lilli
DIVIDE FEATURES
AND CONTEXTS
BY DOMAIN SUBJECT
Matteo Moretti | Samuele Lilli
DIVIDE FEATURES
AND CONTEXTS
BY ACTIONS TO BE
PERFORMED ON
DOMAIN SUBJECTS
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
UI
Matteo Moretti | Samuele Lilli
HEADLESS BROWSER EMULATOR
VS
BROWSER CONTROLLER
Matteo Moretti | Samuele Lilli
HEADLESS BROWSER EMULATOR
● pure HTTP spec implementations
● very simple to run and configu...
Matteo Moretti | Samuele Lilli
BROWSER CONTROLLER
● aim to control a real browser
● complex to configure
● slow
● JS/AJAX ...
Matteo Moretti | Samuele Lilli
YOU MAY NEED BOTH OF THEM
Matteo Moretti | Samuele Lilli
MINK
http://mink.behat.org/en/latest/
Matteo Moretti | Samuele Lilli
BEHAT PARSES SCENARIOS
+
MINK BROWSES THE WEB
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
HOW TO USE MINK
FROM CONTEXT
CLASSES?
Matteo Moretti | Samuele Lilli
PAGE OBJECT PATTERN
https://martinfowler.com/bliki/PageObject.html
Matteo Moretti | Samuele Lilli
https://github.com/sensiolabs/BehatPageObjectExtension
BEHAT PAGE OBJECT EXTENSION
Matteo Moretti | Samuele Lilli
ASSERTIONS
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
AJAX
Matteo Moretti | Samuele Lilli
DON’T PULL YOUR
TESTS WITH SLEEP()
CALLS
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
UI END-TO-END TESTS
● BRITTLE
● EXPENSIVE TO WRITE
● TIME CONSUMING TO RUN
● MORE AFFECTED ...
Matteo Moretti | Samuele Lilli
Matteo Moretti | Samuele Lilli
https://martinfowler.com/bliki/TestPyramid.html
Matteo Moretti | Samuele Lilli
DO YOU REALLY NEED A REAL JS BROWSER?
https://blog.eleven-labs.com/en/behat-structure-funct...
Matteo Moretti | Samuele Lilli
STICK TO A BROWSER EMULATOR
USE @javascript ONLY WHEN NEEDED
Matteo Moretti | Samuele Lilli
FIXTURES DATA
● NO FIXTURES (INTEGRATION TESTS)
● LOAD FIXTURES AT RUNTIME
● IN MEMORY DBMS...
Matteo Moretti | Samuele Lilli
PARALLELISM
● SPEED UP PERFORMANCE
● COMPLEX SETUP AND DEBUG
DO YOU NEED IT?
Matteo Moretti | Samuele Lilli
FASTEST
https://github.com/liuggio/fastest
bin/behat --list-scenarios --config
tests/behat/...
Matteo Moretti | Samuele Lilli
ISSUES
HARD TO MAINTAIN
RANDOM FAILURES
SLOW TESTS
Matteo Moretti | Samuele Lilli
SAVE OUTPUT FOR
FAILED TESTS
Matteo Moretti | Samuele Lilli
DEBUG
Matteo Moretti | Samuele Lilli
CLI DEBUG
● BEHAT CODE
● APP CODE IF INTEGRATION TEST (NO UI)
● APP CODE IF UI TESTS WITH B...
Matteo Moretti | Samuele Lilli
WEB DEBUG
FOR APP CODE IF BROWSER CONTROLLER
(SELENIUM)
Matteo Moretti | Samuele Lilli
RECAP
Matteo Moretti | Samuele Lilli
TREAT YOUR TEST
CODE AS YOUR
APP (PROD) CODE
Matteo Moretti | Samuele Lilli
WRITE CLEAN,
CONCISE AND
WELL ORGANIZED
FEATURES
Matteo Moretti | Samuele Lilli
SPLIT YOUR
CONTEXT CLASSES
AND
COMPOSE / REUSE
THEM
Matteo Moretti | Samuele Lilli
REMEMBER TEST PYRAMID
FOCUS ON INTEGRATION LEVEL
Matteo Moretti | Samuele Lilli
USE @javascript WISELY
USE PAGE OBJECTS FOR UI
Matteo Moretti | Samuele Lilli
THANK YOU
Matteo Moretti | Samuele Lilli
WE ARE HIRING!
(wanna join? ask us or visit our website)
labs.madisoft.it
Matteo Moretti | Samuele Lilli
https://joind.in/talk/707a1
QUESTIONS?
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Behat from zero to hero: "a practical guide to Symfony integration and usage"
Upcoming SlideShare
Loading in …5
×

Behat from zero to hero: "a practical guide to Symfony integration and usage"

1,615 views

Published on

2017 Symfony day slides

Published in: Software
  • Be the first to comment

Behat from zero to hero: "a practical guide to Symfony integration and usage"

  1. 1. Behat from zero to hero “A practical guide to symfony integration and usage” Matteo Moretti - Samuele Lilli@SymfonyDayIt - 20 Ottobre 2017 - Milano
  2. 2. Matteo Moretti | Samuele Lilli WHO ARE WE? Matteo Moretti Samuele Lilli
  3. 3. Matteo Moretti | Samuele Lilli OUR EXPERIENCE
  4. 4. Matteo Moretti | Samuele Lilli OUR EXPERIENCE ON nuvola.madisoft.it https://symfony.com/showcase/191
  5. 5. Matteo Moretti | Samuele Lilli BEHAVIOUR DRIVEN DEVELOPMENT
  6. 6. Matteo Moretti | Samuele Lilli BEHAT
  7. 7. Matteo Moretti | Samuele Lilli A LONG TIME AGO ...
  8. 8. Matteo Moretti | Samuele Lilli
  9. 9. Matteo Moretti | Samuele Lilli
  10. 10. Matteo Moretti | Samuele Lilli TESTS ARE GREEN!
  11. 11. Matteo Moretti | Samuele Lilli BUT, SUDDENLY...
  12. 12. Matteo Moretti | Samuele Lilli AS SOON AS YOU ADD MORE TESTS...
  13. 13. Matteo Moretti | Samuele Lilli HARD TO MAINTAIN
  14. 14. Matteo Moretti | Samuele Lilli RANDOM FAILURES
  15. 15. Matteo Moretti | Samuele Lilli SLOW TESTS
  16. 16. Matteo Moretti | Samuele Lilli “WHY THE HELL THIS TEST IS BROKEN? I DIDN’T MODIFY THAT CODE”
  17. 17. Matteo Moretti | Samuele Lilli “MMM, 10 MINUTES TO ADD A FEATURE. 2 HOURS TO FIX TESTS.”
  18. 18. Matteo Moretti | Samuele Lilli
  19. 19. Matteo Moretti | Samuele Lilli
  20. 20. Matteo Moretti | Samuele Lilli WHAT IS BEHAT?
  21. 21. Matteo Moretti | Samuele Lilli IT’S A BDD TOOL!
  22. 22. Matteo Moretti | Samuele Lilli IT’S A STORY BDD TOOL!
  23. 23. Matteo Moretti | Samuele Lilli WHAT IS A STORY?
  24. 24. Matteo Moretti | Samuele Lilli HI! I’M A STORY!
  25. 25. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  26. 26. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  27. 27. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  28. 28. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  29. 29. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  30. 30. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  31. 31. Matteo Moretti | Samuele Lilli EXAMPLE OF HOW THE SYSTEM SHOULD BEHAVE DESCRIPTION OF A GIVEN REQUIREMENT IN UBIQUITOUS NATURAL LANGUAGE UNDERSTANDABLE BY ALL STAKEHOLDERS OF THE PROJECT ACCEPTANCE TEST DOCUMENTATION THAT NEVER GOES OUT TO DATE WRITTEN IN GHERKIN EXECUTABLE SPECIFICATION A STORY IS ...
  32. 32. Matteo Moretti | Samuele Lilli GHERKIN
  33. 33. Matteo Moretti | Samuele Lilli IT’S A LANGUAGE!
  34. 34. Matteo Moretti | Samuele Lilli IT’S A BUSINESS READABLE DOMAIN SPECIFIC LANGUAGE!
  35. 35. Matteo Moretti | Samuele Lilli LIKE YAML INDENTATION RULES PARSING
  36. 36. Matteo Moretti | Samuele Lilli STORIES ARE ORGANIZED IN FEATURES FILES (.feature)
  37. 37. Matteo Moretti | Samuele Lilli GIVEN - WHEN - THEN (AND, BUT) ARE KEYWORDS THAT MATCH PHP CODE AND EXECUTE IT. STEPS
  38. 38. Matteo Moretti | Samuele Lilli
  39. 39. Matteo Moretti | Samuele Lilli REGEX
  40. 40. Matteo Moretti | Samuele Lilli
  41. 41. Matteo Moretti | Samuele Lilli
  42. 42. Matteo Moretti | Samuele Lilli
  43. 43. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  44. 44. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  45. 45. Matteo Moretti | Samuele Lilli HOW A GOOD STORY LOOKS LIKE?
  46. 46. Matteo Moretti | Samuele Lilli FOCUS ON OUTPUT NOT INPUT X
  47. 47. Matteo Moretti | Samuele Lilli √ FOCUS ON OUTPUT NOT INPUT
  48. 48. Matteo Moretti | Samuele Lilli DON’T USE UI REFERENCES X
  49. 49. Matteo Moretti | Samuele Lilli DON’T USE UI REFERENCES √
  50. 50. Matteo Moretti | Samuele Lilli USE BACKGROUND
  51. 51. Matteo Moretti | Samuele Lilli USE TRANSFORMERS
  52. 52. Matteo Moretti | Samuele Lilli USE TRANSFORMERS
  53. 53. Matteo Moretti | Samuele Lilli COLLAPSE STEPS AS MUCH AS POSSIBLE UNLESS THESE GIVES YOU BUSINESS/STORY VALUE
  54. 54. Matteo Moretti | Samuele Lilli
  55. 55. Matteo Moretti | Samuele Lilli HOW MUCH DETAILS?
  56. 56. Matteo Moretti | Samuele Lilli “What many people don’t realize is that different levels of details are appropriate for different scenarios in the same system - sometimes in the same feature - depending on what it is they’re describing” (The cucumber book - Matt Wynne, Aslak Hellesoy)
  57. 57. Matteo Moretti | Samuele Lilli BEHAT → GHERKIN → FEATURES → STORIES (SCENARIOS) → STEPS → CONTEXTS
  58. 58. Matteo Moretti | Samuele Lilli BEHAT → GHERKIN → FEATURES → STORIES (SCENARIOS) → STEPS → CONTEXTS
  59. 59. Matteo Moretti | Samuele Lilli DIVIDE ET IMPERA
  60. 60. Matteo Moretti | Samuele Lilli ONE FEATURE PER .FEATURE FILE
  61. 61. Matteo Moretti | Samuele Lilli DIVIDE FEATURES AND CONTEXTS BY DOMAIN SUBJECT
  62. 62. Matteo Moretti | Samuele Lilli DIVIDE FEATURES AND CONTEXTS BY ACTIONS TO BE PERFORMED ON DOMAIN SUBJECTS
  63. 63. Matteo Moretti | Samuele Lilli
  64. 64. Matteo Moretti | Samuele Lilli
  65. 65. Matteo Moretti | Samuele Lilli UI
  66. 66. Matteo Moretti | Samuele Lilli HEADLESS BROWSER EMULATOR VS BROWSER CONTROLLER
  67. 67. Matteo Moretti | Samuele Lilli HEADLESS BROWSER EMULATOR ● pure HTTP spec implementations ● very simple to run and configure ● no need of a real browser: speed ● usually no JS/AJAX support
  68. 68. Matteo Moretti | Samuele Lilli BROWSER CONTROLLER ● aim to control a real browser ● complex to configure ● slow ● JS/AJAX support
  69. 69. Matteo Moretti | Samuele Lilli YOU MAY NEED BOTH OF THEM
  70. 70. Matteo Moretti | Samuele Lilli MINK http://mink.behat.org/en/latest/
  71. 71. Matteo Moretti | Samuele Lilli BEHAT PARSES SCENARIOS + MINK BROWSES THE WEB
  72. 72. Matteo Moretti | Samuele Lilli
  73. 73. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  74. 74. Matteo Moretti | Samuele Lilli HOW TO USE MINK FROM CONTEXT CLASSES?
  75. 75. Matteo Moretti | Samuele Lilli PAGE OBJECT PATTERN https://martinfowler.com/bliki/PageObject.html
  76. 76. Matteo Moretti | Samuele Lilli https://github.com/sensiolabs/BehatPageObjectExtension BEHAT PAGE OBJECT EXTENSION
  77. 77. Matteo Moretti | Samuele Lilli ASSERTIONS
  78. 78. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  79. 79. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  80. 80. Matteo Moretti | Samuele Lilli AJAX
  81. 81. Matteo Moretti | Samuele Lilli DON’T PULL YOUR TESTS WITH SLEEP() CALLS
  82. 82. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  83. 83. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  84. 84. Matteo Moretti | Samuele Lilli UI END-TO-END TESTS ● BRITTLE ● EXPENSIVE TO WRITE ● TIME CONSUMING TO RUN ● MORE AFFECTED BY NON-DETERMINISM
  85. 85. Matteo Moretti | Samuele Lilli
  86. 86. Matteo Moretti | Samuele Lilli https://martinfowler.com/bliki/TestPyramid.html
  87. 87. Matteo Moretti | Samuele Lilli DO YOU REALLY NEED A REAL JS BROWSER? https://blog.eleven-labs.com/en/behat-structure-functional-tests/
  88. 88. Matteo Moretti | Samuele Lilli STICK TO A BROWSER EMULATOR USE @javascript ONLY WHEN NEEDED
  89. 89. Matteo Moretti | Samuele Lilli FIXTURES DATA ● NO FIXTURES (INTEGRATION TESTS) ● LOAD FIXTURES AT RUNTIME ● IN MEMORY DBMS (SQLITE)
  90. 90. Matteo Moretti | Samuele Lilli PARALLELISM ● SPEED UP PERFORMANCE ● COMPLEX SETUP AND DEBUG DO YOU NEED IT?
  91. 91. Matteo Moretti | Samuele Lilli FASTEST https://github.com/liuggio/fastest bin/behat --list-scenarios --config tests/behat/behat.yml | bin/fastest -vv --process=4 "bin/behat --stop-on-failure --config tests/behat/behat.yml {}"
  92. 92. Matteo Moretti | Samuele Lilli ISSUES HARD TO MAINTAIN RANDOM FAILURES SLOW TESTS
  93. 93. Matteo Moretti | Samuele Lilli SAVE OUTPUT FOR FAILED TESTS
  94. 94. Matteo Moretti | Samuele Lilli DEBUG
  95. 95. Matteo Moretti | Samuele Lilli CLI DEBUG ● BEHAT CODE ● APP CODE IF INTEGRATION TEST (NO UI) ● APP CODE IF UI TESTS WITH BROWSER EMULATOR (BrowserKit)
  96. 96. Matteo Moretti | Samuele Lilli WEB DEBUG FOR APP CODE IF BROWSER CONTROLLER (SELENIUM)
  97. 97. Matteo Moretti | Samuele Lilli RECAP
  98. 98. Matteo Moretti | Samuele Lilli TREAT YOUR TEST CODE AS YOUR APP (PROD) CODE
  99. 99. Matteo Moretti | Samuele Lilli WRITE CLEAN, CONCISE AND WELL ORGANIZED FEATURES
  100. 100. Matteo Moretti | Samuele Lilli SPLIT YOUR CONTEXT CLASSES AND COMPOSE / REUSE THEM
  101. 101. Matteo Moretti | Samuele Lilli REMEMBER TEST PYRAMID FOCUS ON INTEGRATION LEVEL
  102. 102. Matteo Moretti | Samuele Lilli USE @javascript WISELY USE PAGE OBJECTS FOR UI
  103. 103. Matteo Moretti | Samuele Lilli THANK YOU
  104. 104. Matteo Moretti | Samuele Lilli WE ARE HIRING! (wanna join? ask us or visit our website) labs.madisoft.it
  105. 105. Matteo Moretti | Samuele Lilli https://joind.in/talk/707a1
  106. 106. QUESTIONS?

×