Esempio n. 1
0
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
Esempio n. 2
0
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