diff --git a/abi/VtsVndkAbiTest.py b/abi/VtsVndkAbiTest.py
index 89d12e2..1fcbd64 100644
--- a/abi/VtsVndkAbiTest.py
+++ b/abi/VtsVndkAbiTest.py
@@ -240,9 +240,9 @@
                           with the dump directories of the given version.
 
         Returns:
-            An integer, number of incompatible libraries.
+            A list of strings, the incompatible libraries.
         """
-        error_count = 0
+        error_list = []
         dump_paths = dict()
         lib_paths = dict()
         for parent_dir, dump_name in utils.iterate_files(dump_dir):
@@ -292,10 +292,10 @@
                               rel_path,
                               "\n".join(" ".join(e) for e in vtable_diff))
             if (has_exception or missing_symbols or vtable_diff):
-                error_count += 1
+                error_list.append(rel_path)
             else:
                 logging.info("%s: Pass", rel_path)
-        return error_count
+        return error_list
 
     @staticmethod
     def _GetLinkerSearchIndex(target_path):
@@ -343,9 +343,13 @@
         for target_dir, host_dir in zip(target_dirs, host_dirs):
             self._PullOrCreateDir(target_dir, host_dir)
 
-        error_count = self._ScanLibDirs(dump_dir, host_dirs, dump_version)
-        asserts.assertEqual(error_count, 0,
-                            "Total number of errors: " + str(error_count))
+        assert_lines = self._ScanLibDirs(dump_dir, host_dirs, dump_version)
+        if assert_lines:
+            error_count = len(assert_lines)
+            if error_count > 20:
+                assert_lines = assert_lines[:20] + ["..."]
+            assert_lines.append("Total number of errors: " + str(error_count))
+            asserts.fail("\n".join(assert_lines))
 
 
 if __name__ == "__main__":
diff --git a/dependency/VtsVndkDependencyTest.py b/dependency/VtsVndkDependencyTest.py
index 0302220..81e22b5 100644
--- a/dependency/VtsVndkDependencyTest.py
+++ b/dependency/VtsVndkDependencyTest.py
@@ -451,18 +451,26 @@
         if self._dut.is64Bit:
             dep_errors.extend(self._TestElfDependency(64, objs))
 
+        assert_lines = []
         if read_errors:
-            error_lines = ("%s: %s" % (x[0], x[1]) for x in read_errors)
+            error_lines = ["%s: %s" % (x[0], x[1]) for x in read_errors]
             logging.error("%d read errors:\n%s",
                           len(read_errors), "\n".join(error_lines))
+            assert_lines.extend(error_lines[:20])
+
         if dep_errors:
-            error_lines = ("%s: %s" % (x[0], ", ".join(x[1]))
-                           for x in dep_errors)
+            error_lines = ["%s: %s" % (x[0], ", ".join(x[1]))
+                           for x in dep_errors]
             logging.error("%d disallowed dependencies:\n%s",
                           len(dep_errors), "\n".join(error_lines))
+            assert_lines.extend(error_lines[:20])
+
         error_count = len(read_errors) + len(dep_errors)
-        asserts.assertEqual(error_count, 0,
-                            "Total number of errors: " + str(error_count))
+        if error_count:
+            if error_count > len(assert_lines):
+                assert_lines.append("...")
+            assert_lines.append("Total number of errors: " + str(error_count))
+            asserts.fail("\n".join(assert_lines))
 
 
 if __name__ == "__main__":
diff --git a/files/VtsVndkFilesTest.py b/files/VtsVndkFilesTest.py
index d88cd8a..41e6386 100644
--- a/files/VtsVndkFilesTest.py
+++ b/files/VtsVndkFilesTest.py
@@ -68,6 +68,22 @@
         return target_file_utils.FindFiles(self._shell, dir_path, "*",
                                            "! -type d")
 
+    @staticmethod
+    def _Fail(unexpected_paths):
+        """Logs error and fails current test.
+
+        Args:
+            unexpected_paths: A list of strings, the paths to be shown in the
+                              log message.
+        """
+        logging.error("Unexpected files:\n%s", "\n".join(unexpected_paths))
+        assert_lines = unexpected_paths[:20]
+        if len(unexpected_paths) > 20:
+            assert_lines.append("...")
+        assert_lines.append(
+            "Total number of errors: %d" % len(unexpected_paths))
+        asserts.fail("\n".join(assert_lines))
+
     def _TestVndkDirectory(self, vndk_dir, vndk_list_names):
         """Verifies that the VNDK directory doesn't contain extra files.
 
@@ -84,8 +100,7 @@
         unexpected = [x for x in self._ListFiles(vndk_dir) if
                       path_utils.TargetBaseName(x) not in vndk_set]
         if unexpected:
-            logging.error("Unexpected files:\n%s", "\n".join(unexpected))
-            asserts.fail("Total number of errors: %d" % len(unexpected))
+            self._Fail(unexpected)
 
     def _TestNotInVndkDirecotory(self, vndk_dir, vndk_list_names, except_libs):
         """Verifies that VNDK directory doesn't contain specific files.
@@ -106,8 +121,7 @@
         unexpected = [x for x in self._ListFiles(vndk_dir) if
                       path_utils.TargetBaseName(x) in vndk_set]
         if unexpected:
-            logging.error("Unexpected files:\n%s", "\n".join(unexpected))
-            asserts.fail("Total number of errors: %d" % len(unexpected))
+            self._Fail(unexpected)
 
     def testVndkCoreDirectory(self):
         """Verifies that VNDK-core directory doesn't contain extra files."""
diff --git a/open_libraries/VtsVndkOpenLibrariesTest.py b/open_libraries/VtsVndkOpenLibrariesTest.py
index 8dbfda6..5a7bc33 100644
--- a/open_libraries/VtsVndkOpenLibrariesTest.py
+++ b/open_libraries/VtsVndkOpenLibrariesTest.py
@@ -129,8 +129,13 @@
             error_lines = ["%s %s %s" % (pid, cmds[pid], libs)
                            for pid, libs in deps.iteritems()]
             logging.error("pid command libraries\n%s", "\n".join(error_lines))
-            asserts.fail("Number of vendor processes using system libraries: " +
-                         str(len(deps)))
+
+            assert_lines = ["pid command libraries"] + error_lines[:20]
+            if len(deps) > 20:
+                assert_lines.append("...")
+            assert_lines.append("Number of vendor processes using system "
+                                "libraries: " + str(len(deps)))
+            asserts.fail("\n".join(assert_lines))
 
 
 if __name__ == "__main__":
