##
23.3.6 TestSuite Objects

`TestSuite` objects behave much like `TestCase` objects, except they do not actually implement a test. Instead, they are used to aggregate tests into groups of tests that should be run together. Some additional methods are available to add tests to `TestSuite` instances:

`addTest`( | test)

  Add a `TestCase` or `TestSuite` to the suite.

`addTests`( | tests)

  Add all the tests from an iterable of `TestCase` and `TestSuite` instances to this test suite.

  This is equivalent to iterating over tests, calling `addTest()` for each element.

`TestSuite` shares the following methods with `TestCase`:

`run`( | result)

  Run the tests associated with this suite, collecting the result into the test result object passed as result. Note that unlike `TestCase.run()`, `TestSuite.run()` requires the result object to be passed in.

`debug`( | )

  Run the tests associated with this suite without collecting the result. This allows exceptions raised by the test to be propagated to the caller and can be used to support running tests under a debugger.

`countTestCases`( | )

  Return the number of tests represented by this test object, including all individual tests and sub-suites.

In the typical usage of a `TestSuite` object, the `run()` method is invoked by a `TestRunner` rather than by the end-user test harness.