PyCon Ukraine 2014

23
AUTOMATED FUNCTIONAL TESTS BASED ON SELENIUM FOR DJANGO PROJECTS A NDRII S OLDATENKO

Transcript of PyCon Ukraine 2014

AUTOMATED FUNCTIONAL TESTS BASED ON SELENIUM FOR DJANGO PROJECTS

ANDRII SOLDATENKO

ABOUT ME:

• TEST  AUTOMATION  LEAD  AT  LUXOFT  • PYTHON  DEVELOPER  AT  TOPTAL  • @A_SOLDATENKO  • HTTP://ANDRIISOLDATENKO.GITHUB.IO/

“TESTS ARE THE PROGRAMMER’S STONE, TRANSMUTING FEAR INTO BOREDOM.” - KENT BECK

3

WE DON’T HAVE TIME FOR TESTS!

TEST AUTOMATION PYRAMID:

Unit tests

Integration tests

Functional tests

TASK: HOW TO AUTOMATE FUNCTIONAL TESTS FOR WEB?

ABOUT SELENIUM:

• PIP  INSTALL  -­‐U  SELENIUM

• SELENIUM  WEBDRIVER  API  NOW  IN  W3C  DRAFT  SPECIFICATION

• RUN  IN  MANY  BROWSERS

• AND  OS

• CAN  BE  CONTROLLED  BY  DIFFERENT  PROGRAMMING  LANGUAGES

7

DEMO

WHEN  NUMBER  OF  TESTS  IS  GROWING:

• WE  NEED  TO  DECREASE  TEST  EXECUTION  TIME

• WE  NEED  TO  USE  DESIGN  PATTERNS  (I.E  PAGEOBJECT,  PAGEFACTORY)

• WE  NEED  TO  USE  SKELETON  FOR  ORGANIZING  TESTS

SKELETON  FOR  ORGANIZING  TESTS:

DESIGN  PATTERNS:

SIMPLE  SELENIUM  TEST  WITHOUT  PAGEOBJECT:

SIMPLE  SELENIUM  TEST  WITH  PAGEOBJECT:

SIMPLE  SELENIUM  TEST  WITH  PAGEOBJECT:

SIMPLE  SELENIUM  TEST  WITH  PAGEOBJECT:

WHAT  ABOUT  FT  IN  DJANGO?

HOW  TO  DECREASE  TEST  EXECUTION  TIME  ?

• SET  UP  LOCAL  SELENIUM  GRID

• USE  SAUCE  LABS

• USE  PYTEST  OR  NOSE

ABOUT  SELENIUM  GRID:

Node

Node

Node

Hub

SETUP  SELENIUM  GRID  LOCALLY:

SCHEME  FOR  SELENIUM  GRID  +  CONCURRENT  TEST  EXECUTION

py.testunittest.TestCase

Node

Node

Node

Hub

BEST  PRACTICE  FOR  TEST  DATA  GENERATION  AND  

• DJANGO  LOREM  IPSUM  UTILS  • DON’T  USE  FIXTURES  • USE  FACTORY  BOY  +  FAKER  INSTEAD  OF  FIXTURES

BEST  PRACTICE  FOR  CREATION  FT  TESTS:

• USE  EXPLICIT  WAITS  RATHER  THAN  IMPLICIT  WAITS.  

• USE  CODE—HELPER  METHODS  IN  BASE  CLASS,  OR  PAGE  PATTERN.

• AVOID  DOUBLE-­‐TESTING  FUNCTIONALITY

• LOOK  INTO  BDD  TOOLS

• USE  CONTINUOUS  INTEGRATION

22

?

QUESTIONS:

23

• @A_SOLDATENKO  • HTTPS://ANDRIISOLDATENKO.GITHUB.IO/

THANK  YOU: