diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD
index 1edc97243e24ead53b80a04227ff7615765e0414..5390fe15c6a8aadf9a61eca89b51a6ff0e2e89cf 100644
--- a/test/cpp/end2end/BUILD
+++ b/test/cpp/end2end/BUILD
@@ -31,6 +31,8 @@ licenses(["notice"])  # 3-clause BSD
 
 load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test")
 
+package(default_visibility=["//visibility:public"]) # Allows external users to implement end2end tests.
+
 grpc_cc_library(
     name = "test_service_impl",
     srcs = ["test_service_impl.cc"],
@@ -102,9 +104,10 @@ grpc_cc_test(
     ],
 )
 
-grpc_cc_test(
-    name = "end2end_test",
+grpc_cc_library(
+    name = "end2end_test_lib",
     srcs = ["end2end_test.cc"],
+    testonly = True,
     deps = [
         ":test_service_impl",
         "//:gpr",
@@ -122,6 +125,13 @@ grpc_cc_test(
     ],
 )
 
+grpc_cc_test(
+    name = "end2end_test",
+    deps = [
+        ":end2end_test_lib"
+    ],
+)
+
 grpc_cc_test(
     name = "filter_end2end_test",
     srcs = ["filter_end2end_test.cc"],