Easy selenium test automation on python

22,392 views
22,997 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

×