diff --git a/video/full_stack_tests.cc b/video/full_stack_tests.cc
index a12b334..6f9c6bd 100644
--- a/video/full_stack_tests.cc
+++ b/video/full_stack_tests.cc
@@ -91,7 +91,7 @@
 // };
 
 #if defined(RTC_ENABLE_VP9)
-TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
+TEST(FullStackTest, Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -105,7 +105,8 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCifPlr5Vp9) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -122,7 +123,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
+TEST(FullStackTest, Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
   // Profile 2 might not be available on some platforms until
   // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
   bool profile_2_is_supported = false;
@@ -148,7 +149,7 @@
   fixture->RunWithAnalyzer(generator);
 }
 
-TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
+TEST(FullStackTest, Foreman_Cif_Net_Delay_0_0_Plr_0_Multiplex) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -162,7 +163,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
+TEST(FullStackTest, Generator_Net_Delay_0_0_Plr_0_Multiplex) {
   auto fixture = CreateVideoQualityTestFixture();
 
   ParamsWithLogging generator;
@@ -179,11 +180,11 @@
 
 #if defined(WEBRTC_LINUX)
 // Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
-#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
+#define MAYBE_Net_Delay_0_0_Plr_0 DISABLED_Net_Delay_0_0_Plr_0
 #else
-#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
+#define MAYBE_Net_Delay_0_0_Plr_0 Net_Delay_0_0_Plr_0
 #endif
-TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
+TEST(FullStackTest, MAYBE_Net_Delay_0_0_Plr_0) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging paris_qcif;
   paris_qcif.call.send_side_bwe = true;
@@ -197,7 +198,8 @@
   fixture->RunWithAnalyzer(paris_qcif);
 }
 
-TEST(GenericDescriptorTest, ForemanCifWithoutPacketLoss) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
   ParamsWithLogging foreman_cif;
@@ -213,7 +215,8 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_30Kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -231,7 +234,7 @@
 
 // TODO(webrtc:9722): Remove when experiment is cleaned up.
 TEST(GenericDescriptorTest,
-     ForemanCif30kbpsWithoutPacketLossTrustedRateControl) {
+     Foreman_Cif_30Kbps_Net_Delay_0_0_Plr_0_Trusted_Rate_Ctrl) {
   test::ScopedFieldTrials override_field_trials(
       AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
   auto fixture = CreateVideoQualityTestFixture();
@@ -252,7 +255,7 @@
 }
 
 // Link capacity below default start rate.
-TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
+TEST(FullStackTest, Foreman_Cif_Link_150Kbps_Net_Delay_0_0_Plr_0) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -268,7 +271,8 @@
 }
 
 // Restricted network and encoder overproducing by 30%.
-TEST(FullStackTest, ForemanCifLink150kbpsBadRateController) {
+TEST(FullStackTest,
+     Foreman_Cif_Link_150Kbps_Delay100ms_30Pkts_Queue_Overshoot30) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -291,7 +295,7 @@
 // Packet rate and loss are low enough that loss will happen with ~3s interval.
 // This triggers protection overhead to toggle between zero and non-zero.
 // Link queue is restrictive enough to trigger loss on probes.
-TEST(FullStackTest, ForemanCifMediaCapacitySmallLossAndQueue) {
+TEST(FullStackTest, Foreman_Cif_Link_250Kbps_Delay100ms_10Pkts_Loss1) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -310,7 +314,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCifPlr5) {
+TEST(GenericDescriptorTest, Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -327,7 +331,8 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCifPlr5Ulpfec) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -345,7 +350,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCifPlr5Flexfec) {
+TEST(FullStackTest, Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -361,7 +366,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
+TEST(FullStackTest, Foreman_Cif_500Kbps_Delay_50_0_Plr_3_Flexfec) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -378,7 +383,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
+TEST(FullStackTest, Foreman_Cif_500Kbps_Delay_50_0_Plr_3_Ulpfec) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -396,7 +401,7 @@
 }
 
 #if defined(WEBRTC_USE_H264)
-TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
+TEST(FullStackTest, Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
   auto fixture = CreateVideoQualityTestFixture();
   // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
   ParamsWithLogging foreman_cif;
@@ -411,7 +416,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
+TEST(FullStackTest, Foreman_Cif_30Kbps_Net_Delay_0_0_Plr_0_H264) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -425,7 +430,8 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCifPlr5H264) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -443,7 +449,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
+TEST(FullStackTest, Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
   test::ScopedFieldTrials override_field_trials(
       AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
   auto fixture = CreateVideoQualityTestFixture();
@@ -463,7 +469,7 @@
 }
 
 // Verify that this is worth the bot time, before enabling.
-TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
+TEST(FullStackTest, Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -481,7 +487,7 @@
 
 // Ulpfec with H264 is an unsupported combination, so this test is only useful
 // for debugging. It is therefore disabled by default.
-TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
+TEST(FullStackTest, DISABLED_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -498,7 +504,7 @@
 }
 #endif  // defined(WEBRTC_USE_H264)
 
-TEST(FullStackTest, ForemanCif500kbps) {
+TEST(FullStackTest, Foreman_Cif_500Kbps) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -515,7 +521,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
+TEST(FullStackTest, Foreman_Cif_500Kbps_32Pkts_Queue) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -532,7 +538,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif500kbps100ms) {
+TEST(FullStackTest, Foreman_Cif_500Kbps_100Ms) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -549,7 +555,8 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(GenericDescriptorTest, ForemanCif500kbps100msLimitedQueue) {
+TEST(GenericDescriptorTest,
+     Foreman_Cif_500Kbps_100Ms_32Pkts_Queue_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -568,7 +575,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
+TEST(FullStackTest, Foreman_Cif_500Kbps_100Ms_32Pkts_Queue_Recv_Bwe) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = false;
@@ -585,7 +592,7 @@
   fixture->RunWithAnalyzer(foreman_cif);
 }
 
-TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
+TEST(FullStackTest, Foreman_Cif_1000Kbps_100Ms_32Pkts_Queue) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging foreman_cif;
   foreman_cif.call.send_side_bwe = true;
@@ -603,7 +610,7 @@
 }
 
 // TODO(sprang): Remove this if we have the similar ModerateLimits below?
-TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
+TEST(FullStackTest, Conference_Motion_Hd_2000Kbps_100Ms_32Pkts_Queue) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging conf_motion_hd;
   conf_motion_hd.call.send_side_bwe = true;
@@ -625,7 +632,8 @@
 }
 
 // TODO(webrtc:9722): Remove when experiment is cleaned up.
-TEST(FullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) {
+TEST(FullStackTest,
+     Conference_Motion_Hd_1Tl_Moderate_Limits_Trusted_Rate_Ctrl) {
   test::ScopedFieldTrials override_field_trials(
       AppendFieldTrials(kVp8TrustedRateControllerFieldTrial));
   auto fixture = CreateVideoQualityTestFixture();
@@ -651,7 +659,8 @@
   fixture->RunWithAnalyzer(conf_motion_hd);
 }
 
-TEST(GenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
+TEST(GenericDescriptorTest,
+     Conference_Motion_Hd_2Tl_Moderate_Limits_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging conf_motion_hd;
   conf_motion_hd.call.send_side_bwe = true;
@@ -675,7 +684,7 @@
   fixture->RunWithAnalyzer(conf_motion_hd);
 }
 
-TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
+TEST(FullStackTest, Conference_Motion_Hd_3Tl_Moderate_Limits) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging conf_motion_hd;
   conf_motion_hd.call.send_side_bwe = true;
@@ -697,7 +706,7 @@
   fixture->RunWithAnalyzer(conf_motion_hd);
 }
 
-TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
+TEST(FullStackTest, Conference_Motion_Hd_4Tl_Moderate_Limits) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging conf_motion_hd;
   conf_motion_hd.call.send_side_bwe = true;
@@ -719,7 +728,7 @@
   fixture->RunWithAnalyzer(conf_motion_hd);
 }
 
-TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
+TEST(FullStackTest, Conference_Motion_Hd_3Tl_Alt_Moderate_Limits) {
   test::ScopedFieldTrials field_trial(
       AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
   auto fixture = CreateVideoQualityTestFixture();
@@ -743,8 +752,7 @@
   fixture->RunWithAnalyzer(conf_motion_hd);
 }
 
-TEST(FullStackTest,
-     ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
+TEST(FullStackTest, Conference_Motion_Hd_3Tl_Alt_Heavy_Moderate_Limits) {
   auto fixture = CreateVideoQualityTestFixture();
   test::ScopedFieldTrials field_trial(
       AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
@@ -771,7 +779,7 @@
 }
 
 #if defined(RTC_ENABLE_VP9)
-TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
+TEST(FullStackTest, Conference_Motion_Hd_2000Kbps_100Ms_32Pkts_Queue_Vp9) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging conf_motion_hd;
   conf_motion_hd.call.send_side_bwe = true;
@@ -794,7 +802,7 @@
 }
 #endif
 
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
+TEST(FullStackTest, Screenshare_Slides) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -809,7 +817,7 @@
 
 #if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
 // TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Simulcast) {
+TEST(FullStackTest, Screenshare_Slides_Simulcast) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -839,7 +847,7 @@
 
 #endif  // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
 
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
+TEST(FullStackTest, Screenshare_Slides_Scrolling) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging config;
   config.call.send_side_bwe = true;
@@ -852,7 +860,7 @@
   fixture->RunWithAnalyzer(config);
 }
 
-TEST(GenericDescriptorTest, ScreenshareSlidesVP8_2TL_LossyNet) {
+TEST(GenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -869,7 +877,7 @@
   fixture->RunWithAnalyzer(screenshare);
 }
 
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
+TEST(FullStackTest, Screenshare_Slides_Very_Lossy) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -885,7 +893,7 @@
   fixture->RunWithAnalyzer(screenshare);
 }
 
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
+TEST(FullStackTest, Screenshare_Slides_Lossy_Limited) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -902,7 +910,7 @@
   fixture->RunWithAnalyzer(screenshare);
 }
 
-TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
+TEST(FullStackTest, Screenshare_Slides_Moderately_Restricted) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -971,7 +979,7 @@
 
 #if defined(RTC_ENABLE_VP9)
 
-TEST(FullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
+TEST(FullStackTest, Screenshare_Slides_Vp9_3Sl_High_Fps) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging screenshare;
   screenshare.call.send_side_bwe = true;
@@ -990,7 +998,7 @@
 // TODO(http://bugs.webrtc.org/9506): investigate.
 #if !defined(WEBRTC_MAC)
 
-TEST(FullStackTest, VP9KSVC_3SL_High) {
+TEST(FullStackTest, Vp9ksvc_3Sl_High) {
   webrtc::test::ScopedFieldTrials override_trials(
       AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
   auto fixture = CreateVideoQualityTestFixture();
@@ -1005,7 +1013,7 @@
   fixture->RunWithAnalyzer(simulcast);
 }
 
-TEST(FullStackTest, VP9KSVC_3SL_Low) {
+TEST(FullStackTest, Vp9ksvc_3Sl_Low) {
   webrtc::test::ScopedFieldTrials override_trials(
       AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
   auto fixture = CreateVideoQualityTestFixture();
@@ -1020,7 +1028,7 @@
   fixture->RunWithAnalyzer(simulcast);
 }
 
-TEST(FullStackTest, VP9KSVC_3SL_Low_Bw_Limited) {
+TEST(FullStackTest, Vp9ksvc_3Sl_Low_Bw_Limited) {
   webrtc::test::ScopedFieldTrials override_trials(
       AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
                         "WebRTC-Vp9ExternalRefCtrl/Enabled/"));
@@ -1037,7 +1045,7 @@
   fixture->RunWithAnalyzer(simulcast);
 }
 
-TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
+TEST(FullStackTest, Vp9ksvc_3Sl_Medium_Network_Restricted) {
   webrtc::test::ScopedFieldTrials override_trials(
       AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
   auto fixture = CreateVideoQualityTestFixture();
@@ -1055,7 +1063,7 @@
 }
 
 // TODO(webrtc:9722): Remove when experiment is cleaned up.
-TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
+TEST(FullStackTest, Vp9ksvc_3Sl_Medium_Network_Restricted_Trusted_Rate) {
   webrtc::test::ScopedFieldTrials override_trials(
       AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"
                         "WebRTC-LibvpxVp9TrustedRateController/Enabled/"));
@@ -1079,12 +1087,12 @@
 // Android bots can't handle FullHD, so disable the test.
 // TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
-#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
+#define MAYBE_Simulcast_HD_High DISABLED_Simulcast_HD_High
 #else
-#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
+#define MAYBE_Simulcast_HD_High Simulcast_HD_High
 #endif
 
-TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
+TEST(FullStackTest, MAYBE_Simulcast_HD_High) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging simulcast;
   simulcast.call.send_side_bwe = true;
@@ -1107,7 +1115,7 @@
   fixture->RunWithAnalyzer(simulcast);
 }
 
-TEST(FullStackTest, SimulcastVP8_3SL_High) {
+TEST(FullStackTest, Simulcast_Vp8_3Sl_High) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging simulcast;
   simulcast.call.send_side_bwe = true;
@@ -1133,7 +1141,7 @@
   fixture->RunWithAnalyzer(simulcast);
 }
 
-TEST(FullStackTest, SimulcastVP8_3SL_Low) {
+TEST(FullStackTest, Simulcast_Vp8_3Sl_Low) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging simulcast;
   simulcast.call.send_side_bwe = true;
@@ -1163,11 +1171,11 @@
 // available and exercises WebRTC calls with a high target bitrate(100 Mbps).
 // Android32 bots can't handle this high bitrate, so disable test for those.
 #if defined(WEBRTC_ANDROID)
-#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
+#define MAYBE_High_Bitrate_With_Fake_Codec DISABLED_High_Bitrate_With_Fake_Codec
 #else
-#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
+#define MAYBE_High_Bitrate_With_Fake_Codec High_Bitrate_With_Fake_Codec
 #endif  // defined(WEBRTC_ANDROID)
-TEST(FullStackTest, MAYBE_HighBitrateWithFakeCodec) {
+TEST(FullStackTest, MAYBE_High_Bitrate_With_Fake_Codec) {
   auto fixture = CreateVideoQualityTestFixture();
   const int target_bitrate = 100000000;
   ParamsWithLogging generator;
@@ -1199,12 +1207,12 @@
 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
 // Fails on mobile devices:
 // https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
-#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
+#define MAYBE_Largeroom_50Thumb DISABLED_Largeroom_50Thumb
 #else
-#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
+#define MAYBE_Largeroom_50Thumb Largeroom_50Thumb
 #endif
 
-TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
+TEST(FullStackTest, MAYBE_Largeroom_50Thumb) {
   auto fixture = CreateVideoQualityTestFixture();
   ParamsWithLogging large_room;
   large_room.call.send_side_bwe = true;
