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.

Easy selenium test automation on python

28,977 views

Published on

Изучай python и автоматизацию на тестирования на python на http://lessons2.ru

Published in: Technology, Education

Easy selenium test automation on python

  1. 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. 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. 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. 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. 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. 6. A U T O M A T E D - T E S T I N G . I N F O 2 минуты простой тест 7
  7. 7. 8 A U T O M A T E D - T E S T I N G . I N F O А за сколько времени вы напишите такой тест?
  8. 8. A U T O M A T E D - T E S T I N G . I N F O9 МОЯ ЦЕЛЬ СЕГОДНЯ Каждый сможет написать маленький тест автоматизации веб приложения на python и будет знать куда нужно копать чтобы сделать python тесты еще лучше!
  9. 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. 10. A U T O M A T E D - T E S T I N G . I N F O Компании и проекты 11
  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. 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. 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. 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. 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. 16. A U T O M A T E D - T E S T I N G . I N F O22 ENVIRONMENT
  17. 17. A U T O M A T E D - T E S T I N G . I N F O Для начала 23
  18. 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. 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. 20. SELENIUM ТЕСТ НА PYTHON Просто? Сложно? Судите сами
  21. 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. 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. 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. 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. 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
  26. 26. PYTHON ПРИПРАВЫ
  27. 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. 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. 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. 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. 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. 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. 33. 43 A U T O M A T E D - T E S T I N G . I N F O
  34. 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. 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. 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. 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. 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. 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. 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. 41. 53 A U T O M A T E D - T E S T I N G . I N F O Sphinx
  42. 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. 43. A U T O M A T E D - T E S T I N G . I N F O55 • Быстрое развёртывание • Гибкость языка программирования • Легкость написания тестов • Обширное количество дополнительных библиотек • Интеграция с другими приложениями и инструментами
  44. 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. 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. 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. 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

×