Search code examples
javadockerdockerfilegaugegetgauge

Run gauge tests inside a docker container


I'm trying to Dockerize a Gauge test automation project so I can run specs inside a Docker container. The project is written in Java and Spring Boot.

I saw this tutorial in Gauge documentation.

This is the DockerFile in the tutorial:

FROM ubuntu

# Install Java.
RUN apt-get update && apt-get install -q -y \
    openjdk-8-jdk \
    apt-transport-https \
    gnupg2 \
    ca-certificates

# Install gauge
RUN apt-key adv --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys 023EDB0B && \
    echo deb https://dl.bintray.com/gauge/gauge-deb stable main | tee -a /etc/apt/sources.list

RUN apt-get update && apt-get install gauge

# Install gauge plugins
RUN gauge install java && \
    gauge install screenshot

ENV PATH=$HOME/.gauge:$PATH

As you see, there's no "ADD"/"COPY" there in the DokcerFile.

Is it just suggesting an alternative to install Gauge and the other packages on the host?

Any ideas on how to run the specs inside a Docker container?


Solution

  • Here is what I did to get the test running in the docker container.

    I have a specs folder beside src in my project structure meaning the gauge tests will run using the JAR file but they're not part of the JAR file themselves.

    --MyProject
    ----specs
    ----src
    ...
    

    I used maven to run the test inside the container. That's why I preferred to build the project inside the container so I get the JAR file ready with the same version of maven I run the test with.

    Here is the DockerFile. I developed a bash script to run the test. You may run the script with CMD or ENTRYPOINT:

    FROM maven:3.6.1-jdk-8
    
    # add any project resources needed
    ADD env /home/e2e/env
    ADD specs /home/e2e/specs
    ADD src /home/e2e/src
    ADD src/main/scripts/entrypoint.sh /home/e2e/
    ADD pom.xml /home/e2e/
    
    RUN ["chmod", "+x", "./home/e2e/entrypoint.sh"]
    
    # Install Gauge, web browser and webdriver in your preferred way...
    
    ENV PATH=$HOME/.gauge:$PATH
    # I'm keeping the cntainer running. But it's all up to you.
    CMD /home/e2e/entrypoint.sh && tail -f /dev/null
    

    And then here is the simple entrypoint.sh script:

    #!/bin/bash
    cd /home/e2e/
    mvn clean package
    gauge --version
    google-chrome --version
    mvn -version
    mvn gauge:execute -DspecsDir=specs/myTest.spec
    

    Of course, you could just use a ready JAR instead of building it inside the container. Or you could build the JAR while creating the docker image.