diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fe30ad2442de8001bc9b77dae8e4b863bbe609b5..2c05af2d2624f88d88519ed09f456dfc0bf4de15 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,27 +7,51 @@ stages:          # List of stages for jobs, and their order of execution
   - apt-get update -y && apt-get install -y expect
   - ./auto_script_wolf
 
+.script_test_template: &script_test_definition
+  - cd wolf/wolf
+  - ctest -j$(nproc)
+  - cd ../imu
+  - ctest -j$(nproc)
+  - cd ../gnss
+  - ctest -j$(nproc)
+  - cd ../laser
+  - ctest -j$(nproc)
+  - cd ../vision
+  - ctest -j$(nproc)
+  - cd ../apriltag
+  - ctest -j$(nproc)
+  - cd ../bodydynamics
+  - ctest -j$(nproc)
 
-installation-test-xenial:       # This job runs in the build stage, which runs first.
+############ JOBS ############
+installation-test-xenial:
   stage: install
+  cache: []
   image: ubuntu:16.04
   script:
     - *script_install_definition
+    - *script_test_definition
 
-installation-test-bionic:       # This job runs in the build stage, which runs first.
+installation-test-bionic:
   stage: install
+  cache: []
   image: ubuntu:18.04
   script:
     - *script_install_definition
+    - *script_test_definition
 
-installation-test-focal:       # This job runs in the build stage, which runs first.
+installation-test-focal:
   stage: install
+  cache: []
   image: ubuntu:20.04
   script:
     - *script_install_definition
+    - *script_test_definition
 
-lint-test-job:   # This job also runs in the test stage.
-  stage: test    # It can run at the same time as unit-test-job (in parallel).
+lint-test-job:
+  stage: test
+  cache: []
+  image: ubuntu:16.04
   script:
     - echo "Linting code... This will take about 10 seconds."
     - sleep 10