diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 57a429a420966e04b8d53ac0645d8512310df367..ab31bc6b429207e32c03ee700e536ca6bc77fd5e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,10 +1,16 @@
 stages:
   - test
   - build
+  - coverage_report
 
 variables:
   BUILD_ENV_DOCKER_IMAGE: docker-registry.ebrains.eu/esd/tmp:latest
 
+default:
+  before_script:
+    - chmod +x dedal/utils/bootstrap.sh
+    - ./dedal/utils/bootstrap.sh
+    - pip install -e .[test]
 
 build-wheel:
   stage: build
@@ -21,17 +27,34 @@ build-wheel:
       - dist/*.tar.gz
     expire_in: 1 week
 
+unit_tests:
+  stage: test
+  tags:
+    - docker-runner
+  image: ubuntu:22.04
+  script:
+    - coverage run -m pytest -s --tb=short --junitxml=test-results.xml ./dedal/tests/unit_tests
+    - mv .coverage .coverage.unit  # Rename to avoid overwriting
+  artifacts:
+    when: always
+    reports:
+      junit: test-results.xml
+    paths:
+      - test-results.xml
+      - .dedal.log
+      - .generate_cache.log
+      - .coverage.unit
+    expire_in: 1 week
 
-testing-pytest-coverage:
+integration_tests:
   stage: test
   tags:
     - docker-runner
   image: ubuntu:22.04
   script:
-    - chmod +x dedal/utils/bootstrap.sh
-    - ./dedal/utils/bootstrap.sh
-    - pip install -e .[test]
-    - coverage run -m pytest -s --tb=short --junitxml=test-results.xml ./dedal/tests/ && coverage html -i -d htmlcov
+    - coverage run -m pytest -s --tb=short --junitxml=test-results.xml ./dedal/tests/integration_tests
+    - mv .coverage .coverage.integration  # Rename to avoid overwriting
+  needs: ["unit_tests"]
   artifacts:
     when: always
     reports:
@@ -40,5 +63,27 @@ testing-pytest-coverage:
       - test-results.xml
       - .dedal.log
       - .generate_cache.log
+      - .coverage.integration
+    expire_in: 1 week
+
+merge_coverage:
+  stage: coverage_report
+  tags:
+    - docker-runner
+  image: ubuntu:22.04
+  script:
+    - coverage combine .coverage.unit .coverage.integration
+    - coverage report
+    - coverage xml -o coverage.xml
+    - coverage html -d coverage_html
+  artifacts:
+    reports:
+      coverage_report:
+        coverage_format: cobertura
+        path: coverage.xml
+    paths:
+      - coverage.xml
+      - coverage_html
     expire_in: 1 week
+  coverage: '/TOTAL.*?(\d+\%)$/'
 
diff --git a/README.md b/README.md
index 733d8ff63a4f2aabb3634707b85c252e4cfb284d..55080aabfee964433f5439b43b3b61f727422a2c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 # Dedal
+![Coverage Badge](https://gitlab.ebrains.eu/ri/tech-hub/platform/esd/yashchiki/badges/koutakia/coverage.svg)
 
 This repository provides functionalities to easily ```managed spack environments``` and
 ```helpers for the container image build flow```.
@@ -139,4 +140,5 @@ Installs spack packages present in the spack environment defined in configuratio
 
 # Dedal's UML diagram
 
-![screenshot](dedal/docs/resources/dedal_UML.png)
\ No newline at end of file
+![screenshot](dedal/docs/resources/dedal_UML.png)
+