def _prior_tests(self, run, failing_id):
"""Calculate what tests from the test run run ran before test_id.
Tests that ran in a different worker are not included in the result.
"""
if not getattr(self, '_worker_to_test', False):
case = run.get_test()
# Use None if there is no worker-N tag
# If there are multiple, map them all.
# (worker-N -> [testid, ...])
worker_to_test = {}
# (testid -> [workerN, ...])
test_to_worker = {}
def map_test(test_dict):
tags = test_dict['tags']
id = test_dict['id']
workers = []
for tag in tags:
if tag.startswith('worker-'):
workers.append(tag)
if not workers:
workers = [None]
for worker in workers:
worker_to_test.setdefault(worker, []).append(id)
test_to_worker.setdefault(id, []).extend(workers)
mapper = testtools.StreamToDict(map_test)
mapper.startTestRun()
try:
case.run(mapper)
finally:
mapper.stopTestRun()
self._worker_to_test = worker_to_test
self._test_to_worker = test_to_worker
failing_workers = self._test_to_worker[failing_id]
prior_tests = []
for worker in failing_workers:
worker_tests = self._worker_to_test[worker]
prior_tests.extend(worker_tests[:worker_tests.index(failing_id)])
return prior_tests
评论列表
文章目录