CursosEmpresasBlogLiveConfPrecios

Data Driven Testing (DDT)

Clase 21 de 24 • Curso de Introducción a Selenium con Python

Clase anteriorSiguiente clase

Contenido del curso

Conocer el ecosistema de Selenium
  • 1
    Por qué aprender Selenium y qué verás

    Por qué aprender Selenium y qué verás

    03:15
  • 2
    Historia de Selenium

    Historia de Selenium

    09:05
  • 3
    Otras herramientas de testing y automatización

    Otras herramientas de testing y automatización

    03:40
Preparar entorno de trabajo
  • 4
    Configurar entorno de trabajo

    Configurar entorno de trabajo

    01:43
  • 5

    Compatibilidad con Python 3.9 y aprendiendo a utilizar múltiples versiones

    01:44
  • 6
    ¡Hola, mundo!

    ¡Hola, mundo!

    11:51
Utilizar comandos básicos
  • 7
    Encontrar elementos con find_element

    Encontrar elementos con find_element

    15:23
  • 8
    Preparar assertions y test suites

    Preparar assertions y test suites

    13:50
  • 9

    Entender las clases WebDriver y WebElement

    01:18
Interactuar con elementos
  • 10
    Manejar form, textbox, checkbox y radio button

    Manejar form, textbox, checkbox y radio button

    13:37
  • 11
    Manejar dropdown y listas

    Manejar dropdown y listas

    07:42
  • 12
    Manejar alert y pop-up

    Manejar alert y pop-up

    06:05
  • 13
    Automatizar navegación

    Automatizar navegación

    03:54
Sincronizar pruebas
  • 14
    Demora implícita y explícita

    Demora implícita y explícita

    08:38
  • 15

    Condicionales esperadas

    00:44
Retos
  • 16
    Agregar y eliminar elementos

    Agregar y eliminar elementos

    09:16
  • 17
    Elementos dinámicos

    Elementos dinámicos

    06:46
  • 18
    Controles dinámicos

    Controles dinámicos

    08:01
  • 19
    Typos

    Typos

    05:43
  • 20
    Ordenar tablas

    Ordenar tablas

    07:12
Metodologías de Trabajo
  • 21
    Data Driven Testing (DDT)

    Data Driven Testing (DDT)

    13:35
  • 22
    Page Object Model (POM)

    Page Object Model (POM)

    10:35
Cierre del curso
  • 23
    Realizar una prueba técnica

    Realizar una prueba técnica

    11:33
  • 24
    Conclusiones

    Conclusiones

    01:43
    Royer Guerrero Pinilla

    Royer Guerrero Pinilla

    student•
    hace 5 años

    No olviden instalar con pip install ddt amigos

      Cristian David Restrepo Marin

      Cristian David Restrepo Marin

      student•
      hace 5 años

      R0Y3R muchas gracias por el aporte!

      Miguel Andres Rendon Reyes

      Miguel Andres Rendon Reyes

      student•
      hace 4 años

      Gracias bro, enserio que me iluminaste.

    Alberto Perdomo

    Alberto Perdomo

    student•
    hace 5 años

    Importante para esta clase tener instalada la libreria ddt, para los que usan anaconda es:

    • conda install -c conda-forge ddt

    Para los que usan PIP es:

    • pip3 install ddt
    Jorge Heli Rueda Uribe

    Jorge Heli Rueda Uribe

    student•
    hace 5 años

    Haciendo hoy el ejercicio, encuentro que en la página para los ejercicios (demo-store.seleniumacademy) las cantidades han cambiado, ahora las cantidades del archivo testdata.csv deben ser las siguientes para que no falle la prueba:

    CategoryOrProduct,NumberOfProducts earrings,1 music,5 denim,2 skirt,1 book,3

      Juan Agustin Di Pasquo

      Juan Agustin Di Pasquo

      student•
      hace 4 años

      Muchas gracias Jorge 😄

    polygonus polygonus

    polygonus polygonus

    student•
    hace 5 años

    Puede que muchos lo sepan pero otros no, para que esta linea funcione sin ser modificada (@data(*get_data('testdata.csv'))) el archivo .csv debe estar en la misma carpeta donde esta el archivo .py y el archivo .csv debe llamarse "testdata" . Lo aclaro porque cuando se descarga el archivo este tiene otro nombre.

      fidel angel ochoa

      fidel angel ochoa

      student•
      hace 4 años

      GRACIAS. este tipo de aclaraciones para los novatos nos sirve mucho

    Usuario anónimo

    Usuario anónimo

    user•
    hace 5 años
    import csv, unittest from ddt import ddt, data, unpack from selenium import webdriver def get_data(file_name): rows = [] data_file= open(file_name, 'r') reader= csv.reader(data_file) next(reader, None) for row in reader: rows.append(row) return rows @ddt class SearchDDT(unittest.TestCase): def setUp(self): self.driver= webdriver.Chrome(executable_path= "/home/yanina/Downloads/chromedriver") driver= self.driver driver.implicitly_wait(10) driver.maximize_window() driver.get('http://demo-store.seleniumacademy.com') @data(*get_data('testdata.csv')) @unpack def test_search_ddt(self, search_value, expected_count): driver= self.driver search_field= driver.find_element_by_name('q') search_field.clear() search_field.send_keys(search_value) search_field.submit() products = driver.find_elements_by_xpath('//h2[@class= "product-name"]/a') expected_count= int(expected_count) if expected_count>0: self.assertEqual(expected_count, len(products)) else: message= driver.find_elements_by_class_name('note-msg') self.assertEqual('Your search returns no results.', message) print(f'Found {len(products)} products') if __name__== '__main__': unittest.main(verbosity=2)```
      Fredy Mendoza Vargas

      Fredy Mendoza Vargas

      student•
      hace 5 años

      Muchas gracias

      softdynamic sac

      softdynamic sac

      student•
      hace 5 años

      Es find_element_by_class_name, no find_elements_by_class_name

    David Daniel Acerbo

    David Daniel Acerbo

    student•
    hace 5 años

    Chicos estaba bueno manejar el acceso a los archivos con el keyword “with” ejemplo en la función get_dat()

    Es una buena practica para que cuando abrimos el archivo para leerlo al terminar se cierre.

    def get_data(file_name): rows = [] with open(file_name, 'r') as data_file: reader = csv.reader(data_file) next(reader, None) for row in reader: rows.append(row) return rows

    Reading and Writing Files : https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

    fidel angel ochoa

    fidel angel ochoa

    student•
    hace 4 años

    visual estudio code no me detectaba 'ddt' a pesar que lo instale con pip, encontre que la manera de instalarlo 'correctamente', para mi, es asi:

    python -m pip install ddt

    por supuesto en el ambiente virtual que cree para el curso.

    Ojala le ayude algun@.

      Fabricio González Guasque

      Fabricio González Guasque

      student•
      hace 4 años

      Encontré la misma forma de hacerlo en google. Funciona 👍

      Fernando Lambraño Leon

      Fernando Lambraño Leon

      student•
      hace 4 años
      pip install ddt
    Juan Manuel Trujillo Tarelo

    Juan Manuel Trujillo Tarelo

    student•
    hace 5 años

    Hola, Tengo una pregunta en la linea 24 en donde esta el decorator @data usted usa un asterisco antes del function call. me podria explicar para que sirve? puedo asumir que es para hacer multiples llamadas de la funcion, pero no le entiendo bien. O me podria pasar la documentacion sobre como usarlo de esa forma?

      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      student•
      hace 5 años

      https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/

    Antonio Manilla Maldonado

    Antonio Manilla Maldonado

    student•
    hace 5 años

    He visto que le han dicho muchos halagos a lo largo del curso, profesor. Aquí está el mío. Hace un mes, tal vez un poco más, tomé el curso de Python de Google en Coursera, y ni ahí se aventaron algo tan complejo o tan didáctico como lo hizo usted en esta clase con el manejo de csv. Muy bien, la verdad me agradó bastante.

    Sergio Andrés Martínez Ramírez

    Sergio Andrés Martínez Ramírez

    student•
    hace 5 años

    No se si es por la forma en la que Héctor explica o qué, pero realmente realizar DDT me ha parecido mucho más sencillo con Python.

    Yo he tenido la oportunidad de hacer este tipo de ejercucio en una empresa para automatizar pruebas de una aplicación móvil usando Appium/Selenium y Java con TestNG y se me hacía un poco más engorroso por las librerías que había que importar y demás configuraciones.

    Realmente pensaré seriamente cuando sea el momento de evaluar un framework de automatización basado en Python.

    Miquel Muntaner Barceló

    Miquel Muntaner Barceló

    student•
    hace 4 años

    La cantidad de resultados de la web han cambiado, por tanto, el CSV ahora está mal, aquí les dejo el correcto: (la búsqueda de earrings provocaba un error extraño, por eso lo he quitado, no sé si solo me sucede a mí)

    CategoryOrProduct,NumberOfProducts music,5 denim,2 skirt,1 book,3
      Andrés Mauricio Cárdenas Alvarado

      Andrés Mauricio Cárdenas Alvarado

      student•
      hace 4 años

      Así es y para el primer ejercicio son en el decorador @data(('dress',5),('music',5))

    Jeyson David Vargas Crespo

    Jeyson David Vargas Crespo

    student•
    hace 5 años

    Hola, no acabo de entender lo de los decoradores, en este caso que son o para que sirven???

      Alex Camacho

      Alex Camacho

      teacher•
      hace 5 años

      Espero que este post te pueda aclarar tus dudas :)

      Santiago Herrera Velásquez

      Santiago Herrera Velásquez

      student•
      hace 5 años

      los decoradores acceden a métodos propios de la metodología que resumidamente acá corren la prueba que esta abajo la cantidad de veces que sea necesario para usar todas las tuplas

    Wilson Gustavo Chango Sailema

    Wilson Gustavo Chango Sailema

    student•
    hace 3 años
    import csv, unittest from ddt import ddt, data, unpack from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By def get_data(file_name): rows = [] data_file= open(file_name, 'r') reader= csv.reader(data_file) next(reader, None) for row in reader: rows.append(row) return rows @ddt class SearchDDT(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver= self.driver driver.implicitly_wait(10) driver.maximize_window() driver.get('Link URL') @data(*get_data('testdata.csv')) @unpack def test_search_ddt(self, search_value, expected_count): driver= self.driver search_field= driver.find_element(By.NAME,'q') search_field.clear() search_field.send_keys(search_value) search_field.submit() products = driver.find_elements(By.XPATH,'//h2[@class= "product-name"]/a') expected_count= int(expected_count) if expected_count>0: self.assertEqual(expected_count, len(products)) else: message= driver.find_elements(By.CLASS_NAME,'note-msg') self.assertEqual('Your search returns no results.', message) print(f'Found {len(products)} products') if __name__== '__main__': unittest.main(verbosity=2)
    Jesús Velázquez Jiménez

    Jesús Velázquez Jiménez

    student•
    hace 4 años

    Wow! Esta clase fue muy interesante.

    import csv, unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from ddt import ddt, data, unpack def get_data(file): rows = [] # list for input data_file = open(file,'r') # variable define file in read mode reader = csv.reader(data_file) # variable select library for read file next(reader, None) for i in reader: rows.append(i) return rows @ddt class DataDrivenTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(service=Service('./chromedriver')) driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("https://demo-store.seleniumacademy.com/") @data(*get_data("externaldata.csv")) # call our function get_data @unpack def test_search_ddt(self, search_value, expected_count): driver = self.driver search_field = driver.find_element(By.NAME, 'q') search_field.clear() search_field.send_keys(search_value) search_field.submit() products = driver.find_elements(By.XPATH, '//h2[@class="product-name"]/a') expected_count = int(expected_count) if expected_count > 0: self.assertEqual(expected_count, len(products)) else: msg = self.driver.find_element(By.CLASS_NAME,'note-msg') self.assertEqual('Your search returns no results.', msg) print(f'Find {len(products)} products') def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == '__main__': unittest.main(verbosity = 2)
    Luis Adolfo Ramírez Inciarte

    Luis Adolfo Ramírez Inciarte

    student•
    hace 4 años

    En un entorno de producción y con datos importantes, nunca dejen un archivo abierto. Usen mejor with open(file_name) as f: para evitar olvidar cerrarlo. Por qué? porque ésto se puede aprovechar para que cualquier usuario en el sistema consiga acceso a los datos del archivo hasta que se reinicie el OS

    Enrique Uzcategui

    Enrique Uzcategui

    student•
    hace 4 años

    Con 'dress' ahora salen 5 resultados en lugar de 6

    Carlos Alberto Gutierrez Ramirez

    Carlos Alberto Gutierrez Ramirez

    student•
    hace 5 años

    Hola,

    alguien sabe por que me sale este error: cannot import name 'ddt' from partially initialized module 'ddt' (most likely due to a circular import)

    ya instale el ddt, con el comando pip install ddt

      Jose Antonio Rojas Ollarves

      Jose Antonio Rojas Ollarves

      student•
      hace 5 años

      Instala ddt:

      pip install ddt```
    Jose Antonio Rojas Ollarves

    Jose Antonio Rojas Ollarves

    student•
    hace 5 años

    Saludos amigos aqui les comparto la primera parte del codigo utilizando firefox.

    import unittest from selenium import webdriver #Importar libreria ddt y extraer submodulos from ddt import ddt, data, unpack #Permitira utilizar los datos y desempaquetarlos #Colocar decorado @ddt class SearchDDT(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox(executable_path= r'./geckodriver.exe') driver = self.driver driver.implicitly_wait(5) driver.maximize_window() driver.get('https://demo-store.seleniumacademy.com/') @data(('dress', 6),('music', 5)) #Decorador que almacena los elementos a buscar @unpack #Decorador para desempaquetar las tuplas y poder ingresar a ellass de forma individual #Agregaremos dos parametros al metodo uno para buscar y otro para validar def test_search_ddt(self, search_value, expected_count): driver = self.driver #Ubicar campo de busqueda search_field = driver.find_element_by_name('q') search_field.clear()#Limpiar en caso de que tengan algun texto #Ingresamos el valor a buscar search_field.send_keys(search_value) #Boton de busqueda search_button = driver.find_element_by_class_name('button') search_button.click() #Identificar donde estan los productos products = driver.find_elements_by_xpath('//h2[@class="product-name"]/a') #Verficiar que todo haya salido bien con un print statement print(f"Found {len(products)} products") #Ciclo for para imprimir los elementos de la pagina actual for i in products: print(i.text) #Assertion de validacion self.assertEqual(expected_count, len(products)) def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main()```
    Antonio Demarco Bonino

    Antonio Demarco Bonino

    student•
    hace 5 años

    Esta clase me costó mucho pero salio. Consejo: tengan la biblioteca ddt en la misma carpeta del archivo que de Python que están trabajando.

    Miguel Angel Reyes Moreno

    Miguel Angel Reyes Moreno

    student•
    hace 5 años

    CategoryOrProduct,NumberOfProducts earrings,1 music,5 denim,2 skirt,1 book,3

      fidel angel ochoa

      fidel angel ochoa

      student•
      hace 4 años

      justo me di cuenta que habia un cambio en la pagina de prueba, gracias.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads