SlideShare a Scribd company logo
1 of 47
A U T O M A T E D - T E S T I N G . I N F O
Easy selenium
test automation
on Python
Миша Поляруш
http://automated-testing.info
A U T O M A T E D - T E S T I N G . I N F O
Михаил Поляруш
Независимый консультант по
автоматизации тестирования ПО и
тренер
Имею более 7 лет опыта работы в
ИТ сфере
Увлекаюсь личностным развитием,
управлением времени и Python
2
Развитие тестирования и автоматизации
тестирования на территории Украины
http://poliarush.com
http://lessons2.ru
http://automated-testing
A U T O M A T E D - T E S T I N G . I N F O
Learn python online
Михаил Поляруш обучает python-у и
автоматизации тестирования на python на
онлайн сервисе практического обучения
http://lessons2.ru
Пройти «Python for testers» (unittests, py.test,
webdriver и т.д.) можно прямо сейчас.
Регистрируйся на http://lessons2.ru и окунись в
мир увлекательного python под чутким
руководством опытного тренера
3
A U T O M A T E D - T E S T I N G . I N F O4
COMPUTER PROGRAMMING
FOR EVERYBODY
A U T O M A T E D - T E S T I N G . I N F O
Сегодня мы поговорим о …
• Что такое Python?
• Как настроить Python
среду?
• Как сделать первый
Selenium тест на Python?
• Как сделать из простого
теста сложный?
5
A U T O M A T E D - T E S T I N G . I N F O
2 минуты простой тест
7
8 A U T O M A T E D - T E S T I N G . I N F O
А за сколько
времени вы
напишите такой
тест?
A U T O M A T E D - T E S T I N G . I N F O9
МОЯ ЦЕЛЬ СЕГОДНЯ
Каждый сможет написать маленький тест
автоматизации веб приложения на
python и будет знать куда нужно копать
чтобы сделать python тесты еще лучше!
A U T O M A T E D - T E S T I N G . I N F O
Python
10
Python 1.0 - January 1994
Python 2.0 - October 16, 2000
Python 3.0 - December 3, 2008
Guido van Rossum
Middle-layer between shell
scripting and system
programming
СPython, Jython,
IronPython, PyPy
A U T O M A T E D - T E S T I N G . I N F O
Компании и проекты
11
A U T O M A T E D - T E S T I N G . I N F O15
>>> a = 6 ## set a variable in this interpreter session
>>> a ## entering an expression prints its value
6
>>> a + 2
8
>>> a = 'hi' ## a can hold a string just as well
>>> a
'hi'
>>> len(a) ## call the len() function on a string
2
>>> foo(a) ## try something that doesn't work
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'foo' is not defined
>>> ctrl-d ## type ctrl-d to exit (ctrl-z on Windows)
A U T O M A T E D - T E S T I N G . I N F O
Примеры простых конструкций
18
if speed >= 80:
print 'You are so busted'
else:
print 'Have a nice day'
s = 'hi'
print s[1] # i
print len(s) ## 2
print s + ' there' ## hi there
colors = ['red', 'blue', 'green']
print colors[0] ## red
print colors[2] ## green
print len(colors) ## 3
squares = [1, 4, 9, 16]
sum = 0
for num in squares:
sum += num
print sum ## 30
nums = [1, 2, 3, 4]
squares = [ n * n for n in nums ] ## [1, 4, 9, 16]
result = x if a > b else y
A U T O M A T E D - T E S T I N G . I N F O
Пример использования
19
# Echo the contents of a file
f = open('foo.txt', 'rU')
for line in f:
print line
f.close()
## Given a url, try to retrieve it.
def wget(url):
ufile = urllib.urlopen(url) ## get
text = ufile.read() ## read all its text
print text
A U T O M A T E D - T E S T I N G . I N F O
program.py
20
#!/usr/bin/python
import sys
# Gather our code in a main() function
def main():
print 'Hello there', sys.argv[1]
if __name__ == '__main__':
main()
def repeat(s, exclaim):
"""Returns the string s repeated 3 times.
If exclaim is true, adds exclamation marks.
"""
result = s + s + s
if exclaim:
result = result + '!!!'
return result
Все выполняется в runtime
Модули запускают код сверху вниз
A U T O M A T E D - T E S T I N G . I N F O
Class
21
class MyClass(object):
search = "result"
def my_method(self):
print(self.search)
obj = MyClass()
obj.my_method()
val = obj.search
A U T O M A T E D - T E S T I N G . I N F O22
ENVIRONMENT
A U T O M A T E D - T E S T I N G . I N F O
Для начала
23
A U T O M A T E D - T E S T I N G . I N F O
pip и easy_install
http://pypi.python.org
pip install packagename
easy_install packagename
24
A U T O M A T E D - T E S T I N G . I N F O
virtualenv
Делает
изолированный
environment
Не использует
глобальный site-
packages
Не требует root прав
25
$ virtualenv directory
$ virtualenv --
python=/path/to/dir
$ cd directory
$ . bin/activate
$ easy_install whatever
$ pip install whatever
...do stuff...
$ deactivate
SELENIUM ТЕСТ НА PYTHON
Просто? Сложно? Судите сами
28 A U T O M A T E D - T E S T I N G . I N F O
dir(webdriver)
['ActionChains', 'Chrome',
'DesiredCapabilities', …,
'remote']
help(webdriver)
PACKAGE CONTENTS
chrome (package)
common (package)
…
support (package)
VERSION
2.11.0
pip install -U selenium
A U T O M A T E D - T E S T I N G . I N F O29
>>> from selenium import webdriver
>>> driver = webdriver.Firefox()
>>> driver.get("http://google.com")
A U T O M A T E D - T E S T I N G . I N F O
first_test.py
30
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
assert "Yahoo!" in browser.title
elem = browser.find_element_by_name("p") # Find the query box
elem.send_keys("seleniumhq" + Keys.RETURN)
time.sleep(0.2) # Let the page load, will be added to the API
try:
browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
except NoSuchElementException:
assert 0, "can't find seleniumhq"
browser.close()
33 A U T O M A T E D - T E S T I N G . I N F O
advanced_test.py
def test_search(self,page=YahooHomePage()):
page.open()
page.search = "automated testing"
assert "Test automation" in page.first_link
Читабельность
Поддержка
Простота
A U T O M A T E D - T E S T I N G . I N F O
Learn python online
Михаил Поляруш обучает python-у и
автоматизации тестирования на python на
онлайн сервисе практического обучения
http://lessons2.ru
Пройти «Python for testers» (unittests, py.test,
webdriver и т.д.) можно прямо сейчас.
Регистрируйся на http://lessons2.ru и окунись в
мир увлекательного python под чутким
руководством опытного тренера
34
PYTHON ПРИПРАВЫ
37 A U T O M A T E D - T E S T I N G . I N F O
Декомпозиция
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yahoo.com") # Load page
assert "Yahoo!" in browser.title
elem = browser.find_element_by_name("p") # Find the query box
elem.send_keys("seleniumhq" + Keys.RETURN)
time.sleep(0.2) # Let the page load, will be added to the API
try:
browser.find_element_by_xpath("//a[contains(@href,
'http://seleniumhq.org')]")
except NoSuchElementException:
assert 0, "can't find seleniumhq"
browser.close()
38 A U T O M A T E D - T E S T I N G . I N F O
Singleton
class Wrapper(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Wrapper, cls).__new__(cls, *args, **kwargs)
return cls._instance
def remote_webdriver(self, *args, **kwargs):
self.connection = Firefox()
return self.connection
BaseTestCase
TestCase MyPage
Page
TextElement LinkElement
Element
39 A U T O M A T E D - T E S T I N G . I N F O
class BaseTestCase(unittest.TestCase):
def setUp(self):
self.driver = Wrapper().remote_webdriver()
self.driver.implicitly_wait(10)
def tearDown(self):
self.driver.close()
BaseTestCase
TestCase MyPage
Page
TextElement LinkElement
Element
40 A U T O M A T E D - T E S T I N G . I N F O
class TextElement(Element):
def __set__(self, obj, val):
e = Wrapper().connection.find_element_by_name(self._locator)
e.send_keys(val)
def __get__(self, obj, cls=None):
try:
e = Wrapper().connection.find_element_by_name(self._locator)
return str(e.text)
except Exception, err:
raise err
BaseTestCase
TestCase MyPage
Page
TextElement LinkElement
Element
page.search = "seleniumhq"
my_link = page.first_link
41 A U T O M A T E D - T E S T I N G . I N F O
class GoogleHomePage(object):
_url = "http://google.com"
locators = {
"search":"q",
"result":"(//a[ancestor::div/@id='ires'])[1]"
}
search = TextElement(locators["search"])
first_link = LinkElement(locators["result"])
def open(self):
Wrapper().connection.get(self._url)
BaseTestCase
TestCase MyPage
Page
TextElement LinkElement
Element
42 A U T O M A T E D - T E S T I N G . I N F O
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get("http://google.com")
elem = browser.find_element_by_name("q")
elem.send_keys("test automation")
WebDriverWait(browser, 30).until(
lambda driver: driver.find_element_by_xpath("(//a[ancestor::div/@id='ires'])[1]")
)
first_link = browser.find_element_by_xpath("(//a[ancestor::div/@id='ires'])[1]")
assert "Test automation" in first_link.text
browser.close()
BaseTestCase
TestCase MyPage
Page
TextElement LinkElement
Element
def test_search1(self,page=GoogleHomePage()):
page.open()
page.search = "automated testing"
assert "Test automation" in page.first_link
43 A U T O M A T E D - T E S T I N G . I N F O
A U T O M A T E D - T E S T I N G . I N F O
Learn python online
Михаил Поляруш обучает python-у и
автоматизации тестирования на python на
онлайн сервисе практического обучения
http://lessons2.ru
Пройти «Python for testers» (unittests, py.test,
webdriver и т.д.) можно прямо сейчас.
Регистрируйся на http://lessons2.ru и окунись в
мир увлекательного python под чутким
руководством опытного тренера
44
A U T O M A T E D - T E S T I N G . I N F O
Библиотеки
• Py.test
• Nose
• PyYaml
• Sphinx
• Harmcrest
• …
45
46 A U T O M A T E D - T E S T I N G . I N F O
Py.test параметризация
# ./test_example.py
def pytest_generate_tests(metafunc):
if "numiter" in metafunc.funcargnames:
for i in range(10):
metafunc.addcall(funcargs=dict(numiter=i))
def test_func(numiter):
assert numiter < 9
49 A U T O M A T E D - T E S T I N G . I N F O
Py.test marks
@py.test.mark.bugs
def test_untitled(self):
sel = self.selenium
C:>py.test -kbugs parameters_tests.py
C:>py.test -k-bugs parameters_tests.py
50 A U T O M A T E D - T E S T I N G . I N F O
Py.test parallel run
C:>py.test –n 10 test.py
A U T O M A T E D - T E S T I N G . I N F O
Py.test, а также …
Выгружать результаты в Pocoo pastebin service
Вывод в формате JUnit
Интерактивный дебаг
Прекращение прогона при определенных условиях
Расширенное логирование
Измерение покрытия
и многое другое
51
52 A U T O M A T E D - T E S T I N G . I N F O
Py.yaml
import yaml
class BaseTestCase(unittest.TestCase):
def _read_configuration(self, path="common/conf.yaml"):
return yaml.load(file(path, 'r'))["selenium"]
def setUp(self):
conf = self._read_configuration()
self.selenium = selenium(
conf['host'],
conf['port'],
'*'+conf['browser'],
conf['url'])
self.selenium.start()
selenium:
host: localhost
port: 4444
browser: firefox
url: http://localhost:8082/app/
53 A U T O M A T E D - T E S T I N G . I N F O
Sphinx
54 A U T O M A T E D - T E S T I N G . I N F O
Logging
Continuous
integration
Parameterization
Parallel run
Documentation
Coverage
Debugging
def test_search(self,page=GoogleHomePage()):
page.open()
page.search = "automated testing"
assert "Test automation" in page.first_link
A U T O M A T E D - T E S T I N G . I N F O55
• Быстрое развёртывание
• Гибкость языка программирования
• Легкость написания тестов
• Обширное количество дополнительных
библиотек
• Интеграция с другими приложениями и
инструментами
A U T O M A T E D - T E S T I N G . I N F O
Что еще ?
• Sikuli
• RobotFramework
• Lettuce
• SST
• Pywinauto
• TextTest
56
57 A U T O M A T E D - T E S T I N G . I N F O
Открой интерпретатор и
напиши Selenium тест на Python
Все что вы увидели дает отличные результаты на практике.
С радостью помогу всем и хочу чтобы питонистов стало
больше 
A U T O M A T E D - T E S T I N G . I N F O
Learn python online
Михаил Поляруш обучает python-у и
автоматизации тестирования на python на
онлайн сервисе практического обучения
http://lessons2.ru
Пройти «Python for testers» (unittests, py.test,
webdriver и т.д.) можно прямо сейчас.
Регистрируйся на http://lessons2.ru и окунись в
мир увлекательного python под чутким
руководством опытного тренера
58
59 A U T O M A T E D - T E S T I N G . I N F O
Михаил Поляруш
Независимый консультант по
автоматизации тестирования
ПО и тренер
телефон: +380501716246
email: mykhailo.poliarush@gmail.com
skype: mykhailo.poliarush
twitter: @mpoliarush
http://poliarush.com
http://automated-testing.info
http://lessons2.ru

More Related Content

What's hot

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Нескучное тестирование с pytest
Нескучное тестирование с pytestНескучное тестирование с pytest
Нескучное тестирование с pytestRoman Imankulov
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаPython Meetup
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
Белов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхБелов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхqasib
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
Spring Puzzlers by Evgeny Borisov, Baruch Sadogursky
Spring Puzzlers by Evgeny Borisov, Baruch SadogurskySpring Puzzlers by Evgeny Borisov, Baruch Sadogursky
Spring Puzzlers by Evgeny Borisov, Baruch SadogurskyJavaDayUA
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - MultithreadingNoveo
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием PerlAnatoly Sharifulin
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmYandex
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojoAnton Ukolov
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 

What's hot (20)

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
Нескучное тестирование с pytest
Нескучное тестирование с pytestНескучное тестирование с pytest
Нескучное тестирование с pytest
 
Spring puzzlers
Spring puzzlersSpring puzzlers
Spring puzzlers
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Белов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхБелов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложениях
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Spring Puzzlers by Evgeny Borisov, Baruch Sadogursky
Spring Puzzlers by Evgeny Borisov, Baruch SadogurskySpring Puzzlers by Evgeny Borisov, Baruch Sadogursky
Spring Puzzlers by Evgeny Borisov, Baruch Sadogursky
 
Spring the ripper
Spring the ripperSpring the ripper
Spring the ripper
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
 
Gen server
Gen serverGen server
Gen server
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npm
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojo
 
Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 

Viewers also liked

Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in PythonIgor Khrol
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksLohika_Odessa_TechTalks
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Mykhailo Poliarush
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Iakiv Kramarenko
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'tsPekka Klärck
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework IntroductionPekka Klärck
 
Разработка веб-сервисов осень 2013 лекция 5
Разработка веб-сервисов осень 2013 лекция 5Разработка веб-сервисов осень 2013 лекция 5
Разработка веб-сервисов осень 2013 лекция 5Technopark
 
How to write first selenium webdriver test?
How to write first selenium webdriver test?How to write first selenium webdriver test?
How to write first selenium webdriver test?Mykhailo Poliarush
 
Testing for people who hate testing
Testing for people who hate testingTesting for people who hate testing
Testing for people who hate testingSam Bolgert
 
Mozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, HowMozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, HowStephen Donner
 
How to write locators xpath css?
How to write locators xpath css?How to write locators xpath css?
How to write locators xpath css?Mykhailo Poliarush
 
SchoolCTF 2012 - Acid
SchoolCTF 2012 - AcidSchoolCTF 2012 - Acid
SchoolCTF 2012 - Aciddelimitry
 
Mozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver frameworkMozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver frameworkdavehunt82
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015Chun-Yu Tseng
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Technopark
 
Разработка и тестирование интернета вещей. Тренды индустрии
Разработка и тестирование интернета вещей. Тренды индустрииРазработка и тестирование интернета вещей. Тренды индустрии
Разработка и тестирование интернета вещей. Тренды индустрииcorehard_by
 

Viewers also liked (20)

Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in Python
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python?
 
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
Selenide alternative in Python - Introducing Selene [SeleniumCamp 2016]
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
 
Разработка веб-сервисов осень 2013 лекция 5
Разработка веб-сервисов осень 2013 лекция 5Разработка веб-сервисов осень 2013 лекция 5
Разработка веб-сервисов осень 2013 лекция 5
 
Mock testing mit Python
Mock testing mit PythonMock testing mit Python
Mock testing mit Python
 
What is regular expression?
What is regular expression?What is regular expression?
What is regular expression?
 
How to write first selenium webdriver test?
How to write first selenium webdriver test?How to write first selenium webdriver test?
How to write first selenium webdriver test?
 
Testing for people who hate testing
Testing for people who hate testingTesting for people who hate testing
Testing for people who hate testing
 
Mozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, HowMozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, How
 
How to write locators xpath css?
How to write locators xpath css?How to write locators xpath css?
How to write locators xpath css?
 
SchoolCTF 2012 - Acid
SchoolCTF 2012 - AcidSchoolCTF 2012 - Acid
SchoolCTF 2012 - Acid
 
Mozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver frameworkMozilla Web QA - Evolution of our Python WebDriver framework
Mozilla Web QA - Evolution of our Python WebDriver framework
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
 
Python in Test automation
Python in Test automationPython in Test automation
Python in Test automation
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2
 
Разработка и тестирование интернета вещей. Тренды индустрии
Разработка и тестирование интернета вещей. Тренды индустрииРазработка и тестирование интернета вещей. Тренды индустрии
Разработка и тестирование интернета вещей. Тренды индустрии
 

Similar to Easy selenium test automation on python

[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
 
Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1Yandex
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonPython Meetup
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonMaxim Kulsha
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinSemen Martynov
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
Py con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circlePy con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circleRostislav Bryzgunov
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circlewebriders
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиSQALab
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Машинное обучение на платформе .NET
Машинное обучение на платформе .NETМашинное обучение на платформе .NET
Машинное обучение на платформе .NETRoman Nevolin
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 

Similar to Easy selenium test automation on python (20)

[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1Виктор Ашик - Python, part 1
Виктор Ашик - Python, part 1
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel Pin
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
Py con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circlePy con 2010_django_project_dev_full_circle
Py con 2010_django_project_dev_full_circle
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circle
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасности
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Машинное обучение на платформе .NET
Машинное обучение на платформе .NETМашинное обучение на платформе .NET
Машинное обучение на платформе .NET
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 

More from Mykhailo Poliarush

atdays.com - How to do a technical speach?
atdays.com - How to do a technical speach?atdays.com - How to do a technical speach?
atdays.com - How to do a technical speach?Mykhailo Poliarush
 
iSpeaker Club Interaction and Behaviour
iSpeaker Club Interaction and BehaviouriSpeaker Club Interaction and Behaviour
iSpeaker Club Interaction and BehaviourMykhailo Poliarush
 
Sikuli Test Automation - How to do it?
Sikuli Test Automation - How to do it?Sikuli Test Automation - How to do it?
Sikuli Test Automation - How to do it?Mykhailo Poliarush
 
What is page object in selenium webdriver?
What is page object in selenium webdriver?What is page object in selenium webdriver?
What is page object in selenium webdriver?Mykhailo Poliarush
 
Что такое Robot Framework?
Что такое Robot Framework?Что такое Robot Framework?
Что такое Robot Framework?Mykhailo Poliarush
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Mykhailo Poliarush
 

More from Mykhailo Poliarush (7)

atdays.com - How to do a technical speach?
atdays.com - How to do a technical speach?atdays.com - How to do a technical speach?
atdays.com - How to do a technical speach?
 
iSpeaker Club Interaction and Behaviour
iSpeaker Club Interaction and BehaviouriSpeaker Club Interaction and Behaviour
iSpeaker Club Interaction and Behaviour
 
What is technical speach?
What is technical speach?What is technical speach?
What is technical speach?
 
Sikuli Test Automation - How to do it?
Sikuli Test Automation - How to do it?Sikuli Test Automation - How to do it?
Sikuli Test Automation - How to do it?
 
What is page object in selenium webdriver?
What is page object in selenium webdriver?What is page object in selenium webdriver?
What is page object in selenium webdriver?
 
Что такое Robot Framework?
Что такое Robot Framework?Что такое Robot Framework?
Что такое Robot Framework?
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?
 

Easy selenium test automation on python

  • 1. A U T O M A T E D - T E S T I N G . I N F O Easy selenium test automation on Python Миша Поляруш http://automated-testing.info
  • 2. A U T O M A T E D - T E S T I N G . I N F O Михаил Поляруш Независимый консультант по автоматизации тестирования ПО и тренер Имею более 7 лет опыта работы в ИТ сфере Увлекаюсь личностным развитием, управлением времени и Python 2 Развитие тестирования и автоматизации тестирования на территории Украины http://poliarush.com http://lessons2.ru http://automated-testing
  • 3. A U T O M A T E D - T E S T I N G . I N F O Learn python online Михаил Поляруш обучает python-у и автоматизации тестирования на python на онлайн сервисе практического обучения http://lessons2.ru Пройти «Python for testers» (unittests, py.test, webdriver и т.д.) можно прямо сейчас. Регистрируйся на http://lessons2.ru и окунись в мир увлекательного python под чутким руководством опытного тренера 3
  • 4. A U T O M A T E D - T E S T I N G . I N F O4 COMPUTER PROGRAMMING FOR EVERYBODY
  • 5. A U T O M A T E D - T E S T I N G . I N F O Сегодня мы поговорим о … • Что такое Python? • Как настроить Python среду? • Как сделать первый Selenium тест на Python? • Как сделать из простого теста сложный? 5
  • 6. A U T O M A T E D - T E S T I N G . I N F O 2 минуты простой тест 7
  • 7. 8 A U T O M A T E D - T E S T I N G . I N F O А за сколько времени вы напишите такой тест?
  • 8. A U T O M A T E D - T E S T I N G . I N F O9 МОЯ ЦЕЛЬ СЕГОДНЯ Каждый сможет написать маленький тест автоматизации веб приложения на python и будет знать куда нужно копать чтобы сделать python тесты еще лучше!
  • 9. A U T O M A T E D - T E S T I N G . I N F O Python 10 Python 1.0 - January 1994 Python 2.0 - October 16, 2000 Python 3.0 - December 3, 2008 Guido van Rossum Middle-layer between shell scripting and system programming СPython, Jython, IronPython, PyPy
  • 10. A U T O M A T E D - T E S T I N G . I N F O Компании и проекты 11
  • 11. A U T O M A T E D - T E S T I N G . I N F O15 >>> a = 6 ## set a variable in this interpreter session >>> a ## entering an expression prints its value 6 >>> a + 2 8 >>> a = 'hi' ## a can hold a string just as well >>> a 'hi' >>> len(a) ## call the len() function on a string 2 >>> foo(a) ## try something that doesn't work Traceback (most recent call last): File "", line 1, in ? NameError: name 'foo' is not defined >>> ctrl-d ## type ctrl-d to exit (ctrl-z on Windows)
  • 12. A U T O M A T E D - T E S T I N G . I N F O Примеры простых конструкций 18 if speed >= 80: print 'You are so busted' else: print 'Have a nice day' s = 'hi' print s[1] # i print len(s) ## 2 print s + ' there' ## hi there colors = ['red', 'blue', 'green'] print colors[0] ## red print colors[2] ## green print len(colors) ## 3 squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print sum ## 30 nums = [1, 2, 3, 4] squares = [ n * n for n in nums ] ## [1, 4, 9, 16] result = x if a > b else y
  • 13. A U T O M A T E D - T E S T I N G . I N F O Пример использования 19 # Echo the contents of a file f = open('foo.txt', 'rU') for line in f: print line f.close() ## Given a url, try to retrieve it. def wget(url): ufile = urllib.urlopen(url) ## get text = ufile.read() ## read all its text print text
  • 14. A U T O M A T E D - T E S T I N G . I N F O program.py 20 #!/usr/bin/python import sys # Gather our code in a main() function def main(): print 'Hello there', sys.argv[1] if __name__ == '__main__': main() def repeat(s, exclaim): """Returns the string s repeated 3 times. If exclaim is true, adds exclamation marks. """ result = s + s + s if exclaim: result = result + '!!!' return result Все выполняется в runtime Модули запускают код сверху вниз
  • 15. A U T O M A T E D - T E S T I N G . I N F O Class 21 class MyClass(object): search = "result" def my_method(self): print(self.search) obj = MyClass() obj.my_method() val = obj.search
  • 16. A U T O M A T E D - T E S T I N G . I N F O22 ENVIRONMENT
  • 17. A U T O M A T E D - T E S T I N G . I N F O Для начала 23
  • 18. A U T O M A T E D - T E S T I N G . I N F O pip и easy_install http://pypi.python.org pip install packagename easy_install packagename 24
  • 19. A U T O M A T E D - T E S T I N G . I N F O virtualenv Делает изолированный environment Не использует глобальный site- packages Не требует root прав 25 $ virtualenv directory $ virtualenv -- python=/path/to/dir $ cd directory $ . bin/activate $ easy_install whatever $ pip install whatever ...do stuff... $ deactivate
  • 20. SELENIUM ТЕСТ НА PYTHON Просто? Сложно? Судите сами
  • 21. 28 A U T O M A T E D - T E S T I N G . I N F O dir(webdriver) ['ActionChains', 'Chrome', 'DesiredCapabilities', …, 'remote'] help(webdriver) PACKAGE CONTENTS chrome (package) common (package) … support (package) VERSION 2.11.0 pip install -U selenium
  • 22. A U T O M A T E D - T E S T I N G . I N F O29 >>> from selenium import webdriver >>> driver = webdriver.Firefox() >>> driver.get("http://google.com")
  • 23. A U T O M A T E D - T E S T I N G . I N F O first_test.py 30 from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys import time browser = webdriver.Firefox() # Get local session of firefox browser.get("http://www.yahoo.com") # Load page assert "Yahoo!" in browser.title elem = browser.find_element_by_name("p") # Find the query box elem.send_keys("seleniumhq" + Keys.RETURN) time.sleep(0.2) # Let the page load, will be added to the API try: browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]") except NoSuchElementException: assert 0, "can't find seleniumhq" browser.close()
  • 24. 33 A U T O M A T E D - T E S T I N G . I N F O advanced_test.py def test_search(self,page=YahooHomePage()): page.open() page.search = "automated testing" assert "Test automation" in page.first_link Читабельность Поддержка Простота
  • 25. A U T O M A T E D - T E S T I N G . I N F O Learn python online Михаил Поляруш обучает python-у и автоматизации тестирования на python на онлайн сервисе практического обучения http://lessons2.ru Пройти «Python for testers» (unittests, py.test, webdriver и т.д.) можно прямо сейчас. Регистрируйся на http://lessons2.ru и окунись в мир увлекательного python под чутким руководством опытного тренера 34
  • 27. 37 A U T O M A T E D - T E S T I N G . I N F O Декомпозиция from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys import time browser = webdriver.Firefox() # Get local session of firefox browser.get("http://www.yahoo.com") # Load page assert "Yahoo!" in browser.title elem = browser.find_element_by_name("p") # Find the query box elem.send_keys("seleniumhq" + Keys.RETURN) time.sleep(0.2) # Let the page load, will be added to the API try: browser.find_element_by_xpath("//a[contains(@href, 'http://seleniumhq.org')]") except NoSuchElementException: assert 0, "can't find seleniumhq" browser.close()
  • 28. 38 A U T O M A T E D - T E S T I N G . I N F O Singleton class Wrapper(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Wrapper, cls).__new__(cls, *args, **kwargs) return cls._instance def remote_webdriver(self, *args, **kwargs): self.connection = Firefox() return self.connection BaseTestCase TestCase MyPage Page TextElement LinkElement Element
  • 29. 39 A U T O M A T E D - T E S T I N G . I N F O class BaseTestCase(unittest.TestCase): def setUp(self): self.driver = Wrapper().remote_webdriver() self.driver.implicitly_wait(10) def tearDown(self): self.driver.close() BaseTestCase TestCase MyPage Page TextElement LinkElement Element
  • 30. 40 A U T O M A T E D - T E S T I N G . I N F O class TextElement(Element): def __set__(self, obj, val): e = Wrapper().connection.find_element_by_name(self._locator) e.send_keys(val) def __get__(self, obj, cls=None): try: e = Wrapper().connection.find_element_by_name(self._locator) return str(e.text) except Exception, err: raise err BaseTestCase TestCase MyPage Page TextElement LinkElement Element page.search = "seleniumhq" my_link = page.first_link
  • 31. 41 A U T O M A T E D - T E S T I N G . I N F O class GoogleHomePage(object): _url = "http://google.com" locators = { "search":"q", "result":"(//a[ancestor::div/@id='ires'])[1]" } search = TextElement(locators["search"]) first_link = LinkElement(locators["result"]) def open(self): Wrapper().connection.get(self._url) BaseTestCase TestCase MyPage Page TextElement LinkElement Element
  • 32. 42 A U T O M A T E D - T E S T I N G . I N F O from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys browser = webdriver.Firefox() browser.get("http://google.com") elem = browser.find_element_by_name("q") elem.send_keys("test automation") WebDriverWait(browser, 30).until( lambda driver: driver.find_element_by_xpath("(//a[ancestor::div/@id='ires'])[1]") ) first_link = browser.find_element_by_xpath("(//a[ancestor::div/@id='ires'])[1]") assert "Test automation" in first_link.text browser.close() BaseTestCase TestCase MyPage Page TextElement LinkElement Element def test_search1(self,page=GoogleHomePage()): page.open() page.search = "automated testing" assert "Test automation" in page.first_link
  • 33. 43 A U T O M A T E D - T E S T I N G . I N F O
  • 34. A U T O M A T E D - T E S T I N G . I N F O Learn python online Михаил Поляруш обучает python-у и автоматизации тестирования на python на онлайн сервисе практического обучения http://lessons2.ru Пройти «Python for testers» (unittests, py.test, webdriver и т.д.) можно прямо сейчас. Регистрируйся на http://lessons2.ru и окунись в мир увлекательного python под чутким руководством опытного тренера 44
  • 35. A U T O M A T E D - T E S T I N G . I N F O Библиотеки • Py.test • Nose • PyYaml • Sphinx • Harmcrest • … 45
  • 36. 46 A U T O M A T E D - T E S T I N G . I N F O Py.test параметризация # ./test_example.py def pytest_generate_tests(metafunc): if "numiter" in metafunc.funcargnames: for i in range(10): metafunc.addcall(funcargs=dict(numiter=i)) def test_func(numiter): assert numiter < 9
  • 37. 49 A U T O M A T E D - T E S T I N G . I N F O Py.test marks @py.test.mark.bugs def test_untitled(self): sel = self.selenium C:>py.test -kbugs parameters_tests.py C:>py.test -k-bugs parameters_tests.py
  • 38. 50 A U T O M A T E D - T E S T I N G . I N F O Py.test parallel run C:>py.test –n 10 test.py
  • 39. A U T O M A T E D - T E S T I N G . I N F O Py.test, а также … Выгружать результаты в Pocoo pastebin service Вывод в формате JUnit Интерактивный дебаг Прекращение прогона при определенных условиях Расширенное логирование Измерение покрытия и многое другое 51
  • 40. 52 A U T O M A T E D - T E S T I N G . I N F O Py.yaml import yaml class BaseTestCase(unittest.TestCase): def _read_configuration(self, path="common/conf.yaml"): return yaml.load(file(path, 'r'))["selenium"] def setUp(self): conf = self._read_configuration() self.selenium = selenium( conf['host'], conf['port'], '*'+conf['browser'], conf['url']) self.selenium.start() selenium: host: localhost port: 4444 browser: firefox url: http://localhost:8082/app/
  • 41. 53 A U T O M A T E D - T E S T I N G . I N F O Sphinx
  • 42. 54 A U T O M A T E D - T E S T I N G . I N F O Logging Continuous integration Parameterization Parallel run Documentation Coverage Debugging def test_search(self,page=GoogleHomePage()): page.open() page.search = "automated testing" assert "Test automation" in page.first_link
  • 43. A U T O M A T E D - T E S T I N G . I N F O55 • Быстрое развёртывание • Гибкость языка программирования • Легкость написания тестов • Обширное количество дополнительных библиотек • Интеграция с другими приложениями и инструментами
  • 44. A U T O M A T E D - T E S T I N G . I N F O Что еще ? • Sikuli • RobotFramework • Lettuce • SST • Pywinauto • TextTest 56
  • 45. 57 A U T O M A T E D - T E S T I N G . I N F O Открой интерпретатор и напиши Selenium тест на Python Все что вы увидели дает отличные результаты на практике. С радостью помогу всем и хочу чтобы питонистов стало больше 
  • 46. A U T O M A T E D - T E S T I N G . I N F O Learn python online Михаил Поляруш обучает python-у и автоматизации тестирования на python на онлайн сервисе практического обучения http://lessons2.ru Пройти «Python for testers» (unittests, py.test, webdriver и т.д.) можно прямо сейчас. Регистрируйся на http://lessons2.ru и окунись в мир увлекательного python под чутким руководством опытного тренера 58
  • 47. 59 A U T O M A T E D - T E S T I N G . I N F O Михаил Поляруш Независимый консультант по автоматизации тестирования ПО и тренер телефон: +380501716246 email: mykhailo.poliarush@gmail.com skype: mykhailo.poliarush twitter: @mpoliarush http://poliarush.com http://automated-testing.info http://lessons2.ru