Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tests de aceptación con Selenium + Python

Tests de aceptación con Selenium + Python

Selenium es usado para testear nuestras aplicaciones web con test de aceptación. Estos tests se acercan a lo que el cliente requiere, pudiendo programar casos de uso y viendo nosotros mismos cómo el flujo se va produciendo.

También podemos testear aplicaciones almacenadas en remoto, con la opción Headless Mode en la que no se dispara un navegador.

Nacho Álvarez

March 16, 2018
Tweet

More Decks by Nacho Álvarez

Other Decks in Technology

Transcript

  1. • Ingeniero en Informática por la UCO • Certificado Scrum

    Manager en 2012 y PMP en 2017 • Trayectoria profesional: ◦ Soporte Servicio Informática UCO ◦ Desarrollo Web ◦ Desarrollo / Integración distribuciones GNU/Linux ◦ Android mobile + backend developer (WUL4) ◦ Técnico especialista Área de Innovación (Redsys) ◦ Analista Técnico de Soluciones Sectoriales (Redsys) ◦ Responsable área de Servicios Digitales (Redsys Salud) $whoami 2
  2. $whoami ALGUNOS DATOS: 10/16 – 12/17… (algo más de 1

    año de proyecto) • > 1.000.000 usuarios • > 3.000.000 transacciones • > 58€ de importe medio • > 180 millones de euros en movimiento • 96% cuota de mercado en España 4
  3. Índice 5 1. ¿Tests de aceptación? 2. Selenium 3. Webdriver

    4. Localizando elementos en la UI 5. Headless mode 6. Demo! 7. Enlaces
  4. • Las pruebas de aceptación son las últimas pruebas realizadas

    donde se prueba el software y se verifica que cumpla con las expectativas del cliente • Generalmente son tests funcionales que se basan en los requisitos definidos por el cliente y deben hacerse antes de la salida a producción • Estas pruebas se realizan una vez que ya se ha probado que cada módulo funciona bien por separado, que el software realice las funciones esperadas y que todos los módulos se integran correctamente 1. ¿Tests de aceptación? 6
  5. 1. ¿Tests de aceptación? • El test de aceptación termina

    de definir el nivel de calidad de la aplicación y le permite conocer al equipo en qué medida ha interpretado correctamente los requerimientos del usuario o Product Owner. • Es el cliente quien tendrá la decisión final de aprobar o no el producto, como también de solicitar modificaciones. • Con frecuencia, el diseño de casos de pruebas de aceptación de usuario se define buscando incluir los principales escenarios de ejecución de la aplicación. 7
  6. Selenium IDE Entorno de desarrollo integrado para pruebas implementado como

    una extensión de Firefox y permite grabar, editar y depurar pruebas. Originalmente Selenium Recorder. Selenium Remote Control (RC) Hace posible escribir pruebas automatizadas para aplicaciones web, en cualquier lenguaje de programación. Con la liberación de Selenium 2, se descartó en favor de Selenium WebDriver. Selenium WebDriver A través de un controlador del navegador específico para cada navegador se envían los comandos a éste y se traen los resultados de regreso. Selenium Grid Permite ejecutar pruebas en paralelo en múltiples máquinas y manejar diferentes versiones y configuraciones de manera centralizada. 2. Selenium 8
  7. 3. Webdriver Drivers ChromeDriver EventFiringWebDrive r FirefoxDriver HtmlUnitDriver InternetExplorerDriver PhantomJSDriver

    RemoteWebDriver SafariDriver Lenguajes Java C# Python Ruby PHP Perl Javascript 9
  8. 3. Webdriver • La API está bien documentada aquí: https://www.seleniumhq.org/docs/03_webdriver.jsp

    • La instalación en python es bien sencilla: pip install selenium • La importación de las bibliotecas es como sigue: from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC 10
  9. 3. Webdriver # Create a new instance of the Firefox

    driver driver = webdriver.Firefox() # go to the google home page driver.get("http://www.google.com") # the page is ajaxy so the title is originally this: print driver.title # find the element that's name attribute is q (the google search box) inputElement = driver.find_element_by_name("q") # type in the search inputElement.send_keys("cheese!") 11
  10. 3. Webdriver # submit the form (although google automatically searches

    now without submitting) inputElement.submit() try: # we have to wait for the page to refresh, the last thing that seems to be updated is the title WebDriverWait(driver, 10).until(EC.title_contains("cheese!")) # You should see "cheese! - Google Search" print driver.title finally: driver.quit() 12
  11. 4. Localizando elementos en la UI 13 • Por ID

    <div id="coolestWidgetEvah">...</div> element = driver.find_element_by_id("coolestWidgetEvah”) • Por nombre de clase <div class="cheese"><span>Cheddar</span></div> <div class="cheese"><span>Gouda</span></div> cheeses = driver.find_elements_by_class_name("cheese”) • Por tag <iframe src="..."></iframe> frame = driver.find_element_by_tag_name("iframe")
  12. 4. Localizando elementos en la UI 14 • Por nombre

    <input name="cheese" type="text"/> cheese = driver.find_element_by_name("cheese") • Por link <a href="http://www.google.com/search?q=cheese">cheese</a> cheese = driver.find_element_by_link_text("cheese") • Por CSS <div id="food"> <span class="dairy">milk</span> <span class="dairy aged">cheese</span></div> cheese = driver.find_element_by_css_selector("#food span.dairy.aged")
  13. 4. Localizando elementos en la UI 15 • Por XPath

    <input type="text" name="example" /> <INPUT type="text" name="other" /> inputs = driver.find_elements_by_xpath("//input") XPath expression HtmlUnit Driver Firefox Driver IE Driver //input 1 (“example”) 2 2 //INPUT 0 2 0
  14. 4. Localizando elementos en la UI • Obteniendo valores de

    texto element = driver.find_element_by_id("element_id") element.text • Rellenando formularios from selenium.webdriver.support.ui import Select select = Select(driver.find_element_by_tag_name("select")) select.deselect_all() select.select_by_visible_text("Edam") driver.find_element_by_id("submit").click() 16
  15. • Los navegadores en este modo proveen control automatizado de

    una página Web pero en entorno de línea de comandos, sin levantar interfaz gráfica • Este modo es útil en tests que se ejecutan en servidores remotos sin interfaz • Se utiliza sobre todo para lanzar suite de tests en producción • En Selenium está soportado por Google Chrome, Firefox, PhantomJS y HtmlUnit 5. Headless mode 17
  16. • Escribiremos un comentario en Twitter para testear la red

    social • Lo repetiremos en modo headless • Pediremos una pizza ◦ Indicaremos dirección ◦ Crearemos un pedido a domicilio ◦ Llegaremos casi hasta el final ◦ ¿Tenéis hambre? 6. Demo! 18
  17. 7. Enlaces • API Webdriver https://www.seleniumhq.org/docs/03_webdriver.jsp • Definiciones de pruebas

    de aceptación https://losandestraining.com/2017/08/23/que-son-las-pruebas-de- aceptacion/ • Proyectos Selenium https://www.seleniumhq.org/projects/ • Código en GitHub https://github.com/jialvarez/python-selenium 19