diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 82c8411e772a7ad095710487582630768efdadb9..81f1fbe0be5d70c05c6b395ab56f38c922dae004 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -79,10 +79,12 @@ foreach (i RANGE "${len_test_cases}")
         ${CONAN_LIBS_PROTOBUF} ${CONAN_LIBS_ZLIB} ${CONAN_LIBS_RE2})
     target_include_directories(${test_case_name}
         PUBLIC ${CONAN_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR})
-    set_target_properties(${test_case_name}
-        PROPERTIES
-        CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}"
-        CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}")
+    if(LINTING)
+        set_target_properties(${test_case_name}
+            PROPERTIES
+            CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY};${_CMAKE_CXX_CLANG_TIDY_CHECKS}"
+            CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}")
+    endif()
     gtest_discover_tests(${test_case_name}
         PROPERTIES
             LABELS "caosdb-cpplib-int-tests")
diff --git a/test/test_connection.cpp b/test/test_connection.cpp
index 7540a9042337b3da996dd61a9603741ab18b9320..ce657f107bec5ccbd36ee4117767a24bf5f15a66 100644
--- a/test/test_connection.cpp
+++ b/test/test_connection.cpp
@@ -1,5 +1,4 @@
 /*
- *
  * This file is a part of the CaosDB Project.
  *
  * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
@@ -30,6 +29,7 @@
 #include "caosdb/utils.h"          // for get_env_var
 #include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ, EXPECT_THROW
 #include "caosdb_test_utility.h"
+#include "test_connection.h"
 
 namespace caosdb::connection {
 using caosdb::authentication::PlainPasswordAuthenticator;
@@ -74,7 +74,7 @@ TEST(test_connection, connection_ssl_authentication_error_anonymous) {
   const auto host =
     caosdb::utils::get_env_var("CAOSDB_SERVER_HOST", "localhost");
   const auto path =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_CA_PEM", std::string());
+    caosdb::utils::get_env_var("CAOSDB_SERVER_CERT", std::string());
 
   auto ssloptions = std::make_shared<PemFileCACertProvider>(path);
   auto config =
@@ -82,7 +82,7 @@ TEST(test_connection, connection_ssl_authentication_error_anonymous) {
   auto connection = CaosDBConnection(config);
 
   EXPECT_THROW_MESSAGE(connection.GetVersionInfo(), AuthenticationError,
-                       "Please Login.");
+                       "Please login.");
 }
 
 TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
@@ -92,7 +92,7 @@ TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
   const auto host =
     caosdb::utils::get_env_var("CAOSDB_SERVER_HOST", "localhost");
   const auto path =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_CA_PEM", std::string());
+    caosdb::utils::get_env_var("CAOSDB_SERVER_CERT", std::string());
   const auto *const user = "not-a-user-23461237";
   const auto *const password = "very-c-cred";
 
@@ -107,27 +107,13 @@ TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
 }
 
 TEST(test_connection, connection_ssl_authentication_success) {
-  auto port_str =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
-  auto port = std::stoi(port_str);
-  const auto host =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_HOST", "localhost");
-  const auto path =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_CA_PEM", std::string());
-  const auto user = caosdb::utils::get_env_var("CAOSDB_USER", "admin");
-  const auto password = caosdb::utils::get_env_var("CAOSDB_PASSWORD", "caosdb");
+  auto pConnection = get_test_connection();
 
   auto major = 0;
   auto minor = 5;
   const auto *const pre_release = "GRPC004";
 
-  auto auth = std::make_shared<PlainPasswordAuthenticator>(user, password);
-  auto ssloptions = std::make_shared<PemFileCACertProvider>(path);
-  auto config =
-    std::make_shared<SslCaosDBConnectionConfig>(host, port, ssloptions, auth);
-  auto connection = CaosDBConnection(config);
-
-  auto v_info = connection.GetVersionInfo();
+  auto v_info = pConnection->GetVersionInfo();
   EXPECT_EQ(major, v_info->GetMajor());
   EXPECT_EQ(minor, v_info->GetMinor());
   EXPECT_EQ(pre_release, v_info->GetPreRelease());
diff --git a/test/test_connection.h b/test/test_connection.h
new file mode 100644
index 0000000000000000000000000000000000000000..836012172fea988575b35df02feec7d8fe1d10b2
--- /dev/null
+++ b/test/test_connection.h
@@ -0,0 +1,85 @@
+/*
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+ * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#include <gtest/gtest-message.h>   // for Message
+#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestPartResult
+#include <memory>                  // for make_shared, allocator, shared_ptr
+#include <string>                  // for string
+#include "caosdb/authentication.h" // for PlainPasswordAuthenticator
+#include "caosdb/connection.h"     // for InsecureCaosDBConnectionConfig
+#include "caosdb/exceptions.h"     // for AuthenticationError, ConnectionError
+#include "caosdb/info.h"           // for VersionInfo
+#include "caosdb/utils.h"          // for get_env_var
+#include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ, EXPECT_THROW
+#include "caosdb_test_utility.h"
+
+namespace caosdb::connection {
+using caosdb::authentication::PlainPasswordAuthenticator;
+
+/**
+ * Return a fresh CaosDBConnection pointer. The caller has the ownership.
+ */
+inline auto create_test_connection() -> CaosDBConnection * {
+  auto port_str =
+    caosdb::utils::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
+  auto port = std::stoi(port_str);
+  const auto host =
+    caosdb::utils::get_env_var("CAOSDB_SERVER_HOST", "localhost");
+  const auto path =
+    caosdb::utils::get_env_var("CAOSDB_SERVER_CERT", std::string());
+  const auto user = caosdb::utils::get_env_var("CAOSDB_USER", "admin");
+  const auto password = caosdb::utils::get_env_var("CAOSDB_PASSWORD", "caosdb");
+
+  auto auth = std::make_shared<PlainPasswordAuthenticator>(user, password);
+  auto ssloptions = std::make_shared<PemFileCACertProvider>(path);
+  auto config =
+    std::make_shared<SslCaosDBConnectionConfig>(host, port, ssloptions, auth);
+  return new CaosDBConnection(config);
+};
+
+/**
+ * Singleton which holds a single global CaosDBConnection
+ */
+class ConnectionProvider {
+private:
+  std::shared_ptr<CaosDBConnection> connection;
+  ConnectionProvider() : connection(create_test_connection()){};
+
+public:
+  static ConnectionProvider &GetInstance() {
+    static ConnectionProvider instance;
+    return instance;
+  };
+  inline auto GetConnection() -> std::shared_ptr<CaosDBConnection> & {
+    return this->connection;
+  }
+
+  ConnectionProvider(ConnectionProvider const &) = delete;
+  void operator=(ConnectionProvider const &) = delete;
+};
+
+/**
+ * Return a connection for testing purposes.
+ */
+inline auto get_test_connection() -> const std::shared_ptr<CaosDBConnection> & {
+  return ConnectionProvider::GetInstance().GetConnection();
+};
+
+} // namespace caosdb::connection
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index e02dd7f156146656dc8c990aa893dc93fca3331a..5bf35fa9521d778de5c6844eda9342e20929022f 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -28,29 +28,18 @@
 #include "caosdb/transaction.h"    // for Transaction, UniqueResult, Entity
 #include "caosdb/utils.h"          // for get_env_var
 #include "gtest/gtest_pred_impl.h" // for Test, TestInfo, EXPECT_EQ, TEST
+#include "test_connection.h"
 
 namespace caosdb::transaction {
 using caosdb::authentication::PlainPasswordAuthenticator;
 using caosdb::connection::CaosDBConnection;
-using caosdb::connection::InsecureCaosDBConnectionConfig;
+using caosdb::connection::SslCaosDBConnectionConfig;
 
 TEST(test_transaction, first_test) {
-  auto port_str =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTP", "8080");
-  auto port = std::stoi(port_str);
-  const auto host =
-    caosdb::utils::get_env_var("CAOSDB_SERVER_HOST", "localhost");
-  const auto user = caosdb::utils::get_env_var("CAOSDB_USER", "admin");
-  const auto password = caosdb::utils::get_env_var("CAOSDB_PASSWORD", "caosdb");
+  auto connection = caosdb::connection::get_test_connection();
 
-  const auto *const description = "This is an entity";
-
-  auto auth = std::make_shared<PlainPasswordAuthenticator>(user, password);
-  auto config =
-    std::make_shared<InsecureCaosDBConnectionConfig>(host, port, auth);
-  auto connection = CaosDBConnection(config);
-
-  auto transaction(connection.CreateTransaction());
+  auto description = "This is an entity";
+  auto transaction(connection->CreateTransaction());
   transaction->Retrieve(caosdb::entity::EntityID("someid"));
   transaction->Execute();
   auto result_set(std::static_pointer_cast<caosdb::transaction::UniqueResult>(