es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escribe casos de prueba para el código de Python en la tubería de Bitbucket

Estoy tratando de configurar CI/CD integrado para Bitbucket Cloud que ayuda a automatizar el código desde las pruebas hasta la producción en la Nube y quiero ejecutar algunos casos de prueba en el pipeline de Bitbucket para el código simple de Python de la función iseven(), quiero implementarlo de manera que si alguno de estos casos de prueba falla, entonces no se debe hacer el push, es decir, haré intencionalmente que la función devuelva True en ambas ocasiones y no debe ser realizado el push en el repositorio remoto debido al fallo del caso de prueba en el pipeline. Espero que entiendan lo que estoy tratando de decir.

import unittest

def iseven(num):
    # comprobando si el número es par, devolver True
    if num % 2 == 0:
        return True

    # comprobando si el número no es par, devolver False
    elif num % 2 != 0:
        return False

class TestIsEvenMethod(unittest.TestCase):
    def test_iseven1(self):
        self.assertEqual(iseven(12), True)

    def test_iseven2(self):
        self.assertEqual(iseven(11), False)

if __name__ == '__main__':
    unittest.main()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para implementar este escenario en Bitbucket Pipelines, puedes crear un nuevo archivo de configuración de pipeline (por ejemplo, bitbucket-pipelines.yml) en el nivel raíz de tu repositorio. Aquí hay un ejemplo de archivo de configuración que ejecutará los casos de prueba TestIsEvenMethod y fallará el pipeline si alguno de estos casos de prueba falla:

    # Usar la imagen Docker de Python 3.7 como entorno de compilación
    image: python:3.7
    
    pipelines:
      default:
        - step:
            name: Ejecutar casos de prueba
            script:
              - pip install -r requirements.txt  # Instalar dependencias
              - python -m unittest discover  # Ejecutar todos los casos de prueba
    

    Ten en cuenta que este ejemplo asume que tienes un archivo requirements.txt que especifica los paquetes de Python necesarios, y que tu función iseven() se encuentra en un archivo llamado iseven.py en el mismo directorio que el archivo de casos de prueba.

    Para modificar esta configuración de pipeline y hacer que el pipeline falle si alguno de los casos de prueba TestIsEvenMethod falla, puedes modificar la sección script del pipeline para incluir el siguiente comando:

    - python -m unittest discover && python -c "import sys; sys.exit(not all(result.wasSuccessful() for result in unittest.defaultTestLoader.loadTestsFromName('test_is_even.TestIsEvenMethod')._results))"
    

    Este comando ejecuta los casos de prueba y luego utiliza Python para verificar si todos los resultados de los casos de prueba TestIsEvenMethod fueron exitosos. Si alguna prueba falla, all() devolverá False y el comando saldrá con un código de estado distinto de cero, lo que causará que el pipeline falle.

    Finalmente, para permitir que los cambios se envíen al repositorio remoto solo si el pipeline se completa correctamente, puedes usar las secciones branches y step.after_script de la configuración del pipeline para evitar el comportamiento predeterminado de enviar cambios incluso si el pipeline falla:

    pipelines:
      branches:
        master:
          - step:
              ...
              # Mismo script que antes
              ...
            after_script:
              - if [ $BITBUCKET_EXIT_CODE -ne 0 ]; then exit 1; fi  # Salir con un código de estado distinto de cero si el pipeline falla
    

    Con esta configuración de pipeline, los cambios enviados a la rama master no podrán avanzar más allá de la etapa del pipeline si alguno de los casos de prueba TestIsEvenMethod falla.

Comments are closed.