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.

Obtenga acceso al contenedor de java por defecto (TestContainers) en una prueba de Spock.

Tengo una prueba de integración de Spock que inicia un contenedor adicional.

El contenedor “dockerized-chrome” tiene un script de Python. El script dentro de él intenta hacer una solicitud a un punto final que está originalmente en el código fuente de Java. Por eso, me interesa saber si hay alguna manera de obtener información sobre el nombre o ID del contenedor de Java que es creado por la anotación TestContainers, que también tiene puntos finales creados en el proyecto de Java.
Añadí una imagen para hacerlo más claro.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La anotación TestContainers crea un nuevo contenedor Docker para propósitos de prueba y lo inicia y detiene automáticamente durante la prueba. Para acceder al contenedor desde otro contenedor (como el que ejecuta el script de Python), puede usar el alias de red del contenedor.

    En primer lugar, debe establecer la propiedad networkAlias en el GenericContainer asociado al contenedor Java. Por ejemplo:

    @Testcontainers
    class MyTest {
        @Container
        static final GenericContainer<?> myJavaContainer = new GenericContainer<>("my-image")
                .withExposedPorts(8080)
                .withNetwork(Network.SHARED)
                .withNetworkAliases("my-alias");
    }
    

    En el ejemplo anterior, hemos establecido un alias de red llamado my-alias.

    Ahora, en el script de Python, simplemente puede usar el nombre de host my-alias para acceder a los puntos finales del contenedor Java. Por ejemplo:

    import requests
    
    response = requests.get("http://my-alias:8080/my-endpoint")
    

    Esto asume que el contenedor Java tiene un punto final expuesto en el puerto 8080 en la ruta /my-endpoint. Reemplace estos valores con los valores reales para su caso de uso.

    Tenga en cuenta que el contenedor que ejecuta el script de Python debe estar en la misma red que el contenedor Java. Puede lograrlo usando el método withNetwork en el GenericContainer asociado al contenedor de Python, de la siguiente manera:

    GenericContainer<?> pythonContainer = new GenericContainer<>("python:latest")
        .withNetwork(Network.SHARED)
        .dependsOn(myJavaContainer);
    

    Esto establece el contenedor de Python para usar la misma red que el contenedor Java, y también lo establece para depender del contenedor de Java, para que el contenedor de Java se inicie antes que el contenedor de Python.

Comments are closed.