diff --git a/test/API/python_api/breakpoint/TestBreakpointAPI.py b/test/API/python_api/breakpoint/TestBreakpointAPI.py
index 80324ee..bd02b76 100644
--- a/test/API/python_api/breakpoint/TestBreakpointAPI.py
+++ b/test/API/python_api/breakpoint/TestBreakpointAPI.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_breakpoint_is_valid(self):
         """Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
         self.build()
@@ -45,7 +44,6 @@
             not breakpoint,
             "Breakpoint we deleted is no longer valid.")
 
-    @add_test_categories(['pyapi'])
     def test_target_delete(self):
         """Make sure that if an SBTarget gets deleted the associated
         Breakpoint's IsValid returns false."""
diff --git a/test/API/python_api/class_members/TestSBTypeClassMembers.py b/test/API/python_api/class_members/TestSBTypeClassMembers.py
index 091bb1b..061556a 100644
--- a/test/API/python_api/class_members/TestSBTypeClassMembers.py
+++ b/test/API/python_api/class_members/TestSBTypeClassMembers.py
@@ -24,7 +24,6 @@
         self.line = line_number(self.source, '// set breakpoint here')
 
     @skipUnlessDarwin
-    @add_test_categories(['pyapi'])
     def test(self):
         """Test SBType APIs to fetch member function types."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/debugger/TestDebuggerAPI.py b/test/API/python_api/debugger/TestDebuggerAPI.py
index 1559714..f9fe64d 100644
--- a/test/API/python_api/debugger/TestDebuggerAPI.py
+++ b/test/API/python_api/debugger/TestDebuggerAPI.py
@@ -14,7 +14,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_debugger_api_boundary_condition(self):
         """Exercise SBDebugger APIs with boundary conditions."""
         self.dbg.HandleCommand(None)
@@ -37,7 +36,6 @@
         fresh_dbg = lldb.SBDebugger()
         self.assertEquals(len(fresh_dbg), 0)
 
-    @add_test_categories(['pyapi'])
     def test_debugger_delete_invalid_target(self):
         """SBDebugger.DeleteTarget() should not crash LLDB given and invalid target."""
         target = lldb.SBTarget()
diff --git a/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py b/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
index 65c4dac..d69e13f 100644
--- a/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
+++ b/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
@@ -25,7 +25,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_SBAddress(self):
         obj = lldb.SBAddress()
         if self.TraceOn():
@@ -35,7 +34,6 @@
         import sb_address
         sb_address.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBlock(self):
         obj = lldb.SBBlock()
         if self.TraceOn():
@@ -45,7 +43,6 @@
         import sb_block
         sb_block.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpoint(self):
         obj = lldb.SBBreakpoint()
         if self.TraceOn():
@@ -55,7 +52,6 @@
         import sb_breakpoint
         sb_breakpoint.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpointLocation(self):
         obj = lldb.SBBreakpointLocation()
         if self.TraceOn():
@@ -65,7 +61,6 @@
         import sb_breakpointlocation
         sb_breakpointlocation.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpointName(self):
         obj = lldb.SBBreakpointName()
         if self.TraceOn():
@@ -75,7 +70,6 @@
         import sb_breakpointname
         sb_breakpointname.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBroadcaster(self):
         obj = lldb.SBBroadcaster()
         if self.TraceOn():
@@ -85,7 +79,6 @@
         import sb_broadcaster
         sb_broadcaster.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCommandReturnObject(self):
         """SBCommandReturnObject object is valid after default construction."""
         obj = lldb.SBCommandReturnObject()
@@ -93,7 +86,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCommunication(self):
         obj = lldb.SBCommunication()
         if self.TraceOn():
@@ -103,7 +95,6 @@
         import sb_communication
         sb_communication.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCompileUnit(self):
         obj = lldb.SBCompileUnit()
         if self.TraceOn():
@@ -113,7 +104,6 @@
         import sb_compileunit
         sb_compileunit.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_SBDebugger(self):
         obj = lldb.SBDebugger()
@@ -124,7 +114,6 @@
         import sb_debugger
         sb_debugger.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     # darwin: This test passes with swig 3.0.2, fails w/3.0.5 other tests fail
     # with 2.0.12 http://llvm.org/pr23488
     def test_SBError(self):
@@ -136,7 +125,6 @@
         import sb_error
         sb_error.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBEvent(self):
         obj = lldb.SBEvent()
         # This is just to test that typemap, as defined in lldb.swig, works.
@@ -148,7 +136,6 @@
         import sb_event
         sb_event.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFileSpec(self):
         obj = lldb.SBFileSpec()
         # This is just to test that FileSpec(None) does not crash.
@@ -160,7 +147,6 @@
         import sb_filespec
         sb_filespec.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFrame(self):
         obj = lldb.SBFrame()
         if self.TraceOn():
@@ -170,7 +156,6 @@
         import sb_frame
         sb_frame.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFunction(self):
         obj = lldb.SBFunction()
         if self.TraceOn():
@@ -180,7 +165,6 @@
         import sb_function
         sb_function.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_SBFile(self):
         sbf = lldb.SBFile()
@@ -194,7 +178,6 @@
         self.assertEqual(n, 0)
         self.assertTrue(e.Fail())
 
-    @add_test_categories(['pyapi'])
     def test_SBInstruction(self):
         obj = lldb.SBInstruction()
         if self.TraceOn():
@@ -204,7 +187,6 @@
         import sb_instruction
         sb_instruction.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBInstructionList(self):
         obj = lldb.SBInstructionList()
         if self.TraceOn():
@@ -214,7 +196,6 @@
         import sb_instructionlist
         sb_instructionlist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBLineEntry(self):
         obj = lldb.SBLineEntry()
         if self.TraceOn():
@@ -224,7 +205,6 @@
         import sb_lineentry
         sb_lineentry.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBListener(self):
         obj = lldb.SBListener()
         if self.TraceOn():
@@ -234,7 +214,6 @@
         import sb_listener
         sb_listener.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     # Py3 asserts due to a bug in SWIG.  Trying to upstream a patch to fix
     # this in 3.0.8
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
@@ -247,7 +226,6 @@
         import sb_module
         sb_module.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBProcess(self):
         obj = lldb.SBProcess()
         if self.TraceOn():
@@ -257,7 +235,6 @@
         import sb_process
         sb_process.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBProcessInfo(self):
         obj = lldb.SBProcessInfo()
         if self.TraceOn():
@@ -267,7 +244,6 @@
         import sb_process_info
         sb_process_info.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSection(self):
         obj = lldb.SBSection()
         if self.TraceOn():
@@ -277,7 +253,6 @@
         import sb_section
         sb_section.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBStream(self):
         """SBStream object is valid after default construction."""
         obj = lldb.SBStream()
@@ -285,7 +260,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBStringList(self):
         obj = lldb.SBStringList()
         if self.TraceOn():
@@ -295,7 +269,6 @@
         import sb_stringlist
         sb_stringlist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbol(self):
         obj = lldb.SBSymbol()
         if self.TraceOn():
@@ -305,7 +278,6 @@
         import sb_symbol
         sb_symbol.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbolContext(self):
         obj = lldb.SBSymbolContext()
         if self.TraceOn():
@@ -315,7 +287,6 @@
         import sb_symbolcontext
         sb_symbolcontext.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbolContextList(self):
         """SBSymbolContextList object is valid after default construction."""
         obj = lldb.SBSymbolContextList()
@@ -323,7 +294,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBTarget(self):
         obj = lldb.SBTarget()
         if self.TraceOn():
@@ -333,7 +303,6 @@
         import sb_target
         sb_target.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBThread(self):
         obj = lldb.SBThread()
         if self.TraceOn():
@@ -343,7 +312,6 @@
         import sb_thread
         sb_thread.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBType(self):
         try:
             obj = lldb.SBType()
@@ -361,7 +329,6 @@
         import sb_type
         sb_type.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBTypeList(self):
         """SBTypeList object is valid after default construction."""
         obj = lldb.SBTypeList()
@@ -369,7 +336,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBValue(self):
         obj = lldb.SBValue()
         if self.TraceOn():
@@ -379,7 +345,6 @@
         import sb_value
         sb_value.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBValueList(self):
         obj = lldb.SBValueList()
         if self.TraceOn():
@@ -389,7 +354,6 @@
         import sb_valuelist
         sb_valuelist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBWatchpoint(self):
         obj = lldb.SBWatchpoint()
         if self.TraceOn():
diff --git a/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py b/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
index 80b39d2..6be7d01 100644
--- a/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
+++ b/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
@@ -16,7 +16,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfRemote
     @skipIfReproducer # GetInstructions is not instrumented.
diff --git a/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py b/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
index 86c51a2..9260b72 100644
--- a/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
+++ b/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
@@ -17,7 +17,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfLLVMTargetMissing("ARM")
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
diff --git a/test/API/python_api/event/TestEvents.py b/test/API/python_api/event/TestEvents.py
index b53163b..95cf5b2 100644
--- a/test/API/python_api/event/TestEvents.py
+++ b/test/API/python_api/event/TestEvents.py
@@ -26,7 +26,6 @@
         self.line = line_number(
             'main.c', '// Find the line number of function "c" here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(
         oslist=["linux"],
         bugnumber="llvm.org/pr23730 Flaky, fails ~1/10 cases")
@@ -119,7 +118,6 @@
 
         # Shouldn't we be testing against some kind of expectation here?
 
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux("llvm.org/pr23730")  # Flaky, fails ~1/100 cases
     @skipIfWindows # This is flakey on Windows AND when it fails, it hangs: llvm.org/pr38373
     @skipIfNetBSD
@@ -197,7 +195,6 @@
         self.assertTrue(event,
                         "My listening thread successfully received an event")
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(
         oslist=["linux"],
         bugnumber="llvm.org/pr23617 Flaky, fails ~1/10 cases")
diff --git a/test/API/python_api/file_handle/TestFileHandle.py b/test/API/python_api/file_handle/TestFileHandle.py
index bbcb112..286b3ee 100644
--- a/test/API/python_api/file_handle/TestFileHandle.py
+++ b/test/API/python_api/file_handle/TestFileHandle.py
@@ -119,7 +119,6 @@
         return ret.GetOutput()
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_out_script(self):
         with open(self.out_filename, 'w') as f:
@@ -135,7 +134,6 @@
             self.assertEqual(readStrippedLines(f), ['2', 'FOO'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_out(self):
         with open(self.out_filename, 'w') as f:
@@ -144,7 +142,6 @@
         with open(self.out_filename, 'r') as f:
             self.assertIn('deadbeef', f.read())
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_err_with_get(self):
         with open(self.out_filename, 'w') as f:
@@ -159,7 +156,6 @@
             self.assertTrue(re.search(r'FOOBAR', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_err(self):
         with open(self.out_filename, 'w') as f:
@@ -169,7 +165,6 @@
             self.assertIn("is not a valid command", f.read())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_error(self):
         with open(self.out_filename, 'w') as f:
@@ -179,7 +174,6 @@
             errors = f.read()
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_type_errors(self):
         sbf = lldb.SBFile()
@@ -190,7 +184,6 @@
         self.assertRaises(Exception, sbf.Read, u"ham sandwich")
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_fileno(self):
         with open(self.out_filename, 'w') as f:
@@ -205,7 +198,6 @@
             self.assertEqual(readStrippedLines(f), ['FOO', 'BAR'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write(self):
         with open(self.out_filename, 'w') as f:
@@ -219,7 +211,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_fileno(self):
         with open(self.out_filename, 'w') as f:
@@ -233,7 +224,6 @@
             self.assertEqual(buffer[:n], b'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read(self):
         with open(self.out_filename, 'w') as f:
@@ -249,7 +239,6 @@
             self.assertTrue(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_out(self):
         with open(self.out_filename, 'w') as f:
@@ -264,7 +253,6 @@
             self.assertEqual(readStrippedLines(f), ['3', 'quux'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_help(self):
         with open(self.out_filename, 'w') as f:
@@ -276,7 +264,6 @@
             self.assertTrue(re.search(r'Show a list of all debugger commands', f.read()))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_help(self):
         with open(self.out_filename, 'w') as f:
@@ -287,7 +274,6 @@
             self.assertIn('Show a list of all debugger commands', f.read())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate(self):
         with open(self.out_filename, 'w') as f:
@@ -304,7 +290,6 @@
             self.assertTrue(re.search(r'QUUX', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate_string(self):
@@ -321,7 +306,6 @@
         self.assertTrue(re.search(r'QUUX', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate_sbfile_string(self):
@@ -337,7 +321,6 @@
         self.assertTrue(re.search(r'Show a list of all debugger commands', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -361,7 +344,6 @@
             self.assertTrue(re.search(r'Show a list of all debugger commands', f.read()))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -380,7 +362,6 @@
             self.assertIn('Show a list of all debugger commands', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_binary_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -399,7 +380,6 @@
             self.assertIn('Show a list of all debugger commands', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_inout(self):
@@ -417,7 +397,6 @@
         self.assertIn('0xfff', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_bytes_inout(self):
@@ -435,7 +414,6 @@
         self.assertIn(b'Set a breakpoint', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_error(self):
         with open(self.out_filename, 'w') as f:
@@ -454,7 +432,6 @@
             self.assertTrue(re.search(r'zork', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_replace_stdout(self):
         f = io.StringIO()
@@ -465,7 +442,6 @@
             self.assertEqual(sys.stdout, f)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_replace_stdout_with_nonfile(self):
         f = io.StringIO()
@@ -481,7 +457,6 @@
         self.assertEqual(f.getvalue(), "FOO")
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_borrowed(self):
         with open(self.out_filename, 'w') as f:
@@ -497,7 +472,6 @@
 
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_forced(self):
@@ -519,7 +493,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_forced_borrowed(self):
@@ -541,7 +514,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_string(self):
@@ -555,7 +527,6 @@
         self.assertTrue(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_out(self):
@@ -566,7 +537,6 @@
         self.assertEqual(f.getvalue().strip(), "'foobar'")
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_error(self):
@@ -578,7 +548,6 @@
         self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_bytes(self):
@@ -591,7 +560,6 @@
         sbf.Close()
         self.assertTrue(f.closed)
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_string(self):
@@ -603,7 +571,6 @@
         self.assertEqual(buf[:n], b'zork')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_string_one_byte(self):
@@ -616,7 +583,6 @@
         self.assertEqual(e.GetCString(), "can't read less than 6 bytes from a utf8 text stream")
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_bytes(self):
@@ -628,7 +594,6 @@
         self.assertEqual(buf[:n], b'zork')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_out(self):
@@ -641,7 +606,6 @@
             self.assertEqual(f.read().strip(), '4')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_file_out(self):
@@ -653,7 +617,6 @@
             self.assertEqual(f.read().strip(), '4')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_error(self):
         with open(self.out_filename, 'w') as f:
@@ -666,7 +629,6 @@
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_file_error(self):
         with open(self.out_filename, 'w') as f:
@@ -678,7 +640,6 @@
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_exceptions(self):
         self.assertRaises(Exception, lldb.SBFile, None)
@@ -697,7 +658,6 @@
             self.assertIn('OH NOE', error.GetCString())
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_exceptions_logged(self):
@@ -709,7 +669,6 @@
         self.assertTrue(any('OH NOE' in msg for msg in messages))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_flush(self):
@@ -740,7 +699,6 @@
         self.assertFalse(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_flush(self):
         with open(self.out_filename, 'w') as f:
@@ -762,7 +720,6 @@
             self.assertEqual(f.read(), 'foobar')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_close(self):
         with open(self.out_filename, 'w') as f:
@@ -781,7 +738,6 @@
             self.assertTrue(re.search(r'ZAP', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_stdout(self):
@@ -792,7 +748,6 @@
         self.assertEqual(f.getvalue().strip().split(), ["foobar", "7"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_stdout_file(self):
         with open(self.out_filename, 'w') as f:
@@ -808,7 +763,6 @@
             self.assertEqual(lines, ["foobar"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_identity(self):
@@ -865,7 +819,6 @@
             self.assertEqual("foobar", f.read().strip())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_back_and_forth(self):
         with open(self.out_filename, 'w') as f:
@@ -885,7 +838,6 @@
             self.assertEqual(list(range(10)), list(map(int, f.read().strip().split())))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_set_filehandle_none(self):
         self.assertRaises(Exception, self.dbg.SetOutputFile, None)
@@ -924,7 +876,6 @@
                 self.assertEqual(sbf.GetFile().fileno(), 0)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbstream(self):
 
diff --git a/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py b/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
index 4042052..727c114 100644
--- a/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
+++ b/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_formatters_api(self):
         """Test that SBFrame::FindValue finds things but does not duplicate the entire variables list"""
         self.build()
diff --git a/test/API/python_api/formatters/TestFormattersSBAPI.py b/test/API/python_api/formatters/TestFormattersSBAPI.py
index 3f8329c..ac135b9 100644
--- a/test/API/python_api/formatters/TestFormattersSBAPI.py
+++ b/test/API/python_api/formatters/TestFormattersSBAPI.py
@@ -19,7 +19,6 @@
         TestBase.setUp(self)
         self.line = line_number('main.cpp', '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_formatters_api(self):
         """Test Python APIs for working with formatters"""
         self.build()
@@ -436,7 +435,6 @@
                 lldb.eLanguageTypeObjC) is not None,
             "ObjC category is None")
 
-    @add_test_categories(['pyapi'])
     def test_force_synth_off(self):
         """Test that one can have the public API return non-synthetic SBValues if desired"""
         self.build(dictionary={'EXE': 'no_synth'})
diff --git a/test/API/python_api/frame/TestFrames.py b/test/API/python_api/frame/TestFrames.py
index c8a58ad..f02257a 100644
--- a/test/API/python_api/frame/TestFrames.py
+++ b/test/API/python_api/frame/TestFrames.py
@@ -16,7 +16,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_arg_vals_for_call_stack(self):
         """Exercise SBFrame.GetVariables() API to get argument vals."""
         self.build()
@@ -120,7 +119,6 @@
                     substrs=["a((int)val=1, (char)ch='A')",
                              "a((int)val=3, (char)ch='A')"])
 
-    @add_test_categories(['pyapi'])
     def test_frame_api_boundary_condition(self):
         """Exercise SBFrame APIs with boundary condition inputs."""
         self.build()
@@ -162,7 +160,6 @@
 
         frame.EvaluateExpression(None)
 
-    @add_test_categories(['pyapi'])
     def test_frame_api_IsEqual(self):
         """Exercise SBFrame API IsEqual."""
         self.build()
diff --git a/test/API/python_api/frame/inlines/TestInlinedFrame.py b/test/API/python_api/frame/inlines/TestInlinedFrame.py
index 46b9b9f..aa8c9c3 100644
--- a/test/API/python_api/frame/inlines/TestInlinedFrame.py
+++ b/test/API/python_api/frame/inlines/TestInlinedFrame.py
@@ -25,7 +25,6 @@
         self.second_stop = line_number(
             self.source, '// This should correspond to the second break stop.')
 
-    @add_test_categories(['pyapi'])
     def test_stop_at_outer_inline(self):
         """Exercise SBFrame.IsInlined() and SBFrame.GetFunctionName()."""
         self.build()
diff --git a/test/API/python_api/function_symbol/TestDisasmAPI.py b/test/API/python_api/function_symbol/TestDisasmAPI.py
index d67798e..c884241 100644
--- a/test/API/python_api/function_symbol/TestDisasmAPI.py
+++ b/test/API/python_api/function_symbol/TestDisasmAPI.py
@@ -24,7 +24,6 @@
         self.line2 = line_number(
             'main.c', '// Find the line number for breakpoint 2 here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test(self):
         """Exercise getting SBAddress objects, disassembly, and SBAddress APIs."""
diff --git a/test/API/python_api/function_symbol/TestSymbolAPI.py b/test/API/python_api/function_symbol/TestSymbolAPI.py
index 09e7db7..14b01d5 100644
--- a/test/API/python_api/function_symbol/TestSymbolAPI.py
+++ b/test/API/python_api/function_symbol/TestSymbolAPI.py
@@ -24,7 +24,6 @@
         self.line2 = line_number(
             'main.c', '// Find the line number for breakpoint 2 here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test(self):
         """Exercise some SBSymbol and SBAddress APIs."""
diff --git a/test/API/python_api/hello_world/TestHelloWorld.py b/test/API/python_api/hello_world/TestHelloWorld.py
index ea8b9a7..0f616f4 100644
--- a/test/API/python_api/hello_world/TestHelloWorld.py
+++ b/test/API/python_api/hello_world/TestHelloWorld.py
@@ -26,7 +26,6 @@
         # Call super's tearDown().
         TestBase.tearDown(self)
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     def test_with_process_launch_api(self):
         """Create target, breakpoint, launch a process, and then kill it."""
@@ -72,7 +71,6 @@
         # The breakpoint should have a hit count of 1.
         self.assertEqual(breakpoint.GetHitCount(), 1, BREAKPOINT_HIT_ONCE)
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     @skipIfReproducer # File synchronization is not supported during replay.
     def test_with_attach_to_process_with_id_api(self):
@@ -104,7 +102,6 @@
                     substrs=['main.c:%d' % self.line2,
                              '(int)argc=2'])
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     @skipIfAsan # FIXME: Hangs indefinitely.
     @skipIfReproducer # FIXME: Unexpected packet during (active) replay
diff --git a/test/API/python_api/interpreter/TestCommandInterpreterAPI.py b/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
index a920ce8..151d445 100644
--- a/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
+++ b/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
@@ -20,7 +20,6 @@
         # Find the line number to break on inside main.cpp.
         self.line = line_number('main.c', 'Hello world.')
 
-    @add_test_categories(['pyapi'])
     def test_with_process_launch_api(self):
         """Test the SBCommandInterpreter APIs."""
         self.build()
@@ -74,7 +73,6 @@
         if self.TraceOn():
             lldbutil.print_stacktraces(process)
 
-    @add_test_categories(['pyapi'])
     def test_command_output(self):
         """Test command output handling."""
         ci = self.dbg.GetCommandInterpreter()
diff --git a/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py b/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
index 9f30f6a..86d7f78 100644
--- a/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
+++ b/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -30,7 +30,6 @@
         self.dbg.SetOutputFileHandle(self.devnull, False)
         self.dbg.SetErrorFileHandle (self.devnull, False)
 
-    @add_test_categories(['pyapi'])
     def test_run_session_with_error_and_quit_legacy(self):
         """Run non-existing and quit command returns appropriate values"""
 
@@ -64,7 +63,6 @@
         self.dbg.SetOutputFile(devnull)
         self.dbg.SetErrorFile(devnull)
 
-    @add_test_categories(['pyapi'])
     def test_run_session_with_error_and_quit(self):
         """Run non-existing and quit command returns appropriate values"""
 
diff --git a/test/API/python_api/lldbutil/frame/TestFrameUtils.py b/test/API/python_api/lldbutil/frame/TestFrameUtils.py
index 09a179c..9c69bd9 100644
--- a/test/API/python_api/lldbutil/frame/TestFrameUtils.py
+++ b/test/API/python_api/lldbutil/frame/TestFrameUtils.py
@@ -22,7 +22,6 @@
         self.line = line_number('main.c',
                                 "// Find the line number here.")
 
-    @add_test_categories(['pyapi'])
     def test_frame_utils(self):
         """Test utility functions for the frame object."""
         self.build()
diff --git a/test/API/python_api/lldbutil/iter/TestLLDBIterator.py b/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
index 4cd4970..4fdde97 100644
--- a/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
+++ b/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
@@ -23,7 +23,6 @@
             'main.cpp', '// Set break point at this line.')
         self.line2 = line_number('main.cpp', '// And that line.')
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_module(self):
         """Test module_iter works correctly for SBTarget -> SBModule."""
         self.build()
@@ -59,7 +58,6 @@
                 yours[i], mine[i],
                 "UUID+FileSpec of yours[{0}] and mine[{0}] matches".format(i))
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_breakpoint(self):
         """Test breakpoint_iter works correctly for SBTarget -> SBBreakpoint."""
         self.build()
@@ -91,7 +89,6 @@
             self.assertEqual(yours[i], mine[i],
                             "ID of yours[{0}] and mine[{0}] matches".format(i))
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_frame(self):
         """Test iterator works correctly for SBProcess->SBThread->SBFrame."""
         self.build()
diff --git a/test/API/python_api/lldbutil/iter/TestRegistersIterator.py b/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
index fbb8bff..6c8c045 100644
--- a/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
+++ b/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
@@ -22,7 +22,6 @@
         self.line1 = line_number(
             'main.cpp', '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_iter_registers(self):
         """Test iterator works correctly for lldbutil.iter_registers()."""
         self.build()
diff --git a/test/API/python_api/lldbutil/process/TestPrintStackTraces.py b/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
index 123b60e..4ac7b7c 100644
--- a/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
+++ b/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
@@ -14,7 +14,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_stack_traces(self):
         """Test SBprocess and SBThread APIs with printing of the stack traces."""
         self.build()
diff --git a/test/API/python_api/module_section/TestModuleAndSection.py b/test/API/python_api/module_section/TestModuleAndSection.py
index 95d4576..3bb26a2 100644
--- a/test/API/python_api/module_section/TestModuleAndSection.py
+++ b/test/API/python_api/module_section/TestModuleAndSection.py
@@ -19,7 +19,6 @@
     # Py3 asserts due to a bug in SWIG.  A fix for this was upstreamed into
     # SWIG 3.0.8.
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
-    @add_test_categories(['pyapi'])
     def test_module_and_section(self):
         """Test module and section APIs."""
         self.build()
@@ -71,7 +70,6 @@
                             symbol_type_to_str(
                                 sym.GetType()))
 
-    @add_test_categories(['pyapi'])
     def test_module_and_section_boundary_condition(self):
         """Test module and section APIs by passing None when it expects a Python string."""
         self.build()
@@ -112,7 +110,6 @@
         if sec1:
             sec1.FindSubSection(None)
 
-    @add_test_categories(['pyapi'])
     def test_module_compile_unit_iter(self):
         """Test module's compile unit iterator APIs."""
         self.build()
@@ -140,7 +137,6 @@
         for cu in exe_module.compile_unit_iter():
             print(cu)
 
-    @add_test_categories(['pyapi'])
     def test_find_compile_units(self):
         """Exercise SBModule.FindCompileUnits() API."""
         d = {'EXE': 'b.out'}
diff --git a/test/API/python_api/name_lookup/TestNameLookup.py b/test/API/python_api/name_lookup/TestNameLookup.py
index 7db8b61..c1629f9 100644
--- a/test/API/python_api/name_lookup/TestNameLookup.py
+++ b/test/API/python_api/name_lookup/TestNameLookup.py
@@ -15,7 +15,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test_target(self):
         """Exercise SBTarget.FindFunctions() with various name masks.
diff --git a/test/API/python_api/process/TestProcessAPI.py b/test/API/python_api/process/TestProcessAPI.py
index 7174ba1..942e261 100644
--- a/test/API/python_api/process/TestProcessAPI.py
+++ b/test/API/python_api/process/TestProcessAPI.py
@@ -23,7 +23,6 @@
             "main.cpp",
             "// Set break point at this line and check variable 'my_char'.")
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::ReadMemory is not instrumented.
     def test_read_memory(self):
         """Test Python SBProcess.ReadMemory() API."""
@@ -122,7 +121,6 @@
             self.fail(
                 "Result from SBProcess.ReadUnsignedFromMemory() does not match our expected output")
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::WriteMemory is not instrumented.
     def test_write_memory(self):
         """Test Python SBProcess.WriteMemory() API."""
@@ -182,7 +180,6 @@
             exe=False,
             startstr=b'a')
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::WriteMemory is not instrumented.
     def test_access_my_int(self):
         """Test access 'my_int' using Python SBProcess.GetByteOrder() and other APIs."""
@@ -281,7 +278,6 @@
             for i in content:
                 print("byte:", i)
 
-    @add_test_categories(['pyapi'])
     def test_remote_launch(self):
         """Test SBProcess.RemoteLaunch() API with a process not in eStateConnected, and it should fail."""
         self.build()
@@ -305,7 +301,6 @@
             not success,
             "RemoteLaunch() should fail for process state != eStateConnected")
 
-    @add_test_categories(['pyapi'])
     def test_get_num_supported_hardware_watchpoints(self):
         """Test SBProcess.GetNumSupportedHardwareWatchpoints() API with a process."""
         self.build()
@@ -327,7 +322,6 @@
         if self.TraceOn() and error.Success():
             print("Number of supported hardware watchpoints: %d" % num)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     def test_get_process_info(self):
         """Test SBProcess::GetProcessInfo() API with a locally launched process."""
diff --git a/test/API/python_api/process/io/TestProcessIO.py b/test/API/python_api/process/io/TestProcessIO.py
index 3f210bc..312cc28 100644
--- a/test/API/python_api/process/io/TestProcessIO.py
+++ b/test/API/python_api/process/io/TestProcessIO.py
@@ -32,7 +32,6 @@
         self.lines = ["Line 1", "Line 2", "Line 3"]
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # I/O redirection like this is not supported on remote iOS devices yet <rdar://problem/54581135>
     def test_stdin_by_api(self):
@@ -45,7 +44,6 @@
         self.check_process_output(output, output)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     def test_stdin_redirection(self):
         """Exercise SBLaunchInfo::AddOpenFileAction() for STDIN without specifying STDOUT or STDERR."""
@@ -58,7 +56,6 @@
         self.check_process_output(output, output)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stdout_redirection(self):
@@ -73,7 +70,6 @@
         self.check_process_output(output, error)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stderr_redirection(self):
@@ -88,7 +84,6 @@
         self.check_process_output(output, error)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stdout_stderr_redirection(self):
diff --git a/test/API/python_api/sbdata/TestSBData.py b/test/API/python_api/sbdata/TestSBData.py
index 283908f..258ce51 100644
--- a/test/API/python_api/sbdata/TestSBData.py
+++ b/test/API/python_api/sbdata/TestSBData.py
@@ -20,7 +20,6 @@
         # Find the line number to break on inside main.cpp.
         self.line = line_number('main.cpp', '// set breakpoint here')
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBData::SetData is not instrumented.
     def test_byte_order_and_address_byte_size(self):
         """Test the SBData::SetData() to ensure the byte order and address
@@ -41,7 +40,6 @@
         addr = data.GetAddress(error, 0)
         self.assertEqual(addr, 0x8877665544332211);
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBData::SetData is not instrumented.
     def test_with_run_command(self):
         """Test the SBData APIs."""
diff --git a/test/API/python_api/sbenvironment/TestSBEnvironment.py b/test/API/python_api/sbenvironment/TestSBEnvironment.py
index 62c3ac2..99369f8 100644
--- a/test/API/python_api/sbenvironment/TestSBEnvironment.py
+++ b/test/API/python_api/sbenvironment/TestSBEnvironment.py
@@ -30,7 +30,6 @@
 
 
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_platform_environment(self):
         env = self.dbg.GetSelectedPlatform().GetEnvironment()
@@ -38,7 +37,6 @@
         self.assertNotEqual(env.Get("PATH"), None)
 
 
-    @add_test_categories(['pyapi'])
     def test_launch_info(self):
         target = self.dbg.CreateTarget("")
         launch_info = target.GetLaunchInfo()
@@ -67,7 +65,6 @@
         self.assertEqualEntries(launch_info.GetEnvironment(), ["BAR=foo", "X=y"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_target_environment(self):
         env = self.dbg.GetSelectedTarget().GetEnvironment()
@@ -85,7 +82,6 @@
         env.PutEntry("PATH=#" + path)
         self.assertEqual(target.GetEnvironment().Get("PATH"), path)
 
-    @add_test_categories(['pyapi'])
     def test_creating_and_modifying_environment(self):
         env = lldb.SBEnvironment()
 
diff --git a/test/API/python_api/sbplatform/TestSBPlatform.py b/test/API/python_api/sbplatform/TestSBPlatform.py
index 3fa4c10..b354a6e 100644
--- a/test/API/python_api/sbplatform/TestSBPlatform.py
+++ b/test/API/python_api/sbplatform/TestSBPlatform.py
@@ -8,7 +8,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_run(self):
         self.build()
diff --git a/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
index a1a3185..26f1791 100644
--- a/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
+++ b/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
@@ -18,7 +18,6 @@
     def test(self):
         self.structured_data_api_test()
 
-    @add_test_categories(['pyapi'])
     def structured_data_api_test(self):
         error = lldb.SBError()
         s = lldb.SBStream()
diff --git a/test/API/python_api/sbvalue_persist/TestSBValuePersist.py b/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
index 94eec2a..8324d23 100644
--- a/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
+++ b/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
     def test(self):
         """Test SBValue::Persist"""
diff --git a/test/API/python_api/section/TestSectionAPI.py b/test/API/python_api/section/TestSectionAPI.py
index 1513b98..bd8e451 100644
--- a/test/API/python_api/section/TestSectionAPI.py
+++ b/test/API/python_api/section/TestSectionAPI.py
@@ -13,7 +13,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_target_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
diff --git a/test/API/python_api/signals/TestSignalsAPI.py b/test/API/python_api/signals/TestSignalsAPI.py
index 0f59016..6c535d7 100644
--- a/test/API/python_api/signals/TestSignalsAPI.py
+++ b/test/API/python_api/signals/TestSignalsAPI.py
@@ -15,7 +15,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows  # Windows doesn't have signals
     def test_ignore_signal(self):
         """Test Python SBUnixSignals.Suppress/Stop/Notify() API."""
diff --git a/test/API/python_api/symbol-context/TestSymbolContext.py b/test/API/python_api/symbol-context/TestSymbolContext.py
index 742ecec..c02e1bf 100644
--- a/test/API/python_api/symbol-context/TestSymbolContext.py
+++ b/test/API/python_api/symbol-context/TestSymbolContext.py
@@ -21,7 +21,6 @@
         self.line = line_number(
             'main.c', '// Find the line number of function "c" here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     @skipIfReproducer # FIXME: Unexpected packet during (passive) replay
     def test(self):
diff --git a/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
index 27d1b60..8188c73 100644
--- a/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
+++ b/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
@@ -14,7 +14,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"])
     def test_lookup_by_address(self):
         """Test lookup by address in a module with multiple compilation units"""
@@ -36,7 +35,6 @@
             self.assertEqual(symbol_name,
                              sc_by_address.GetFunction().GetName())
 
-    @add_test_categories(['pyapi'])
     def test_ranges_in_multiple_compile_unit(self):
         """This test verifies that we correctly handle the case when multiple
         compile unit contains DW_AT_ranges and DW_AT_ranges_base attributes."""
diff --git a/test/API/python_api/target/TestTargetAPI.py b/test/API/python_api/target/TestTargetAPI.py
index 7954f66..c53f600 100644
--- a/test/API/python_api/target/TestTargetAPI.py
+++ b/test/API/python_api/target/TestTargetAPI.py
@@ -35,7 +35,6 @@
     # It does not segfaults now.  But for dwarf, the variable value is None if
     # the inferior process does not exist yet.  The radar has been updated.
     #@unittest232.skip("segmentation fault -- skipping")
-    @add_test_categories(['pyapi'])
     def test_find_global_variables(self):
         """Exercise SBTarget.FindGlobalVariables() API."""
         d = {'EXE': 'b.out'}
@@ -43,7 +42,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_global_variables('b.out')
 
-    @add_test_categories(['pyapi'])
     def test_find_compile_units(self):
         """Exercise SBTarget.FindCompileUnits() API."""
         d = {'EXE': 'b.out'}
@@ -51,7 +49,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_compile_units(self.getBuildArtifact('b.out'))
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     def test_find_functions(self):
         """Exercise SBTarget.FindFunctions() API."""
@@ -60,20 +57,17 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_functions('b.out')
 
-    @add_test_categories(['pyapi'])
     def test_get_description(self):
         """Exercise SBTarget.GetDescription() API."""
         self.build()
         self.get_description()
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test_resolve_symbol_context_with_address(self):
         """Exercise SBTarget.ResolveSymbolContextForAddress() API."""
         self.build()
         self.resolve_symbol_context_with_address()
 
-    @add_test_categories(['pyapi'])
     def test_get_platform(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -82,7 +76,6 @@
         platform = target.platform
         self.assertTrue(platform, VALID_PLATFORM)
 
-    @add_test_categories(['pyapi'])
     def test_get_data_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -90,7 +83,6 @@
         target = self.create_simple_target('b.out')
         self.assertEqual(target.data_byte_size, 1)
 
-    @add_test_categories(['pyapi'])
     def test_get_code_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -98,7 +90,6 @@
         target = self.create_simple_target('b.out')
         self.assertEqual(target.code_byte_size, 1)
 
-    @add_test_categories(['pyapi'])
     def test_resolve_file_address(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -121,7 +112,6 @@
         self.assertIsNotNone(data_section2)
         self.assertEqual(data_section.name, data_section2.name)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBTarget::ReadMemory is not instrumented.
     def test_read_memory(self):
         d = {'EXE': 'b.out'}
@@ -151,7 +141,6 @@
         self.assertEqual(len(content), 1)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows  # stdio manipulation unsupported on Windows
     @skipIfRemote   # stdio manipulation unsupported on remote iOS devices<rdar://problem/54581135>
     @skipIfReproducer  # stdout not captured by reproducers
@@ -334,7 +323,6 @@
                     substrs=['Target', 'Module', 'a.out', 'Breakpoint'])
 
     @skipIfRemote
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfReproducer # Inferior doesn't run during replay.
     def test_launch_new_process_and_redirect_stdout(self):
@@ -476,6 +464,7 @@
         desc2 = get_description(symbol2)
         self.assertTrue(desc1 and desc2 and desc1 == desc2,
                         "The two addresses should resolve to the same symbol")
+
     def test_default_arch(self):
         """ Test the other two target create methods using LLDB_ARCH_DEFAULT. """
         self.build()
@@ -490,7 +479,6 @@
         self.assertTrue(target3.IsValid())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows
     def test_is_loaded(self):
         """Exercise SBTarget.IsLoaded(SBModule&) API."""
diff --git a/test/API/python_api/thread/TestThreadAPI.py b/test/API/python_api/thread/TestThreadAPI.py
index a369c70..b8416eb 100644
--- a/test/API/python_api/thread/TestThreadAPI.py
+++ b/test/API/python_api/thread/TestThreadAPI.py
@@ -16,19 +16,16 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_process(self):
         """Test Python SBThread.GetProcess() API."""
         self.build()
         self.get_process()
 
-    @add_test_categories(['pyapi'])
     def test_get_stop_description(self):
         """Test Python SBThread.GetStopDescription() API."""
         self.build()
         self.get_stop_description()
 
-    @add_test_categories(['pyapi'])
     def test_run_to_address(self):
         """Test Python SBThread.RunToAddress() API."""
         # We build a different executable than the default build() does.
@@ -38,7 +35,6 @@
         self.run_to_address(self.exe_name)
 
     @skipIfAsan # The output looks different under ASAN.
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["linux"], archs=['arm'], bugnumber="llvm.org/pr45892")
     @expectedFailureAll(oslist=["windows"])
     def test_step_out_of_malloc_into_function_b(self):
@@ -49,7 +45,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.step_out_of_malloc_into_function_b(self.exe_name)
 
-    @add_test_categories(['pyapi'])
     def test_step_over_3_times(self):
         """Test Python SBThread.StepOver() API."""
         # We build a different executable than the default build() does.
diff --git a/test/API/python_api/type/TestTypeList.py b/test/API/python_api/type/TestTypeList.py
index 9d4f164..f60237b 100644
--- a/test/API/python_api/type/TestTypeList.py
+++ b/test/API/python_api/type/TestTypeList.py
@@ -25,7 +25,6 @@
         self.source = 'main.cpp'
         self.line = line_number(self.source, '// Break at this line')
 
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise SBType and SBTypeList API."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value/TestValueAPI.py b/test/API/python_api/value/TestValueAPI.py
index b38eb2d..543186c 100644
--- a/test/API/python_api/value/TestValueAPI.py
+++ b/test/API/python_api/value/TestValueAPI.py
@@ -24,7 +24,6 @@
         self.line = line_number('main.c', '// Break at this line')
 
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise some SBValue APIs."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value/change_values/TestChangeValueAPI.py b/test/API/python_api/value/change_values/TestChangeValueAPI.py
index b35c18a..ec162f6 100644
--- a/test/API/python_api/value/change_values/TestChangeValueAPI.py
+++ b/test/API/python_api/value/change_values/TestChangeValueAPI.py
@@ -26,7 +26,6 @@
         self.end_line = line_number(
             'main.c', '// Set a breakpoint here at the end')
 
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux("llvm.org/pr25652")
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
     def test_change_value(self):
diff --git a/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py b/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
index c778577..ac8f60b 100644
--- a/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
+++ b/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
@@ -8,7 +8,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test(self):
         self.build()
         exe = self.getBuildArtifact("a.out")
diff --git a/test/API/python_api/value/linked_list/TestValueAPILinkedList.py b/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
index f01ce03..afd25bd 100644
--- a/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
+++ b/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
@@ -28,7 +28,6 @@
     # Py3 asserts due to a bug in SWIG.  A fix for this was upstreamed into
     # SWIG 3.0.8.
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise SBValue API linked_list_iter."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value_var_update/TestValueVarUpdate.py b/test/API/python_api/value_var_update/TestValueVarUpdate.py
index b425cef..e7d47de 100644
--- a/test/API/python_api/value_var_update/TestValueVarUpdate.py
+++ b/test/API/python_api/value_var_update/TestValueVarUpdate.py
@@ -12,7 +12,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_with_process_launch_api(self):
         """Test SBValue::GetValueDidChange"""
         # Get the full path to our executable to be attached/debugged.
diff --git a/test/API/python_api/watchpoint/TestSetWatchpoint.py b/test/API/python_api/watchpoint/TestSetWatchpoint.py
index 260956b..f135ed6 100644
--- a/test/API/python_api/watchpoint/TestSetWatchpoint.py
+++ b/test/API/python_api/watchpoint/TestSetWatchpoint.py
@@ -25,7 +25,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     # Read-write watchpoints not supported on SystemZ
     @expectedFailureAll(archs=['s390x'])
     def test_watch_val(self):
diff --git a/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py b/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
index 83a11d4..d0fd398 100644
--- a/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
+++ b/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
@@ -25,7 +25,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     # Read-write watchpoints not supported on SystemZ
     @expectedFailureAll(archs=['s390x'])
     def test_set_watch_ignore_count(self):
diff --git a/test/API/python_api/watchpoint/TestWatchpointIter.py b/test/API/python_api/watchpoint/TestWatchpointIter.py
index 17ab024..6ca9999 100644
--- a/test/API/python_api/watchpoint/TestWatchpointIter.py
+++ b/test/API/python_api/watchpoint/TestWatchpointIter.py
@@ -30,7 +30,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_watch_iter(self):
         """Exercise SBTarget.watchpoint_iter() API to iterate on the available watchpoints."""
         self.build()
diff --git a/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py b/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
index 0b59e8d..7df7285 100644
--- a/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
+++ b/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
@@ -28,7 +28,6 @@
         # This is for verifying that watch location works.
         self.violating_func = "do_bad_thing_with_location"
 
-    @add_test_categories(['pyapi'])
     def test_watch_location(self):
         """Exercise SBValue.WatchPointee() API to set a watchpoint."""
         self.build()
diff --git a/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py b/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
index 02632cb..15d9b2a 100644
--- a/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
+++ b/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
@@ -27,7 +27,6 @@
         # This is for verifying that watch location works.
         self.violating_func = "do_bad_thing_with_location"
 
-    @add_test_categories(['pyapi'])
     def test_watch_address(self):
         """Exercise SBTarget.WatchAddress() API to set a watchpoint."""
         self.build()
@@ -99,7 +98,6 @@
 
         # This finishes our test.
 
-    @add_test_categories(['pyapi'])
     # No size constraint on MIPS for watches
     @skipIf(archs=['mips', 'mipsel', 'mips64', 'mips64el'])
     @skipIf(archs=['s390x'])  # Likewise on SystemZ
