diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index e277e827..dce49a63 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -53,6 +53,8 @@ set(SCRIPTX_DIR ${CMAKE_CURRENT_LIST_DIR}/..)
 
 # import googletest
 include(cmake/gtest/CMakeLists.txt)
+# import google benchmark
+include(cmake/benchmark/CMakeLists.txt)
 
 target_sources(UnitTests PRIVATE
         src/gtest_main.cc
@@ -103,7 +105,7 @@ target_compile_definitions(ScriptX PUBLIC ${DEVOPS_LIBS_MARCO})
 # if you want to close rtti feature for ScriptX and your project
 #target_compile_options(ScriptX PRIVATE -fno-rtti)
 #target_compile_options(UnitTests PRIVATE -fno-rtti)
-target_link_libraries(UnitTests gtest ScriptX)
+target_link_libraries(UnitTests gtest benchmark ScriptX)
 
 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
     # using clang or gcc
diff --git a/test/cmake/TestEnv.cmake b/test/cmake/TestEnv.cmake
index 1d582f2a..f5597ee6 100644
--- a/test/cmake/TestEnv.cmake
+++ b/test/cmake/TestEnv.cmake
@@ -18,6 +18,14 @@ if ("${SCRIPTX_TEST_GOOGLE_TEST}" STREQUAL "")
     endif ()
 endif ()
 
+if ("${SCRIPTX_TEST_GOOGLE_BENCHMARK}" STREQUAL "")
+    if (NOT "$ENV{SCRIPTX_TEST_GOOGLE_BENCHMARK}" STREQUAL "")
+        set(SCRIPTX_TEST_GOOGLE_BENCHMARK "$ENV{SCRIPTX_TEST_GOOGLE_BENCHMARK}")
+    else ()
+        set(SCRIPTX_TEST_GOOGLE_BENCHMARK ${CMAKE_CURRENT_BINARY_DIR}/benchmark-src)
+    endif ()
+endif ()
+
 if ("${SCRIPTX_TEST_BUILD_ONLY}" STREQUAL "")
     if (NOT "$ENV{SCRIPTX_TEST_BUILD_ONLY}" STREQUAL "")
         set(SCRIPTX_TEST_BUILD_ONLY "$ENV{SCRIPTX_TEST_BUILD_ONLY}")
diff --git a/test/cmake/benchmark/CMakeLists.txt b/test/cmake/benchmark/CMakeLists.txt
new file mode 100644
index 00000000..f3544e55
--- /dev/null
+++ b/test/cmake/benchmark/CMakeLists.txt
@@ -0,0 +1,40 @@
+# https://github.com/google/benchmark#installation
+
+set(DEPENDENCY_BENCHMARK_BRANCH main)
+if (NOT EXISTS ${SCRIPTX_TEST_GOOGLE_BENCHMARK})
+    # Download and unpack benchmark at configure time
+    configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in benchmark-download/CMakeLists.txt)
+    execute_process(COMMAND
+            ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
+            RESULT_VARIABLE result
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/benchmark-download
+            )
+    if (result)
+        message(FATAL_ERROR "CMake step for benchmark failed: ${result}")
+    endif ()
+
+    execute_process(COMMAND
+            ${CMAKE_COMMAND} --build .
+            RESULT_VARIABLE result
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/benchmark-download
+            )
+    if (result)
+        message(FATAL_ERROR "Build step for benchmark failed: ${result}")
+    endif ()
+elseif (("${SCRIPTX_TEST_FORCE_UPDATE_DEPS}" STREQUAL ON) OR ("$ENV{SCRIPTX_TEST_FORCE_UPDATE_DEPS}" STREQUAL ON))
+    message(STATUS "update SCRIPTX_TEST_GOOGLE_BENCHMARK ${SCRIPTX_TEST_GOOGLE_BENCHMARK}")
+    execute_process(COMMAND
+            git fetch
+            WORKING_DIRECTORY ${SCRIPTX_TEST_GOOGLE_BENCHMARK}
+            )
+    execute_process(COMMAND
+            git checkout --force origin/${DEPENDENCY_BENCHNARK_BRANCH}
+            WORKING_DIRECTORY ${SCRIPTX_TEST_GOOGLE_TEST}
+            )
+endif ()
+
+# Add benchmark directly to our build. This defines
+# the gtest and gtest_main targets.
+add_subdirectory(${SCRIPTX_TEST_GOOGLE_BENCHMARK}
+        ${CMAKE_CURRENT_BINARY_DIR}/benchmark-build
+        EXCLUDE_FROM_ALL)
diff --git a/test/cmake/benchmark/CMakeLists.txt.in b/test/cmake/benchmark/CMakeLists.txt.in
new file mode 100644
index 00000000..d0f53b5a
--- /dev/null
+++ b/test/cmake/benchmark/CMakeLists.txt.in
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 2.8.2)
+
+project(benchmark-download NONE)
+
+include(ExternalProject)
+ExternalProject_Add(benchmark
+  GIT_REPOSITORY    https://github.com/google/benchmark.git
+  GIT_TAG           ${DEPENDENCY_BENCHMARK_BRANCH}
+  GIT_SHALLOW       1
+  SOURCE_DIR        "${CMAKE_CURRENT_BINARY_DIR}/benchmark-src"
+  BINARY_DIR        "${CMAKE_CURRENT_BINARY_DIR}/benchmark-build"
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND     ""
+  INSTALL_COMMAND   ""
+  TEST_COMMAND      ""
+)
\ No newline at end of file
