diff --git a/site_utils/stats/apache_error_log_metrics_unittest.py b/site_utils/stats/apache_error_log_metrics_unittest.py
index eb9df9c..2ef3b01 100644
--- a/site_utils/stats/apache_error_log_metrics_unittest.py
+++ b/site_utils/stats/apache_error_log_metrics_unittest.py
@@ -74,45 +74,46 @@
         self.assertEqual('error', matched[4].group('log_level'))
         self.assertEqual(None, matched[4].group('mod_wsgi'))
 
+
+    def _ShellOutToScript(self, lines):
+        """Shells out to the script.
+
+        @param lines: Lines to feed to stdin."""
+        with tempfile.NamedTemporaryFile() as temp_file:
+            p = subprocess.Popen([SCRIPT_PATH,
+                                  '--debug-metrics-file', temp_file.name],
+                                 stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+            p.communicate('\n'.join(lines))
+
+            with open(temp_file.name) as fh:
+                return fh.read()
+
+
     def testApacheErrorLogScriptWithNonMatchingLine(self):
         """Try shelling out the the script with --debug-file.
 
         Sending it a non-matching line should result in no output from
         ERROR_LOG_METRIC.
         """
-        with tempfile.NamedTemporaryFile() as temp_file:
-            p = subprocess.Popen([SCRIPT_PATH,
-                                  '--debug-metrics-file', temp_file.name],
-                                 stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-            p.communicate('an-example-log-line')
+        contents = self._ShellOutToScript(['an example log line'])
 
-            with open(temp_file.name) as fh:
-                contents = fh.read()
-
-            # We have to use re.search here with a word border character ('\b')
-            # because the ERROR_LOG_LINE_METRIC contains ERROR_LOG_METRIC as a
-            # substring.
-            self.assertTrue(re.search(
-                apache_error_log_metrics.ERROR_LOG_LINE_METRIC[1:] + r'\b',
-                contents))
-            self.assertFalse(re.search(
-                apache_error_log_metrics.ERROR_LOG_METRIC[1:] + r'\b',
-                contents))
+        # We have to use re.search here with a word border character ('\b')
+        # because the ERROR_LOG_LINE_METRIC contains ERROR_LOG_METRIC as a
+        # substring.
+        self.assertTrue(re.search(
+            apache_error_log_metrics.ERROR_LOG_LINE_METRIC[1:] + r'\b',
+            contents))
+        self.assertFalse(re.search(
+            apache_error_log_metrics.ERROR_LOG_METRIC[1:] + r'\b',
+            contents))
 
     def testApachErrorLogScriptWithMatchingLine(self):
-        """Try shelling out the the script with --debug-file.
+        """Try shelling out the the script with a matching line.
 
         Sending it a line which matches the first-line regex should result in
         output from ERROR_LOG_METRIC.
         """
-        with tempfile.NamedTemporaryFile() as temp_file:
-            p = subprocess.Popen([SCRIPT_PATH,
-                                  '--debug-metrics-file', temp_file.name],
-                                 stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-            p.communicate('[foo] [:bar] [pid 123] WARNING')
-
-            with open(temp_file.name) as fh:
-                contents = fh.read()
+        contents = self._ShellOutToScript(['[foo] [:bar] [pid 123] WARNING'])
 
         self.assertTrue(re.search(
             apache_error_log_metrics.ERROR_LOG_LINE_METRIC[1:] + r'\b',
@@ -121,17 +122,9 @@
             apache_error_log_metrics.ERROR_LOG_METRIC[1:] + r'\b',
             contents))
 
-
     def testApachErrorLogScriptWithSpecialLines(self):
-        """Sending lines with specific messages ."""
-        with tempfile.NamedTemporaryFile() as temp_file:
-            p = subprocess.Popen([SCRIPT_PATH,
-                                  '--debug-metrics-file', temp_file.name],
-                                 stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-            p.communicate('[foo] [:bar] [pid 123] WARNING Segmentation fault')
-
-            with open(temp_file.name) as fh:
-                contents = fh.read()
+        """Sending lines with specific messages."""
+        contents = self._ShellOutToScript(['[foo] [:bar] [pid 123] WARNING Segmentation fault'])
 
         self.assertTrue(re.search(
             apache_error_log_metrics.SEGFAULT_METRIC[1:] + r'\b',
