Si has estado ejecutando con JavaScript, Node, o algún otro lenguaje de programación, te darás cuenta de cuánto es más fácil con Python. La cantidad de bibliotecas que Python ofrece, su simplicidad y su uso a gran escala lo convierten en uno de los mejores idiomas de programación para la automatización de pruebas. Seleccione el marco de automatización de pruebas adecuado basado en las especificaciones de su proyecto. ) automation testing automation testing test de automatización He trabajado en proyectos de automatización de pruebas de Python lo suficiente para conocer algunos consejos y trucos para los mejores resultados. Voy a compartir siete consejos y prácticas en las que puede confiar para una automatización de pruebas de Python eficiente. 1. Seleccione el marco de automatización de pruebas adecuado en función de sus especificaciones del proyecto. Python viene con su marco de automatización de pruebas integrado, Unittest.Pero es mejor para proyectos pequeños.Si desea un marco de automatización de pruebas que le permita trabajar en proyectos de pequeña a gran escala, Pytest es una opción mejor. Pytest proporciona una forma estructurada y eficiente de escribir casos de prueba para una automatización de pruebas más gestionable y escalable. También tiene la sintaxis más simple y el ecosistema de plugins más completo. Por ejemplo, puede usar pytest-xdist para la ejecución de pruebas paralelas. Además, puede ejecutar casos de prueba que ha escrito en Unittest o Nose 2 en Pytest. Si haces más automatización de procesos robóticos ( ), el marco robótico es la mejor opción. La sintaxis es principalmente lenguaje humano, por lo que es realmente fácil de trabajar. Para pruebas web, también puedes integrarlo con otros marcos de prueba de Python, como Selenium. RPA RPA RPA Si usted trabaja en un equipo que practica el desarrollo basado en el comportamiento (BDD), Behave es el mejor marco. Le aconsejaría elegir un marco que coincida con la pila de tecnología que utiliza su equipo para evitar cualquier barrera de comunicación.Pero si está trabajando solo, Pytest es el marco más versátil y comúnmente utilizado. 2. Use WebDriverWait en Selenium para superar los problemas de timing. He mencionado que puedes integrar Pytest con Selenium para pruebas web. Mientras que Pytest es excelente para pruebas funcionales, Selenium lleva la automatización web a un nivel completamente nuevo. Cuando ejecuta pruebas en Selenium, tiene que esperar una cantidad definida de tiempo mientras el sistema trabaja en los elementos de localización.Una vez que transcurra ese tiempo, digamos 10 segundos, el conductor se detiene.El problema con la espera implícita, como se llama, es que los diferentes elementos necesitan tiempos de espera diferentes. Por lo tanto, en lugar de depender de espera implícita, use WebDriverWait en combinación con expect_conditions para crear ciertas condiciones que deben cumplirse antes de que los elementos se conviertan en interactivos. from selenium import webdriver de Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Espere que el elemento sea clicable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Execute acción después de que el elemento esté listo driver.quit() from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Execute acción después de que el elemento esté listo driver.() Si sus pruebas fallan constantemente, esto puede no significar necesariamente que la aplicación web tenga problemas.Puede ser simplemente debido a algunos cambios en el código de la aplicación o el UI.Para evitar el desgaste excesivo de fallas de prueba, asegúrese de usar identificadores únicos para identificar elementos web con precisión. 3.Usar Pytest para evitar la duplicación de las funciones de prueba. No puedo enfatizar lo suficiente cuáles son las características de prueba paramétricas de Pytest que ahorran tiempo. La automatización de pruebas a veces requiere probar la misma funcionalidad en una aplicación con diferentes conjuntos de datos. En lugar de duplicar las funciones de prueba, puede simplemente ejecutar una única función de prueba usando , y se duplicará varias veces con diferentes parámetros. pytest.mark.parametrize pytest.mark.parametrize Importar el código Importar el código @pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)]) @pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)] def test_square(entrada, esperado): def test_square(entrada, esperado): asegurar la entrada ** 2 == esperado Aserta la entrada ** 2 == esperado Si estás preguntando si puedes ejecutar las pruebas paramétricas con el marco de automatización de pruebas integrado de Python, la respuesta es sí, bajo ciertas condiciones. Unittest no soporta las pruebas paramétricas de forma nativa, pero puedes añadir un módulo para ese propósito. importación de unidad Importación de unidad de la importación paramétrica paramétrica de importación paramétrica paramétrica » BR CategoríasCategoríasCategoríasCategoríasCategoríasCategoríasCategoríasCategoríasCategoríasCategoríasCategorías clase Proyectos (unittest.TestCase): @parameterizado.expand([ @parameterizado.expand([ ("cuadrado de 2", 2, 4), ("cuadrado de 2", 2, 4), ("cuadrado de 3", 3, 9), ("cuadrado de 3", 3, 9), ("cuadrado de 4", 4, 16), ("cuadrado de 4", 4, 16), ] ] def test_square(nombre, nombre, entrada, esperado): def test_square(nombre, nombre, entrada, esperado): self.assertEqual(input ** 2, esperado) self.assertEqual(input ** 2, esperado) 4. acelera la ejecución de pruebas con pruebas paralelas. Cuanto más APIs, casos de pruebas, bases de datos y sistemas de terceros en su suite de pruebas, más retrasos de ejecución, lo que puede ralentizar el desarrollo. Afortunadamente, hay una manera de lidiar con esto sin alterar su suite de pruebas. Python permite pruebas paralelas con frameworks como Pytest. Puedes ejecutar varias pruebas en paralelo usando múltiples CPU. Aquí está cómo ejecutar las pruebas paralelas con Pytest: pip instalar el código pip instalar el código pytest -n 4 # Executar pruebas en 4 CPUs pytest -n 4 # Executar pruebas en 4 CPUs También puede aumentar el número de CPUs que manejan la carga, pero solo hay tanta infraestructura local puede manejarlo.Si sus CPU no son lo suficientemente potentes como para manejar su suite de pruebas, recomiendo usar plataformas en la nube como Lambda para probar cómo se comportará la aplicación en diferentes navegadores y OS. que lo que Confíe en mí; no tendrá un descanso si trabaja con ciclos de desarrollo rápidos, y tendrá que ajustar manualmente el código cada vez que algo cambie en el software. » BR Esto le permite restaurar el entorno a su estado original después de que se haya ejecutado la prueba. 5. Automatiza tu automatización de pruebas en tuberías CI/CD. Usted puede automatizar las pruebas de Python en su tubería CI/CD para ejecutarlas automáticamente cada vez que el código cambia. Esto le permite identificar rápidamente los errores y liberar la versión mejorada de la aplicación de nuevo para su uso. Para integrar la automatización de pruebas de Python en sus tuberías CI/CD. Agregue a su proyecto y use un comando Pytest para ejecutar automáticamente sus pruebas y señalar cualquier problema. pytest-cov pytest-cov Los pasos: - nombre: Instalar dependencias - nombre: Instalar dependencias run: pip install pytest pytest-cov run: pip install pytest pytest-cov - nombre: Executar las pruebas Nombre: Ejercicio de la información run: cov=my_project run: cov=my_project Si trabaja en suites de pruebas más grandes, tendrá que agregar un marco robótico a herramientas de CI como Jenkins. Testado: script: script: - Python -m coverage run -m unittest discover - Python -m coverage run -m unittest discover - Informe de cobertura de Python -m - Informe de cobertura de Python -m 6. ejecutar las pruebas en aislamiento. Uno de los problemas comunes que puede encontrar con la automatización de pruebas de Python es la ruptura de pruebas debido a las interdependencias. Básicamente, su prueba falla porque su una prueba depende de los datos o la condición ambiental de otras pruebas. Por lo tanto, si una prueba se modifica, otras pruebas fallan como resultado de la reacción en cadena que causa el cambio. Para resolver esto, aísle todas las pruebas para que cada una comience sin conexión con las otras. Aquí está cómo asegurar el aislamiento de la prueba utilizando la lógica de configuración y descarga de lágrimas en Pytest; Importar el código Importar el código @pytest.fixture @pytest.fixture def clean_environment(): def limpio_ambiente(): # Configuración: Prepare un estado limpio # Configuración: Prepara un estado limpio imprimir("Configurar un entorno limpio.") imprimir("Establecer un entorno limpio.") yield yield # Teardown: Reset del entorno # Teardown: Reset del entorno imprimir("Limpieza después de la prueba.") imprimir("Limpieza después de la prueba.") def test_example(clean_environment): def test_example(clean_environment): asegurar 2 + 2 == 4 asegurar 2 + 2 == 4 Nota que el dispositivo Pytest asegura que los recursos que utiliza se limpian después de cada prueba. 7. Adhiere a las mejores prácticas de automatización de pruebas. Voy a destacar algunas de las mejores prácticas para ser más eficiente en la automatización de pruebas de Python; Mantenga sus herramientas de automatización de pruebas actualizadas para probar su aplicación en las últimas versiones de navegador y capturar los errores antes de que lo haga público. Antes de comenzar la automatización de pruebas, establezca las métricas de pruebas para su suite de pruebas. Metricas de pruebas como la cobertura de código, el número de casos de pruebas ejecutados, pasados o fallidos, y el tiempo de ejecución de pruebas te ayudarán a rastrear pruebas e identificar barreras para abordarlas. En una gran medida, todo el equipo debería saber cómo escribir una prueba de fin a fin (E2E). De esta manera, la calidad no es solo una reflexión posterior, sino que está enraizada en el proceso de desarrollo desde el principio. No pruebes dependencias de terceros como enlaces a sitios externos o servidores que no puedes controlar. Puede retrasar potencialmente tu prueba, y puede haber bann Antes de iniciar la automatización de pruebas, establezca las métricas de pruebas para su suite de pruebas.Métricas de pruebas como la cobertura de código, el número de casos de pruebas ejecutados, aprobados o fallados y el tiempo de ejecución de pruebas te ayudarán a rastrear las pruebas e identificar las barreras a abordar. En una gran medida, todos en su equipo deben saber cómo escribir una prueba de fin a fin (E2E). de esta manera, la calidad no es sólo una reflexión posterior, sino que está enraizada en el proceso de desarrollo desde el principio. No pruebe dependencias de terceros como enlaces a sitios externos o servidores que no puede controlar.Potencialmente podría ralentizar su prueba, y podría haber banners de cookies o algún otro elemento que podría causar que su prueba falleciera. Use para verificar que sus resultados de prueba coincidan con los resultados esperados. aserciones aserciones aserciones Conclusión Las pruebas de automatización pueden ser desafiantes, especialmente cuando se tratan de una serie de errores aparentemente insolubles.He descubierto que la automatización de pruebas es menos buggy cuando se utiliza la pirámide de pruebas. Aquí, se centra en las pruebas de unidad e integración antes de las pruebas de E2E. Con los consejos y prácticas que he destacado, puede ejecutar de manera eficiente las pruebas de regresión continua en un entorno CI/CD y obtener un feedback inmediato antes de desplegar un código.