def pytest_runtestloop(session): global fatal_error if not settings.enabled: logger.info('conquer not enabled') return main.pytest_runtestloop(session) if fatal_error: return False if session.testsfailed and not session.config.option.continue_on_collection_errors: raise session.Interrupted('{} errors during collection'.format( session.testsfailed)) if session.config.option.collectonly: return True print('conquer starting') threads = [] no_of_workers = settings.client_workers for i in range(no_of_workers): t = Worker(args=[session, settings]) threads.append(t) t.start() for t in threads: t.join() return True
def pytest_runtestloop(session): if (session.testsfailed and not session.config.option.continue_on_collection_errors): raise session.Interrupted("{} errors during collection".format( session.testsfailed)) if session.config.option.collectonly: raise True use_mp, num_processes = load_mp_options(session) batches = batch_tests(session) if not use_mp or not num_processes: return main.pytest_runtestloop(session) synchronization['stats'] = manager.dict() synchronization['stats_lock'] = multiprocessing.Lock() synchronization['stats']['failed'] = False synchronization['can_submit_tests'] = multiprocessing.Event() synchronization['trigger_process_loop'] = multiprocessing.Event() synchronization['trigger_process_loop'].set() synchronization['no_running_tests'] = multiprocessing.Event() synchronization['reap_process_loop'] = multiprocessing.Event() synchronization['processes_lock'] = multiprocessing.Lock() synchronization['running_pids'] = manager.dict() synchronization['finished_pids'] = manager.dict() synchronization['processes'] = dict() proc_loop = multiprocessing.Process(target=process_loop, args=(num_processes, )) proc_loop.start() run_batched_tests(batches, session, num_processes) synchronization['reap_process_loop'].set() proc_loop.join() if synchronization['stats']['failed']: session.testsfailed = True return True