mirror of https://github.com/grpc/grpc.git
parent
f37cac7dd2
commit
d43ad333b8
2 changed files with 60 additions and 10 deletions
@ -0,0 +1,60 @@ |
||||
import types |
||||
import unittest |
||||
|
||||
import pytest |
||||
|
||||
|
||||
class LoadTestsSuiteCollector(pytest.Collector): |
||||
|
||||
def __init__(self, name, parent, suite): |
||||
super(LoadTestsSuiteCollector, self).__init__(name, parent=parent) |
||||
self.suite = suite |
||||
self.obj = suite |
||||
|
||||
def collect(self): |
||||
collected = [] |
||||
for case in self.suite: |
||||
if isinstance(case, unittest.TestCase): |
||||
collected.append(LoadTestsCase(case.id(), self, case)) |
||||
elif isinstance(case, unittest.TestSuite): |
||||
collected.append( |
||||
LoadTestsSuiteCollector('suite_child_of_mine', self, case)) |
||||
return collected |
||||
|
||||
def reportinfo(self): |
||||
return str(self.suite) |
||||
|
||||
|
||||
class LoadTestsCase(pytest.Function): |
||||
|
||||
def __init__(self, name, parent, item): |
||||
super(LoadTestsCase, self).__init__(name, parent, callobj=self._item_run) |
||||
self.item = item |
||||
|
||||
def _item_run(self): |
||||
result = unittest.TestResult() |
||||
self.item(result) |
||||
if result.failures: |
||||
test_method, trace = result.failures[0] |
||||
pytest.fail(trace, False) |
||||
elif result.errors: |
||||
test_method, trace = result.errors[0] |
||||
pytest.fail(trace, False) |
||||
elif result.skipped: |
||||
test_method, reason = result.skipped[0] |
||||
pytest.skip(reason) |
||||
|
||||
|
||||
def pytest_pycollect_makeitem(collector, name, obj): |
||||
if name == 'load_tests' and isinstance(obj, types.FunctionType): |
||||
suite = unittest.TestSuite() |
||||
loader = unittest.TestLoader() |
||||
pattern = '*' |
||||
try: |
||||
# Check that the 'load_tests' object is actually a callable that actually |
||||
# accepts the arguments expected for the load_tests protocol. |
||||
suite = obj(loader, suite, pattern) |
||||
except Exception as e: |
||||
return None |
||||
else: |
||||
return LoadTestsSuiteCollector(name, collector, suite) |
Loading…
Reference in new issue