diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8b5459c7205a666d4595a00b8f54f4bd79c64132..7adc146c6c2a0da3928beb0ee880f7913fcff2e8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
   - test
   - build
+  - coverage_report
 
 variables:
   BUILD_ENV_DOCKER_IMAGE: docker-registry.ebrains.eu/esd/tmp:latest
@@ -21,23 +22,60 @@ build-wheel:
       - dist/*.tar.gz
     expire_in: 1 week
 
-
-testing-pytest-coverage:
+unit_tests:
   stage: test
   tags:
     - docker-runner
   image: ubuntu:22.04
+  before_script:
+    - chmod +x dedal/utils/bootstrap.sh
+    - ./dedal/utils/bootstrap.sh
+    - pip install -e .[test]
   script:
+    - coverage run s --tb=short --junitxml=test-results.xml -m pytest ./dedal/tests/unit_tests
+    - coverage xml -o coverage_unit.xml
+  artifacts:
+    paths:
+      - coverage_unit.xml
+    expire_in: 1 week
+
+integration_tests:
+  stage: test
+  tags:
+    - docker-runner
+  image: ubuntu:22.04
+  before_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
+  script:
+    - coverage run s --tb=short --junitxml=test-results.xml -m pytest ./dedal/tests/integration_tests
+    - coverage xml -o coverage_integration.xml
+  artifacts:
+    paths:
+      - coverage_integration.xml
+    expire_in: 1 week
+
+merge_coverage:
+  stage: coverage_report
+  tags:
+    - docker-runner
+  image: ubuntu:22.04
+  before_script:
+    - pip install coverage
+  script:
+    - coverage combine coverage_unit.xml coverage_integration.xml
+    - coverage report
+    - coverage xml -o coverage.xml
+    - coverage html -d coverage_html
   artifacts:
-    when: always
     reports:
-      junit: test-results.xml
+      coverage_report:
+        coverage_format: cobertura
+        path: coverage.xml
     paths:
-      - test-results.xml
-      - .dedal.log
+      - coverage.xml
+      - coverage_html
     expire_in: 1 week
+  coverage: '/TOTAL.*?(\d+\%)$/'