|
17 | 17 |
|
18 | 18 |
|
19 | 19 | class XMLTestRunner(DiscoverRunner):
|
| 20 | + test_runner = xmlrunner.XMLTestRunner |
20 | 21 |
|
21 |
| - def run_suite(self, suite, **kwargs): |
22 |
| - dummy = kwargs # unused |
| 22 | + def get_resultclass(self): |
| 23 | + # Django provides `DebugSQLTextTestResult` if `debug_sql` argument is True |
| 24 | + # To use `xmlrunner.result._XMLTestResult` we supress default behavior |
| 25 | + return None |
| 26 | + |
| 27 | + def get_test_runner_kwargs(self): |
| 28 | + # We use separate verbosity setting for our runner |
23 | 29 | verbosity = getattr(settings, 'TEST_OUTPUT_VERBOSE', 1)
|
24 |
| - # XXX: verbosity = self.verbosity |
25 | 30 | if isinstance(verbosity, bool):
|
26 | 31 | verbosity = (1, 2)[verbosity]
|
27 |
| - descriptions = getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False) |
| 32 | + verbosity = verbosity # not self.verbosity |
| 33 | + |
28 | 34 | output_dir = getattr(settings, 'TEST_OUTPUT_DIR', '.')
|
29 | 35 | single_file = getattr(settings, 'TEST_OUTPUT_FILE_NAME', None)
|
30 | 36 |
|
31 |
| - kwargs = dict( |
32 |
| - verbosity=verbosity, descriptions=descriptions, |
33 |
| - failfast=self.failfast) |
34 |
| - if single_file is not None: |
| 37 | + # For single file case we are able to create file here |
| 38 | + # But for multiple files case files will be created inside runner/results |
| 39 | + if single_file is None: # output will be a path (folder) |
| 40 | + output = output_dir |
| 41 | + else: # output will be a stream |
35 | 42 | if not os.path.exists(output_dir):
|
36 | 43 | os.makedirs(output_dir)
|
37 | 44 | file_path = os.path.join(output_dir, single_file)
|
38 |
| - with open(file_path, 'wb') as xml: |
39 |
| - return xmlrunner.XMLTestRunner( |
40 |
| - output=xml, **kwargs).run(suite) |
41 |
| - else: |
42 |
| - return xmlrunner.XMLTestRunner( |
43 |
| - output=output_dir, **kwargs).run(suite) |
| 45 | + output = open(file_path, 'wb') |
| 46 | + |
| 47 | + return dict( |
| 48 | + verbosity=verbosity, |
| 49 | + descriptions=getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False), |
| 50 | + failfast=self.failfast, |
| 51 | + resultclass=self.get_resultclass(), |
| 52 | + output=output, |
| 53 | + ) |
| 54 | + |
| 55 | + def run_suite(self, suite, **kwargs): |
| 56 | + runner_kwargs = self.get_test_runner_kwargs() |
| 57 | + runner = self.test_runner(**runner_kwargs) |
| 58 | + results = runner.run(suite) |
| 59 | + if hasattr(runner_kwargs['output'], 'close'): |
| 60 | + runner_kwargs['output'].close() |
| 61 | + return results |
0 commit comments