diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a35d205d9f91f00e6ce9a7935d24907c75ad2325..c6fb93c171fd20bce1112e14b5b6023e2dfc6a84 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,6 +28,19 @@ login-provider:
       - login_provider/**/*
       - .gitlab-ci.yml
 
+login-provider-mock:
+  stage: build
+  image:
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  script:
+    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
+    - /kaniko/executor --context ${CI_PROJECT_DIR}/login_provider/test/behave --dockerfile ${CI_PROJECT_DIR}/login_provider/test/behave/Dockerfile --destination $CI_REGISTRY_IMAGE/login_provider_mock:${CI_COMMIT_REF_NAME} --build-arg baseimage=$CI_REGISTRY_IMAGE/login_provider:${CI_COMMIT_REF_NAME}
+  only:
+    changes:
+      - login_provider/**/*
+      - .gitlab-ci.yml
+
 login-provider-test:
   stage: build
   image:
@@ -43,13 +56,17 @@ login-provider-test:
 
 behave-login:
   stage: application-test
+  variables:
+    TESTUSER_USERNAME: "admin"
+    TESTUSER_EMAIL: "admin@example.net"
+    TESTUSER_PASSWORD: "password"
   services:
-    - name: ${CI_REGISTRY_IMAGE}/login_provider:${CI_COMMIT_REF_NAME}
+    - name: ${CI_REGISTRY_IMAGE}/login_provider_mock:${CI_COMMIT_REF_NAME}
       alias: login_provider
   image: ${CI_REGISTRY_IMAGE}/login_provider_ci_test:${CI_COMMIT_REF_NAME}
   script:
     - cd login_provider/test/behave/
-    - python3 -m behave -D headless=True -D url=http://login_provider:5000 -D email=example@oas.example.com -D password=password
+    - python3 -m behave -D headless=True -D url=http://login_provider:5000 -D username=$TESTUSER_USERNAME -D password=$TESTUSER_PASSWORD
   artifacts:
     paths:
       - login_provider/test/behave/screenshots/
diff --git a/login_provider/test/behave/Dockerfile b/login_provider/test/behave/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..3cd3b3b1dfd66cba306cf9adea91e211790c1026
--- /dev/null
+++ b/login_provider/test/behave/Dockerfile
@@ -0,0 +1,8 @@
+ARG baseimage=open.greenhost.net:4567/openappstack/single-sign-on/login_provider
+FROM $baseimage
+
+ENV TESTUSER_USERNAME
+ENV TESTUSER_EMAIL
+ENV TESTUSER_PASSWORD
+
+COPY mock/db.py db.py
diff --git a/login_provider/test/behave/mocks/db.py b/login_provider/test/behave/mocks/db.py
new file mode 100644
index 0000000000000000000000000000000000000000..37082e715a00533d08583f59eb72f087216e9623
--- /dev/null
+++ b/login_provider/test/behave/mocks/db.py
@@ -0,0 +1,26 @@
+from os import environ
+from flask_login import UserMixin
+
+USERNAME = environ["TESTUSER_USERNAME"]
+PASSWORD = environ["TESTUSER_PASSWORD"]
+EMAIL = environ["TESTUSER_EMAIL"]
+
+users = {USERNAME: {"password": PASSWORD, "email": EMAIL, "active": True}}
+
+class User(UserMixin):
+    def __init__(self, username):
+        self.id = username
+        self.username = username
+        self.active = False
+        self._load_remote_user_info()
+
+    def _load_remote_user_info(self):
+        if self.username in users:
+            self.active = users[self.username]["active"]
+            self.email = users[self.username]["email"]
+
+    def _verify_password(self, password):
+        return users[self.username]["password"] == password
+
+    def authenticate(self, password):
+        return self.active and self._verify_password(password)