Run the given test case or test suite.
(self, test)
| 190 | return self.resultclass(self.stream, self.descriptions, self.verbosity) |
| 191 | |
| 192 | def run(self, test): |
| 193 | "Run the given test case or test suite." |
| 194 | result = self._makeResult() |
| 195 | registerResult(result) |
| 196 | result.failfast = self.failfast |
| 197 | result.buffer = self.buffer |
| 198 | result.tb_locals = self.tb_locals |
| 199 | with warnings.catch_warnings(): |
| 200 | if self.warnings: |
| 201 | # if self.warnings is set, use it to filter all the warnings |
| 202 | warnings.simplefilter(self.warnings) |
| 203 | # if the filter is 'default' or 'always', special-case the |
| 204 | # warnings from the deprecated unittest methods to show them |
| 205 | # no more than once per module, because they can be fairly |
| 206 | # noisy. The -Wd and -Wa flags can be used to bypass this |
| 207 | # only when self.warnings is None. |
| 208 | if self.warnings in ['default', 'always']: |
| 209 | warnings.filterwarnings('module', |
| 210 | category=DeprecationWarning, |
| 211 | message=r'Please use assert\w+ instead.') |
| 212 | startTime = time.perf_counter() |
| 213 | startTestRun = getattr(result, 'startTestRun', None) |
| 214 | if startTestRun is not None: |
| 215 | startTestRun() |
| 216 | try: |
| 217 | test(result) |
| 218 | finally: |
| 219 | stopTestRun = getattr(result, 'stopTestRun', None) |
| 220 | if stopTestRun is not None: |
| 221 | stopTestRun() |
| 222 | stopTime = time.perf_counter() |
| 223 | timeTaken = stopTime - startTime |
| 224 | result.printErrors() |
| 225 | if hasattr(result, 'separator2'): |
| 226 | self.stream.writeln(result.separator2) |
| 227 | run = result.testsRun |
| 228 | self.stream.writeln("Ran %d test%s in %.3fs" % |
| 229 | (run, run != 1 and "s" or "", timeTaken)) |
| 230 | self.stream.writeln() |
| 231 | |
| 232 | expectedFails = unexpectedSuccesses = skipped = 0 |
| 233 | try: |
| 234 | results = map(len, (result.expectedFailures, |
| 235 | result.unexpectedSuccesses, |
| 236 | result.skipped)) |
| 237 | except AttributeError: |
| 238 | pass |
| 239 | else: |
| 240 | expectedFails, unexpectedSuccesses, skipped = results |
| 241 | |
| 242 | infos = [] |
| 243 | if not result.wasSuccessful(): |
| 244 | self.stream.write("FAILED") |
| 245 | failed, errored = len(result.failures), len(result.errors) |
| 246 | if failed: |
| 247 | infos.append("failures=%d" % failed) |
| 248 | if errored: |
| 249 | infos.append("errors=%d" % errored) |