- FEATURES
- USAGE
- SUPPORT
- DOCKER GENERATION (Usage for developers)
Allure Framework provides you good looking reports for automation testing. For using this tool it's required to install a server. You could have this server running on Jenkins or if you want to see reports locally you need run some commands on your machine. This work results tedious, at least for me :)
For that reason this docker container allows you to see up to date reports simply mounting your allure-results
directory in the container. Every time appears new results (generated for your tests), Allure Docker Service will detect those changes and it will generate a new report automatically (optional: send results / generate report through API), what you will see refreshing your browser.
It's useful even for developers who wants to run tests locally and want to see what were the problems during regressions.
- Repository: frankescobar/allure-docker-service
Docker container versions are based on binary Allure 2 releases
Allure Docker Service supports architectures amd64, arm32v7 and arm64v8.
The following table shows the variation of provided images.
Tag | Base Image | Arch | OS |
---|---|---|---|
0.20.7-amd64 | amd64/adoptopenjdk:11-jre-openj9-bionic | amd64 | ubuntu |
0.20.7-arm32v7 | arm32v7/adoptopenjdk:11-jdk-hotspot-bionic | arm32v7 | ubuntu |
0.20.7-arm64v8 | arm64v8/adoptopenjdk:11-jre-hotspot-bionic | arm64v8 | ubuntu |
The following table shows the provided Manifest Lists.
Tag | allure-docker-service Base Image |
---|---|
latest, 2.13.0 | frankescobar/allure-docker-service:2.13.0-amd64 |
frankescobar/allure-docker-service:2.13.0-arm32v7 | |
frankescobar/allure-docker-service:2.13.0-arm64v8 |
First at all it's important to be clear. This container only generates reports based on results. You have to generate allure results according to the technology what are you using.
We have some examples projects:
- allure-docker-java-testng-example
- allure-docker-java-junit4-example
- allure-docker-java-cucumber-jvm-example
- allure-docker-nodejs-example
- allure-docker-nodejs-typescript-example
- AllureDockerCSharpExample
In this case we are going to generate results using the java project allure-docker-java-testng-example of this repository.
Go to directory allure-docker-java-testng-example via command line:
cd allure-docker-java-testng-example
Execute:
mvn test -Dtest=FirstTest
If everything is OK, you should see something like this:
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.allure.docker.FirstTest
13:19:03.028 [main] INFO com.allure.docker.FirstTest - test1
13:19:03.044 [main] DEBUG io.qameta.allure.AllureLifecycle - Adding attachment to item with uuid 4b282bd9-6a0f-4fc3-a5cc-be6e8220d3c6
13:19:03.124 [main] INFO com.allure.docker.FirstTest - test2
13:19:03.133 [main] DEBUG io.qameta.allure.AllureLifecycle - Adding attachment to item with uuid e2097440-e9e8-46e9-8b9d-09467b5a49b1
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.702 s <<< FAILURE! - in com.allure.docker.FirstTest
[ERROR] test2(com.allure.docker.FirstTest) Time elapsed: 0.028 s <<< FAILURE!
java.lang.AssertionError: FAILURE ON PURPOSE
at com.allure.docker.FirstTest.test2(FirstTest.java:37)
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] FirstTest.test2:37 FAILURE ON PURPOSE
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.600 s
[INFO] Finished at: 2019-09-16T13:19:03+01:00
[INFO] ------------------------------------------------------------------------
There are 2 tests, one of them failed. Now you can see the allure-results
diretory was created inside of allure-docker-java-testng-example project.
Just it has left 1 step more. You have to run allure-docker-service
mounting your allure-results
directory.
Docker Image: https://hub.docker.com/r/frankescobar/allure-docker-service/
From this directory allure-docker-java-testng-example execute next command:
docker run -p 4040:4040 -p 5050:5050 -e CHECK_RESULTS_EVERY_SECONDS=3 -e KEEP_HISTORY="TRUE" -v ${PWD}/allure-results:/app/allure-results frankescobar/allure-docker-service
From this directory allure-docker-java-testng-example execute next command:
docker run -p 4040:4040 -p 5050:5050 -e CHECK_RESULTS_EVERY_SECONDS=3 -e KEEP_HISTORY="TRUE" -v "/$(pwd)/allure-results:/app/allure-results" frankescobar/allure-docker-service
Using docker-compose is the best way to manage containers: allure-docker-java-testng-example/docker-compose.yml
version: '3'
services:
allure:
image: "frankescobar/allure-docker-service"
environment:
CHECK_RESULTS_EVERY_SECONDS: 1
KEEP_HISTORY: "TRUE"
ports:
- "4040:4040"
- "5050:5050"
volumes:
- ${PWD}/allure-results:/app/allure-results
From this directory allure-docker-java-testng-example execute next command:
docker-compose up allure
If you want to run in background:
docker-compose up -d allure
You can see the logs:
docker-compose logs -f allure
NOTE:
- The
${PWD}/allure-results
directory could be in anywhere on your machine. Your project must generate results in that directory. - The
/app/allure-results
directory is inside of the container. You MUST NOT change this directory, otherwise, the container won't detect the new changes.
If everything was OK, you will see this:
allure_1 | Opening existing report
allure_1 | Overriding configuration
allure_1 | Checking Allure Results every 1 second/s
allure_1 | * Serving Flask app "app" (lazy loading)
allure_1 | * Environment: production
allure_1 | WARNING: This is a development server. Do not use it in a production deployment.
allure_1 | Use a production WSGI server instead.
allure_1 | * Debug mode: off
allure_1 | * Running on http://0.0.0.0:5050/ (Press CTRL+C to quit)
allure_1 | Starting web server...
allure_1 | 2019-08-15 10:09:14.715:INFO::main: Logging initialized @219ms to org.eclipse.jetty.util.log.StdErrLog
allure_1 | Can not open browser because this capability is not supported on your platform. You can use the link below to open the report manually.
allure_1 | Server started at <http://192.168.224.2:4040/>. Press <Ctrl+C> to exit
allure_1 | Detecting results changes...
allure_1 | Creating history on results directory...
allure_1 | Copying history from previous results...
allure_1 | Generating report
allure_1 | Report successfully generated to allure-report
allure_1 | 127.0.0.1 - - [15/Aug/2019 10:09:20] "GET /emailable-report/render HTTP/1.1" 200 -
allure_1 | Status: 200
All previous examples started the container using port 4040. Simply open your browser and access to:
Now we can run other tests without being worried about Allure server. You don't need to restart or execute any Allure command.
Just go again to this directory allure-docker-java-testng-example via command line:
cd allure-docker-java-testng-example
And execute another suite test:
mvn test -Dtest=SecondTest
When this second test finished, refresh your browser and you will see there is a new report including last results tests.
Available endpoints:
'GET' /version
'POST' /send-results
'GET' /generate-report
'GET' /clean-results
'GET' /clean-history
'GET' /emailable-report/render
'GET' /emailable-report/export
Access to http://localhost:5050 to see Swagger documentation with examples
Available from Allure Docker Service version 2.12.1
After running your tests, you can execute any script to send the generated results from any server to the Allure container using the Allure API. For that you can use the endpoint /send-results
.
Here a python script as example: allure-docker-api-usage/send_results.py
python send_results.py
This script is sending these results as example allure-docker-api-usage/allure-results-example
If you want to clean the results use the endpoint /clean-results
(Allure API).
You can switch the version container using frankescobar/allure-docker-service:${VERSION_NUMBER}
.
Docker Compose example:
allure:
image: "frankescobar/allure-docker-service:2.13.0"
or using latest version:
allure:
image: "frankescobar/allure-docker-service:latest"
By default it will take last version: https://hub.docker.com/r/frankescobar/allure-docker-service/tags
Inside of the container Allure Report
use port 4040
and Allure API
use port 5050
.
You can switch those ports according to your convenience.
Docker Compose example:
ports:
- "8484:4040"
- "9292:5050"
Updating seconds to check allure-results
directory to generate a new report up to date.
Docker Compose example:
environment:
CHECK_RESULTS_EVERY_SECONDS: 5
Use NONE
value to disable automatic checking results.
If you use this option, the only way to generate a new report up to date it's using the Allure API.
environment:
CHECK_RESULTS_EVERY_SECONDS: NONE
Available from Allure Docker Service version 2.12.1
Enable KEEP_HISTORY
environment variable to work with history & trends
Docker Compose example:
environment:
KEEP_HISTORY: "TRUE"
If you want to clean the history use the Allure API.
Available from Allure Docker Service version 2.12.1
You can render and export the emailable report using the Allure API.
By default this report template is using Bootstrap css. If you want to override the css, just you need to pass the enviroment variable EMAILABLE_REPORT_CSS_CDN
. Docker Compose example:
environment:
EMAILABLE_REPORT_CSS_CDN: "https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/sketchy/bootstrap.css"
You can use all these themes: https://bootswatch.com/ or any other boostrap css like https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.css
If you want override the title of the Emailable Report, just you need to pass the environment variable EMAILABLE_REPORT_TITLE
.
environment:
EMAILABLE_REPORT_TITLE: "My Title"
If you want the Emailable Report to redirect to your Allure server, just you need to pass the environment variable SERVER_URL
.
environment:
SERVER_URL: "http://allure-any-cloud.net/"
If you want to develop a new template, create a local directory (my-template
as example) with a file named default.html
. In that file you can create your own html template, you can use as guide this example: allure-docker-api/templates/default.html using Jinja syntax. Don't rename your local template, always the file must be named default.html
.
Mount that directory to the container like in the example and pass the environment variable FLASK_DEBUG
with value 1
.
This variable will allow you to use hot reloading
, you can update the content of default.html
locally and use the endpoint emailable-report/render
(Allure API) to see your changes applied in the browser.
environment:
FLASK_DEBUG: 1
volumes:
- ${PWD}/my-template:/app/allure-docker-api/templates
Some frameworks/adaptors don't support allure properties to set up links for Tracker Management Systems
or Issue/Bug Trackers
. In that case you need to set up ALLURE_OPTS
environment variable:
- For Allure1 (XML results)
environment:
CHECK_RESULTS_EVERY_SECONDS: 1
ALLURE_OPTS: "-Dallure.tests.management.pattern=https://example.org/tms/%s -Dallure.issues.tracker.pattern=https://example.org/issue/%s"
- For Allure2 (JSON results). Generally it's not necessary to do this because the properties are configured it in the adaptor/framework and stored in
allure-results
directory. The properties format is different:
allure.link.mylink.pattern=https://example.org/mylink/{}
allure.link.issue.pattern=https://example.org/issue/{}
allure.link.tms.pattern=https://example.org/tms/{}
Reference:
- https://docs.qameta.io/allure/#_test_management_and_bug_tracking_systems_integrations
- https://www.swtestacademy.com/allure-testng/
- https://docs.qameta.io/allure/#_configuration
- https://docs.qameta.io/allure/#_config_samples
- https://docs.qameta.io/allure/#_job_dsl_plugin
sudo apt-get update
sudo apt install -y docker.io
If you want to use docker without sudo, read following links:
- https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user
- https://stackoverflow.com/questions/21871479/docker-cant-connect-to-docker-daemon
docker build -t allure-release -f docker/archive/Dockerfile --build-arg RELEASE=2.13.0 .
docker run -d -p 4040:4040 -p 5050:5050 allure-release
docker container ls
docker exec -it ${CONTAINER_ID} bash
docker exec -it ${CONTAINER_ID} tail -f log
docker container rm $(docker container ls -a -q) -f
docker image rm $(docker image ls -a -q)
docker ps -q -f status=exited | xargs docker rm
docker images -f dangling=true | xargs docker rmi
docker login
docker tag allure-release frankescobar/allure-docker-service:${PUBLIC_TAG}
docker push frankescobar/allure-docker-service
docker tag allure-release frankescobar/allure-docker-service:latest
docker push frankescobar/allure-docker-service
docker run -d -p 4040:4040 -p 5050:5050 frankescobar/allure-docker-service
docker run -d -p 4040:4040 -p 5050:5050 frankescobar/allure-docker-service:2.13.0