diff --git a/quiche/http2/adapter/nghttp2_adapter_test.cc b/quiche/http2/adapter/nghttp2_adapter_test.cc
index 3174881..1e66f03 100644
--- a/quiche/http2/adapter/nghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/nghttp2_adapter_test.cc
@@ -878,7 +878,9 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::SETTINGS}));
 }
 
-TEST(NgHttp2AdapterTest, ClientSendsTrailers) {
+using NgHttp2AdapterDataTest = quiche::test::QuicheTest;
+
+TEST_F(NgHttp2AdapterDataTest, ClientSendsTrailers) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
@@ -2045,7 +2047,7 @@
                                             SpdyFrameType::RST_STREAM}));
 }
 
-TEST(NgHttp2AdapterTest, ClientSubmitRequest) {
+TEST_F(NgHttp2AdapterDataTest, ClientSubmitRequest) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
   int result = adapter->Send();
@@ -2895,7 +2897,7 @@
                           }));
 }
 
-TEST(NgHttp2AdapterTest, ClientObeysMaxConcurrentStreams) {
+TEST_F(NgHttp2AdapterDataTest, ClientObeysMaxConcurrentStreams) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
   int result = adapter->Send();
@@ -3012,7 +3014,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(NgHttp2AdapterTest, ClientReceivesInitialWindowSetting) {
+TEST_F(NgHttp2AdapterDataTest, ClientReceivesInitialWindowSetting) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
@@ -3074,7 +3076,8 @@
                             SpdyFrameType::DATA, SpdyFrameType::DATA}));
 }
 
-TEST(NgHttp2AdapterTest, ClientReceivesInitialWindowSettingAfterStreamStart) {
+TEST_F(NgHttp2AdapterDataTest,
+       ClientReceivesInitialWindowSettingAfterStreamStart) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
@@ -3679,7 +3682,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(NgHttp2AdapterTest, ConnectionErrorOnDataFrameSent) {
+TEST_F(NgHttp2AdapterDataTest, ConnectionErrorOnDataFrameSent) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -4081,7 +4084,7 @@
 
 // Tests the case where the response body is in the progress of being sent while
 // trailers are queued.
-TEST(NgHttp2AdapterTest, ServerSubmitsTrailersWhileDataDeferred) {
+TEST_F(NgHttp2AdapterDataTest, ServerSubmitsTrailersWhileDataDeferred) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -4180,7 +4183,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(NgHttp2AdapterTest, ServerSubmitsTrailersWithDataEndStream) {
+TEST_F(NgHttp2AdapterDataTest, ServerSubmitsTrailersWithDataEndStream) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -4248,7 +4251,8 @@
                             SpdyFrameType::HEADERS}));
 }
 
-TEST(NgHttp2AdapterTest, ServerSubmitsTrailersWithDataEndStreamAndDeferral) {
+TEST_F(NgHttp2AdapterDataTest,
+       ServerSubmitsTrailersWithDataEndStreamAndDeferral) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -5218,7 +5222,7 @@
               EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::HEADERS}));
 }
 
-TEST(NgHttp2AdapterTest, ServerSubmitResponse) {
+TEST_F(NgHttp2AdapterDataTest, ServerSubmitResponse) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5313,7 +5317,7 @@
   EXPECT_GT(adapter->GetHpackEncoderDynamicTableSize(), 0);
 }
 
-TEST(NgHttp2AdapterTest, ServerSubmitResponseWithResetFromClient) {
+TEST_F(NgHttp2AdapterDataTest, ServerSubmitResponseWithResetFromClient) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5436,7 +5440,7 @@
               EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
 }
 
-TEST(NgHttp2AdapterTest, ServerSendsTrailers) {
+TEST_F(NgHttp2AdapterDataTest, ServerSendsTrailers) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5619,7 +5623,7 @@
             absl::StrJoin(visitor.GetMetadata(1), ""));
 }
 
-TEST(NgHttp2AdapterTest, RepeatedHeaderNames) {
+TEST_F(NgHttp2AdapterDataTest, RepeatedHeaderNames) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5681,7 +5685,7 @@
                             SpdyFrameType::DATA}));
 }
 
-TEST(NgHttp2AdapterTest, ServerRespondsToRequestWithTrailers) {
+TEST_F(NgHttp2AdapterDataTest, ServerRespondsToRequestWithTrailers) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5762,7 +5766,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::DATA}));
 }
 
-TEST(NgHttp2AdapterTest, ServerSubmitsResponseWithDataSourceError) {
+TEST_F(NgHttp2AdapterDataTest, ServerSubmitsResponseWithDataSourceError) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -5993,7 +5997,7 @@
   EXPECT_EQ(frames.size(), static_cast<size_t>(result));
 }
 
-TEST(NgHttp2AdapterTest, ServerSendsInvalidTrailers) {
+TEST_F(NgHttp2AdapterDataTest, ServerSendsInvalidTrailers) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   EXPECT_FALSE(adapter->want_write());
@@ -6848,7 +6852,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(NgHttp2AdapterTest, SkipsSendingFramesForRejectedStream) {
+TEST_F(NgHttp2AdapterDataTest, SkipsSendingFramesForRejectedStream) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -6917,7 +6921,7 @@
                             SpdyFrameType::RST_STREAM}));
 }
 
-TEST(NgHttp2AdapterTest, ServerQueuesMetadataWithStreamReset) {
+TEST_F(NgHttp2AdapterDataTest, ServerQueuesMetadataWithStreamReset) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -7064,7 +7068,7 @@
   EXPECT_EQ(static_cast<size_t>(next_result), next_frame.size());
 }
 
-TEST(NgHttp2AdapterTest, ServerDoesNotSendFramesAfterImmediateGoAway) {
+TEST_F(NgHttp2AdapterDataTest, ServerDoesNotSendFramesAfterImmediateGoAway) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
@@ -7746,7 +7750,7 @@
                                             SpdyFrameType::WINDOW_UPDATE}));
 }
 
-TEST(NgHttp2AdapterTest, NegativeFlowControlStreamResumption) {
+TEST_F(NgHttp2AdapterDataTest, NegativeFlowControlStreamResumption) {
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
 
diff --git a/quiche/http2/adapter/oghttp2_adapter_test.cc b/quiche/http2/adapter/oghttp2_adapter_test.cc
index 3909692..41010cb 100644
--- a/quiche/http2/adapter/oghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_test.cc
@@ -1402,7 +1402,9 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::SETTINGS}));
 }
 
-TEST(OgHttp2AdapterTest, ClientSendsTrailers) {
+using OgHttp2AdapterDataTest = quiche::test::QuicheTest;
+
+TEST_F(OgHttp2AdapterDataTest, ClientSendsTrailers) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -2626,7 +2628,7 @@
                                             SpdyFrameType::RST_STREAM}));
 }
 
-TEST(OgHttp2AdapterTest, ClientObeysMaxConcurrentStreams) {
+TEST_F(OgHttp2AdapterDataTest, ClientObeysMaxConcurrentStreams) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -2758,7 +2760,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(OgHttp2AdapterTest, ClientReceivesInitialWindowSetting) {
+TEST_F(OgHttp2AdapterDataTest, ClientReceivesInitialWindowSetting) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -2825,7 +2827,8 @@
                             SpdyFrameType::DATA, SpdyFrameType::DATA}));
 }
 
-TEST(OgHttp2AdapterTest, ClientReceivesInitialWindowSettingAfterStreamStart) {
+TEST_F(OgHttp2AdapterDataTest,
+       ClientReceivesInitialWindowSettingAfterStreamStart) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -3448,7 +3451,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(OgHttp2AdapterTest, ClientEncountersFlowControlBlock) {
+TEST_F(OgHttp2AdapterDataTest, ClientEncountersFlowControlBlock) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -3531,7 +3534,7 @@
   EXPECT_EQ(0, result);
 }
 
-TEST(OgHttp2AdapterTest, ClientSendsTrailersAfterFlowControlBlock) {
+TEST_F(OgHttp2AdapterDataTest, ClientSendsTrailersAfterFlowControlBlock) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kClient;
@@ -4192,7 +4195,7 @@
   EXPECT_LT(send_result, 0);
 }
 
-TEST(OgHttp2AdapterTest, ConnectionErrorOnDataFrameSent) {
+TEST_F(OgHttp2AdapterDataTest, ConnectionErrorOnDataFrameSent) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -4296,7 +4299,7 @@
   EXPECT_EQ(frames.size(), static_cast<size_t>(result));
 }
 
-TEST(OgHttp2AdapterTest, RepeatedHeaderNames) {
+TEST_F(OgHttp2AdapterDataTest, RepeatedHeaderNames) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -4362,7 +4365,7 @@
                             SpdyFrameType::HEADERS, SpdyFrameType::DATA}));
 }
 
-TEST(OgHttp2AdapterTest, ServerRespondsToRequestWithTrailers) {
+TEST_F(OgHttp2AdapterDataTest, ServerRespondsToRequestWithTrailers) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -4565,7 +4568,7 @@
                             SpdyFrameType::RST_STREAM}));
 }
 
-TEST(OgHttp2AdapterTest, ServerSubmitsResponseWithDataSourceError) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitsResponseWithDataSourceError) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -4862,7 +4865,7 @@
   EXPECT_EQ(frames.size(), static_cast<size_t>(result));
 }
 
-TEST(OgHttp2AdapterTest, ServerSendsInvalidTrailers) {
+TEST_F(OgHttp2AdapterDataTest, ServerSendsInvalidTrailers) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -5157,7 +5160,7 @@
 
 // Tests the case where the response body is in the progress of being sent while
 // trailers are queued.
-TEST(OgHttp2AdapterTest, ServerSubmitsTrailersWhileDataDeferred) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitsTrailersWhileDataDeferred) {
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
   for (const bool add_more_body_data : {true, false}) {
@@ -5255,7 +5258,7 @@
 // Tests the case where the response body and trailers become blocked by flow
 // control while the stream is writing. Regression test for
 // https://github.com/envoyproxy/envoy/issues/31710
-TEST(OgHttp2AdapterTest, ServerSubmitsTrailersWithFlowControlBlockage) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitsTrailersWithFlowControlBlockage) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -5371,7 +5374,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(OgHttp2AdapterTest, ServerSubmitsTrailersWithDataEndStream) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitsTrailersWithDataEndStream) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -5441,7 +5444,8 @@
                             SpdyFrameType::HEADERS, SpdyFrameType::DATA}));
 }
 
-TEST(OgHttp2AdapterTest, ServerSubmitsTrailersWithDataEndStreamAndDeferral) {
+TEST_F(OgHttp2AdapterDataTest,
+       ServerSubmitsTrailersWithDataEndStreamAndDeferral) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -6403,7 +6407,7 @@
                             SpdyFrameType::HEADERS}));
 }
 
-TEST(OgHttp2AdapterTest, ServerSubmitResponse) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitResponse) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -6503,7 +6507,7 @@
   EXPECT_GT(adapter->GetHpackEncoderDynamicTableSize(), 0);
 }
 
-TEST(OgHttp2AdapterTest, ServerSubmitResponseWithResetFromClient) {
+TEST_F(OgHttp2AdapterDataTest, ServerSubmitResponseWithResetFromClient) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -6644,9 +6648,10 @@
               EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
 }
 
+using OgHttp2AdapterInteractionDataTest = OgHttp2AdapterDataTest;
 // Exercises a naive mutually recursive test client and server. This test fails
 // without recursion guards in OgHttp2Session.
-TEST(OgHttp2AdapterInteractionTest, ClientServerInteractionTest) {
+TEST_F(OgHttp2AdapterInteractionDataTest, ClientServerInteractionTest) {
   TestVisitor client_visitor;
   OgHttp2Adapter::Options client_options;
   client_options.perspective = Perspective::kClient;
@@ -7354,7 +7359,7 @@
   EXPECT_FALSE(adapter->want_write());
 }
 
-TEST(OgHttp2AdapterTest, SkipsSendingFramesForRejectedStream) {
+TEST_F(OgHttp2AdapterDataTest, SkipsSendingFramesForRejectedStream) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -7537,7 +7542,7 @@
   EXPECT_LT(next_result, 0);
 }
 
-TEST(OgHttp2AdapterTest, ServerDoesNotSendFramesAfterImmediateGoAway) {
+TEST_F(OgHttp2AdapterDataTest, ServerDoesNotSendFramesAfterImmediateGoAway) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
@@ -8408,7 +8413,7 @@
   EXPECT_EQ(frames.size(), static_cast<size_t>(result));
 }
 
-TEST(OgHttp2AdapterTest, NegativeFlowControlStreamResumption) {
+TEST_F(OgHttp2AdapterDataTest, NegativeFlowControlStreamResumption) {
   TestVisitor visitor;
   OgHttp2Adapter::Options options;
   options.perspective = Perspective::kServer;
