Skip to main content

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!

Motivation

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!

Installing

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 % (
            i,
            num_processes,
        )
        tests.append(TestWatcher(test_command))

    returncode = 0
    for test_watcher in tests:
        test_watcher.join()
        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.start()
        self.returncode = 0

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

License

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

Download files

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

Source Distribution

nose-picker-0.5.6.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nose_picker-0.5.6-py2.py3-none-any.whl (7.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file nose-picker-0.5.6.tar.gz.

File metadata

  • Download URL: nose-picker-0.5.6.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for nose-picker-0.5.6.tar.gz
Algorithm Hash digest
SHA256 1a2b4bb0f8641aabfe9fb41270aa4ff540ad4b11edb2d050f9ea2d0bb6fcc0e6
MD5 f3fc6caa3869b227b7a9134c90ce27b3
BLAKE2b-256 1f3eaadcfec57c6efacf0c07e8ec84f2849490e74457da96a1e555b05acf3984

See more details on using hashes here.

File details

Details for the file nose_picker-0.5.6-py2.py3-none-any.whl.

File metadata

  • Download URL: nose_picker-0.5.6-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for nose_picker-0.5.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6bec26cc5b8bbf19146e6618d38f53b5a0f2a7a382799283522d1fb7f7a76f56
MD5 117174a4f179cf1b05d0219035f831ff
BLAKE2b-256 d23f7cae3a67cdf75e31a493ad08852aaac450ae5028778c87309f241e8129b3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.6 This release

2 files

0.5.5

2 files

0.5.4

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

1 file

0.5

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page