diff --git a/requirements.txt b/requirements.txt
index 5e4d359a2a07e2730713b91b211c106f5c00f585..3ed157891187822ede5522f406647a8ab99bee2d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,6 +20,7 @@ dictdiffer~=0.9.0
 jmespath~=1.0.1
 
 pytest~=7.4.0
+Faker~=19.3.1
 responses~=0.23.1
 sphinx
 sphinx-rtd-theme
diff --git a/test/conftest.py b/test/conftest.py
index bc4781a512dfbf09bca43571853eed69eb5ac783..0059e8213b19a99d5723b99d1f94358bba4253bf 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -4,6 +4,7 @@ import tempfile
 from typing import Any, Generator
 
 import pytest
+from faker import Faker
 from fastapi.testclient import TestClient
 
 import lso
@@ -11,13 +12,13 @@ import lso
 TEST_CONFIG = {"collection-name": "kvklink.echo", "test-role": "kvklink.echo.echo_uptime"}
 
 
-@pytest.fixture
+@pytest.fixture(scope="session")
 def config_data() -> dict[str, str]:
     """Start the server with valid configuration data."""
     return {"ansible_playbooks_root_dir": "/"}
 
 
-@pytest.fixture
+@pytest.fixture(scope="session")
 def config_file(config_data: dict[str, str]) -> Generator[str, Any, None]:
     """Fixture that will yield a filename that contains a valid configuration.
 
@@ -29,9 +30,14 @@ def config_file(config_data: dict[str, str]) -> Generator[str, Any, None]:
         yield file.name
 
 
-@pytest.fixture
+@pytest.fixture(scope="session")
 def client(config_file: str) -> Generator[TestClient, Any, None]:
     """Return a client that can be used to test the server."""
     os.environ["SETTINGS_FILENAME"] = config_file
     app = lso.create_app()
     yield TestClient(app)  # wait here until calling context ends
+
+
+@pytest.fixture(scope="session")
+def faker() -> Faker:
+    return Faker(locale="en_GB")
diff --git a/test/routes/test_ip_trunk.py b/test/routes/test_ip_trunk.py
index c9a5af2f1fe0071dc431cb0e6a574ae7e8c4d498..40dd84de836b32ebccc5c1185478cf6b2adeb7ad 100644
--- a/test/routes/test_ip_trunk.py
+++ b/test/routes/test_ip_trunk.py
@@ -2,151 +2,162 @@ import time
 from unittest.mock import patch
 
 import jsonschema
+import pytest
 import responses
+from faker import Faker
 from starlette.testclient import TestClient
 
 from lso.playbook import PlaybookLaunchResponse
 from test.routes import TEST_CALLBACK_URL, test_ansible_runner_run
 
-_SUBSCRIPTION_OBJECT = {
-    "subscription_id": "0",
-    "description": "IP trunk, geant_s_sid:GS-00000",
-    "iptrunk": {
-        "geant_s_sid": "GS-00000",
-        "iptrunk_description": "A description for this trunk",
-        "iptrunk_isis_metric": 9000,
-        "iptrunk_minimum_links": 1,
-        "iptrunk_sides": [
-            {
-                "name": "IptrunkSideBlock",
-                "label": None,
-                "iptrunk_side_node": {
-                    "name": "RouterBlock",
+
+@pytest.fixture(scope="session")
+def subscription_object(faker: Faker) -> dict:
+    return {
+        "subscription_id": faker.pyint(),
+        "description": "IP trunk, geant_s_sid:GS-00000",
+        "iptrunk": {
+            "geant_s_sid": "GS-00000",
+            "iptrunk_description": faker.pystr(),
+            "iptrunk_isis_metric": faker.pyint(),
+            "iptrunk_minimum_links": 1,
+            "iptrunk_sides": [
+                {
+                    "name": "IptrunkSideBlock",
                     "label": None,
-                    "router_fqdn": "rt1.city.country.geant.net",
-                    "router_role": "p",
-                    "router_site": {
-                        "name": "SiteBlock",
+                    "iptrunk_side_node": {
+                        "name": "RouterBlock",
                         "label": None,
-                        "site_city": "City",
-                        "site_name": "city",
-                        "site_tier": "1",
-                        "site_country": "Country",
-                        "site_latitude": 1,
-                        "site_longitude": 1,
-                        "site_ts_address": "0.0.0.0",
-                        "site_internal_id": 1,
-                        "site_country_code": "xxx",
-                        "owner_subscription_id": "b5146e62-da79-4791-b703-d03b0ebeebf8",
-                        "site_bgp_community_id": 1,
-                        "subscription_instance_id": "039e03e5-5c09-4236-8d28-cd569e04315e",
+                        "router_fqdn": "rt1.city.country.geant.net",
+                        "router_role": "p",
+                        "router_site": {
+                            "name": "SiteBlock",
+                            "label": None,
+                            "site_city": faker.city(),
+                            "site_name": "city",
+                            "site_tier": "1",
+                            "site_country": faker.country(),
+                            "site_latitude": float(faker.latitude()),
+                            "site_longitude": float(faker.longitude()),
+                            "site_ts_address": faker.ipv4(),
+                            "site_internal_id": faker.pyint(),
+                            "site_country_code": faker.country_code(),
+                            "owner_subscription_id": faker.uuid4(),
+                            "site_bgp_community_id": faker.pyint(),
+                            "subscription_instance_id": faker.uuid4(),
+                        },
+                        "router_vendor": "juniper",
+                        "router_ts_port": faker.pyint(),
+                        "router_access_via_ts": faker.pybool(),
+                        "owner_subscription_id": faker.uuid4(),
+                        "router_lo_iso_address": "49.51e5.0001.0620.4009.6014.00",
+                        "router_lo_ipv4_address": faker.ipv4(),
+                        "router_lo_ipv6_address": faker.ipv6(),
+                        "router_si_ipv4_network": faker.ipv4() + "/31",
+                        "router_is_ias_connected": faker.pybool(),
+                        "subscription_instance_id": faker.uuid4(),
+                        "router_ias_lt_ipv4_network": faker.ipv4() + "/31",
+                        "router_ias_lt_ipv6_network": faker.ipv6() + "/126",
                     },
-                    "router_vendor": "juniper",
-                    "router_ts_port": 22222,
-                    "router_access_via_ts": True,
-                    "owner_subscription_id": "4a0001f1-459d-46f5-9a85-b8177e1bbc1b",
-                    "router_lo_iso_address": "49.51e5.0001.0620.4009.6014.00",
-                    "router_lo_ipv4_address": "0.0.0.0",
-                    "router_lo_ipv6_address": "::",
-                    "router_si_ipv4_network": "0.0.0.0/31",
-                    "router_is_ias_connected": True,
-                    "subscription_instance_id": "2242883e-a581-4ce1-919c-9c986ded57f6",
-                    "router_ias_lt_ipv4_network": "0.0.0.0/31",
-                    "router_ias_lt_ipv6_network": "::/126",
+                    "iptrunk_side_ae_iface": "ae1",
+                    "owner_subscription_id": faker.uuid4(),
+                    "iptrunk_side_ae_members": ["ge-0/0/0", "ge-0/0/1"],
+                    "subscription_instance_id": faker.uuid4(),
+                    "iptrunk_side_ae_geant_a_sid": "SID-11112",
+                    "iptrunk_side_ae_members_description": [faker.pystr(), faker.pystr()],
                 },
-                "iptrunk_side_ae_iface": "ae1",
-                "owner_subscription_id": "c9ddbe14-e107-4749-82ac-e22091cdb132",
-                "iptrunk_side_ae_members": ["ge-0/0/0", "ge-0/0/1"],
-                "subscription_instance_id": "6276fac5-9d31-4c9a-9247-48f02a19f151",
-                "iptrunk_side_ae_geant_a_sid": "SID-11112",
-                "iptrunk_side_ae_members_description": ["first one", "second one"],
-            },
-            {
-                "name": "IptrunkSideBlock",
-                "label": None,
-                "iptrunk_side_node": {
-                    "name": "RouterBlock",
+                {
+                    "name": "IptrunkSideBlock",
                     "label": None,
-                    "router_fqdn": "rt2.city.country.geant.net",
-                    "router_role": "p",
-                    "router_site": {
-                        "name": "SiteBlock",
+                    "iptrunk_side_node": {
+                        "name": "RouterBlock",
                         "label": None,
-                        "site_city": "City",
-                        "site_name": "city",
-                        "site_tier": "1",
-                        "site_country": "Country",
-                        "site_latitude": 1,
-                        "site_longitude": 1,
-                        "site_ts_address": "0.0.0.0",
-                        "site_internal_id": 2,
-                        "site_country_code": "country",
-                        "owner_subscription_id": "93cba8dc-7424-44c0-8872-13159df93042",
-                        "site_bgp_community_id": 2,
-                        "subscription_instance_id": "6bf4f274-6496-438d-9dba-9c3984d0ec07",
+                        "router_fqdn": "rt1.city.country.geant.net",
+                        "router_role": "p",
+                        "router_site": {
+                            "name": "SiteBlock",
+                            "label": None,
+                            "site_city": faker.city(),
+                            "site_name": "city",
+                            "site_tier": "1",
+                            "site_country": faker.country(),
+                            "site_latitude": float(faker.latitude()),
+                            "site_longitude": float(faker.longitude()),
+                            "site_ts_address": faker.ipv4(),
+                            "site_internal_id": faker.pyint(),
+                            "site_country_code": faker.country_code(),
+                            "owner_subscription_id": faker.uuid4(),
+                            "site_bgp_community_id": faker.pyint(),
+                            "subscription_instance_id": faker.uuid4(),
+                        },
+                        "router_vendor": "juniper",
+                        "router_ts_port": faker.pyint(),
+                        "router_access_via_ts": faker.pybool(),
+                        "owner_subscription_id": faker.uuid4(),
+                        "router_lo_iso_address": "49.51e5.0001.0620.4009.6014.00",
+                        "router_lo_ipv4_address": faker.ipv4(),
+                        "router_lo_ipv6_address": faker.ipv6(),
+                        "router_si_ipv4_network": faker.ipv4() + "/31",
+                        "router_is_ias_connected": faker.pybool(),
+                        "subscription_instance_id": faker.uuid4(),
+                        "router_ias_lt_ipv4_network": faker.ipv4() + "/31",
+                        "router_ias_lt_ipv6_network": faker.ipv6() + "/126",
                     },
-                    "router_vendor": "juniper",
-                    "router_ts_port": 11111,
-                    "router_access_via_ts": True,
-                    "owner_subscription_id": "9cb1fc7d-9608-42ce-aacc-2a97f9620a91",
-                    "router_lo_iso_address": "49.51e5.0001.0620.4009.6066.00",
-                    "router_lo_ipv4_address": "0.0.0.0",
-                    "router_lo_ipv6_address": "::",
-                    "router_si_ipv4_network": "0.0.0.0/31",
-                    "router_is_ias_connected": True,
-                    "subscription_instance_id": "6d09394e-658b-4e55-8b1f-8b812d59f5a1",
-                    "router_ias_lt_ipv4_network": "0.0.0.0/31",
-                    "router_ias_lt_ipv6_network": "::/126",
+                    "iptrunk_side_ae_iface": "ae1",
+                    "owner_subscription_id": faker.uuid4(),
+                    "iptrunk_side_ae_members": ["ge-0/0/0", "ge-0/0/1"],
+                    "subscription_instance_id": faker.uuid4(),
+                    "iptrunk_side_ae_geant_a_sid": "SID-11112",
+                    "iptrunk_side_ae_members_description": [faker.pystr(), faker.pystr()],
                 },
-                "iptrunk_side_ae_iface": "ae1",
-                "owner_subscription_id": "c9ddbe14-e107-4749-82ac-e22091cdb132",
-                "iptrunk_side_ae_members": ["ge-0/0/0", "ge-0/0/1"],
-            },
-        ],
-    },
-    "status": "provisioning",
-}
-
-_MIGRATION_OBJECT = {
-    "new_node": {
-        "description": "Router rt1.luc.it.geant.net",
-        "router": {
-            "router_access_via_ts": "true",
-            "router_fqdn": "rt1.luc.it.geant.net",
-            "router_role": "pe",
-            "router_is_ias_connected": "false",
-            "router_lo_ipv4_address": "62.40.96.7",
-            "router_lo_ipv6_address": "2001:798:aa:1::49",
-            "router_lo_iso_address": "49.51e5.0001.0620.4009.6007.00",
-            "router_site": {
-                "name": "SiteBlock",
-                "label": "null",
-                "site_city": "Lucca",
-                "site_name": "luc",
-                "site_tier": "1",
-                "site_country": "Italy",
-                "site_latitude": "10.0",
-                "site_longitude": "43.0",
-                "site_ts_address": "172.16.100.151",
-                "site_internal_id": 133,
-                "site_country_code": "IT",
-                "owner_subscription_id": "f4bacf38-39bb-4553-8e74-190699bd9b4e",
-                "site_bgp_community_id": 33,
-                "subscription_instance_id": "2cf443a2-4039-4402-ab75-73ff1a1096f5",
-            },
-            "router_ts_port": 22111,
-            "router_vendor": "juniper",
+            ],
         },
         "status": "provisioning",
-    },
-    "new_lag_interface": "ae1",
-    "new_lag_member_interfaces": ["ge-0/0/0", "ge-0/0/1"],
-    "replace_index": 0,
-}
+    }
+
+
+@pytest.fixture(scope="session")
+def migration_object(faker: Faker) -> dict:
+    return {
+        "new_node": {
+            "description": "Router rt1.luc.it.geant.net",
+            "router": {
+                "router_access_via_ts": "true",
+                "router_fqdn": "rt1.luc.it.geant.net",
+                "router_role": "pe",
+                "router_is_ias_connected": faker.pybool(),
+                "router_lo_ipv4_address": faker.ipv4(),
+                "router_lo_ipv6_address": faker.ipv6(),
+                "router_lo_iso_address": "49.51e5.0001.0620.4009.6007.00",
+                "router_site": {
+                    "name": "SiteBlock",
+                    "label": "null",
+                    "site_city": faker.city(),
+                    "site_name": "luc",
+                    "site_tier": "1",
+                    "site_country": faker.country(),
+                    "site_latitude": "10.0",
+                    "site_longitude": "43.0",
+                    "site_ts_address": faker.ipv4(),
+                    "site_internal_id": faker.pyint(),
+                    "site_country_code": faker.country_code(),
+                    "owner_subscription_id": faker.uuid4(),
+                    "site_bgp_community_id": faker.pyint(),
+                    "subscription_instance_id": faker.uuid4(),
+                },
+                "router_ts_port": faker.pyint(),
+                "router_vendor": "juniper",
+            },
+            "status": "provisioning",
+        },
+        "new_lag_interface": "ae1",
+        "new_lag_member_interfaces": ["ge-0/0/0", "ge-0/0/1"],
+        "replace_index": 0,
+    }
 
 
 @responses.activate
-def test_ip_trunk_provisioning(client: TestClient) -> None:
+def test_ip_trunk_provisioning(client: TestClient, subscription_object: dict) -> None:
     responses.put(url=TEST_CALLBACK_URL, status=204)
 
     params = {
@@ -156,7 +167,7 @@ def test_ip_trunk_provisioning(client: TestClient) -> None:
         "dry_run": True,
         "object": "trunk_interface",
         "verb": "deploy",
-        "subscription": _SUBSCRIPTION_OBJECT,
+        "subscription": subscription_object,
     }
 
     with patch("lso.playbook.ansible_runner.run", new=test_ansible_runner_run) as _:
@@ -173,7 +184,7 @@ def test_ip_trunk_provisioning(client: TestClient) -> None:
 
 
 @responses.activate
-def test_ip_trunk_modification(client: TestClient) -> None:
+def test_ip_trunk_modification(client: TestClient, subscription_object: dict) -> None:
     responses.put(url=TEST_CALLBACK_URL, status=204)
 
     params = {
@@ -182,8 +193,8 @@ def test_ip_trunk_modification(client: TestClient) -> None:
         "tt_number": "TT123456789",
         "dry_run": True,
         "verb": "modify",
-        "subscription": _SUBSCRIPTION_OBJECT,
-        "old_subscription": _SUBSCRIPTION_OBJECT,
+        "subscription": subscription_object,
+        "old_subscription": subscription_object,
     }
 
     with patch("lso.playbook.ansible_runner.run", new=test_ansible_runner_run) as _:
@@ -200,7 +211,7 @@ def test_ip_trunk_modification(client: TestClient) -> None:
 
 
 @responses.activate
-def test_ip_trunk_deletion(client: TestClient) -> None:
+def test_ip_trunk_deletion(client: TestClient, subscription_object: dict) -> None:
     responses.put(url=TEST_CALLBACK_URL, status=204)
 
     params = {
@@ -209,7 +220,7 @@ def test_ip_trunk_deletion(client: TestClient) -> None:
         "tt_number": "TT123456789",
         "dry_run": True,
         "verb": "terminate",
-        "subscription": _SUBSCRIPTION_OBJECT,
+        "subscription": subscription_object,
     }
 
     with patch("lso.playbook.ansible_runner.run", new=test_ansible_runner_run) as _:
@@ -226,7 +237,7 @@ def test_ip_trunk_deletion(client: TestClient) -> None:
 
 
 @responses.activate
-def test_ip_trunk_migration(client: TestClient) -> None:
+def test_ip_trunk_migration(client: TestClient, subscription_object: dict, migration_object: dict) -> None:
     responses.put(url=TEST_CALLBACK_URL, status=204)
 
     params = {
@@ -236,8 +247,8 @@ def test_ip_trunk_migration(client: TestClient) -> None:
         "tt_number": "TT123456789",
         "verb": "migrate",
         "config_object": "trunk_interface",
-        "subscription": _SUBSCRIPTION_OBJECT,
-        "new_side": _MIGRATION_OBJECT,
+        "subscription": subscription_object,
+        "new_side": migration_object,
     }
 
     with patch("lso.playbook.ansible_runner.run", new=test_ansible_runner_run) as _:
diff --git a/test/routes/test_router.py b/test/routes/test_router.py
index 3f7c5aa912302e97a99e6e3c3ebd223fe7167124..96af82937e3e5b3a1124d0eae8104d56a52e558a 100644
--- a/test/routes/test_router.py
+++ b/test/routes/test_router.py
@@ -3,6 +3,7 @@ from unittest.mock import patch
 
 import jsonschema
 import responses
+from faker import Faker
 from starlette.testclient import TestClient
 
 from lso.playbook import PlaybookLaunchResponse
@@ -10,29 +11,29 @@ from test.routes import TEST_CALLBACK_URL, test_ansible_runner_run
 
 
 @responses.activate
-def test_router_provisioning(client: TestClient) -> None:
+def test_router_provisioning(client: TestClient, faker: Faker) -> None:
     responses.put(url=TEST_CALLBACK_URL, status=204)
 
     params = {
         "callback": TEST_CALLBACK_URL,
-        "dry_run": True,
-        "process_id": "cb5f6c71-63d7-4857-9124-4fc6e7ef3f41",
-        "tt_number": "TT123456789",
+        "dry_run": faker.pybool(),
+        "process_id": faker.uuid4(),
+        "tt_number": faker.pystr(),
         "verb": "deploy",
         "subscription": {
             "router": {
-                "ts_address": "127.0.0.1",
-                "ts_port": "1234",
+                "ts_address": faker.ipv4(),
+                "ts_port": str(faker.pyint()),
                 "router_fqdn": "bogus.fqdn.org",
-                "lo_address": {"v4": "1.2.3.4", "v6": "2001:db8::1"},
+                "lo_address": {"v4": faker.ipv4(), "v6": faker.ipv6()},
                 "lo_iso_address": "1.2.3.4.5.6",
                 "snmp_location": "city,country[1.2,3.4]",
-                "si_ipv4_network": "1.2.3.0/24",
-                "ias_lt_network": {"v4": "1.2.3.0/24", "v6": "2001:db8::/64"},
-                "site_country_code": "XX",
-                "site_city": "NOWHERE",
-                "site_latitude": "0.000",
-                "site_longitude": "0.000",
+                "si_ipv4_network": faker.ipv4() + "/24",
+                "ias_lt_network": {"v4": faker.ipv4() + "/24", "v6": faker.ipv6() + "/64"},
+                "site_country_code": faker.country_code(),
+                "site_city": faker.city(),
+                "site_latitude": float(faker.latitude()),
+                "site_longitude": float(faker.longitude()),
             },
             "router_type": "router",
             "router_vendor": "vendor",