Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

nose plugin that picks a subset of your unit tests

Project Description

nose-picker is a plugin that picks a subset of your unit tests (in django too!)

This plugin modifies nose’s unit test discovery to only pick a (1/N) subset of unit tests to run. By passing in the --total-processes arguments, you pick the denominator (the N above) which you want to run. The --which-process argument controls which part of that subset to run, so if you had 5 subsets you could pick 0, 1, 2, 3, or 4.

How does it work? Very simple! It hashes the filenames that nose is running through, does a modulo division by N, then sees if this file is “its”. Very simple, but it lets you run multiple of these nose-picker enabled runners in parallel, each running a separate subset of the unit tests!


The nose multiprocess plugin takes over the test runner when it runs, and thus is not amenable to environments where you need a custom test runner. nose-picker lets you keep your test runner!


Through pip:

pip install --user nose-picker

Sample Multiprocess Script

Something like:

def main():
    num_processes = int(multiprocessing.cpu_count() * 2.5)
    tests = []
    for i in range(num_processes):
        test_command = TEST_CMD_TEMPLATE % (

    returncode = 0
    for test_watcher in tests:
        if test_watcher.returncode > 0:
            returncode += test_watcher.returncode
        for line in test_watcher.stderr.splitlines():
            if not (
                line.endswith(' ... ok') or
                '... SKIP' in line
                sys.stderr.write(line + '\n')

    return returncode

class TestWatcher(threading.Thread):
    def __init__(self, command):
        super(TestWatcher, self).__init__()
        self.command = command
        self.stdout = ''
        self.stderr = ''
        self.returncode = 0

    def run(self):
        p = subprocess.Popen(
        self.stdout, self.stderr = p.communicate()
        self.returncode = p.returncode


nose-picker is copyright 2014 Eventbrite and Contributors, and is made available under BSD-style license; see LICENSE for details.

Release History

This version
History Node


History Node


History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(8.0 kB) Copy SHA256 Hash SHA256
Wheel 2.6 Jun 11, 2014
(4.6 kB) Copy SHA256 Hash SHA256
Source None Jun 11, 2014

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers