Skip to main content

Autocompletion for unittest in Python

Project description

Bash completion for Pythons unittest

Running single test cases with the unittest module is a bit fiddly. At least for me it often looks a bit like this:

I know that the test resides somewhere in the tests directory. Therefore, I need to find the correct file: tests/test_foo.py. But damn it! There are multiple test case classes in it. But I only want to run one of them. So I type: python -m unittest tests.test_foo.SomeFancyTestCase. Now I notice that this test case has multiple methods and each method takes ages to complete. But I only want to run this one test case that is repeatedly failing. So I need to open the file in order to get the full method name. Nice, the command now looks like this: python -m unittest tests.test_foo.SomeFancyTestCase.test_a_specific_edge_case_with_a_long_name If I made a mistake during copy & paste I get an unhelpful error.

As long as running python -m unittest discover is sufficient this isn't a problem. But there are situations when this is not desired:

  • the whole test suite takes a long time to complete
  • some test cases do not run on my machine locally
  • the application that is being tested is overly chatty and I only want logs regarding this one test case
  • ...

Therefore, I created this little helper script to add Bash autocompletion.

How does it work?

The program looks recursively for test case files matching the test_*.py pattern relative to the current working directory. It parses each file into an abstract syntax tree AST to offer completions for class names and/or method names.

The unittest module expects the identifier of a test case in the following format:

<MODULE>.<TEST_CLASS>.<TEST_METHOD>

where <TEST_CLASS> and <TEST_METHOD> are additional specifications to limit the number of executed tests. But these are optional.

Calling unittest-autocomp without any arguments will print all test case files relative to the current working dir:

$ unittest-autocomp
test.test_completions test.test_utils

Calling unittest-autocomp with a full path to a test case file will print all classes of this file:

$ unittest-autocomp test.test_completions.

test.test_completions.MethodnameCompletionTestCase test.test_completions.ClassnameCompletionTestCase test.test_completions.ModuleCompletionTestCase

(The trailing dot is required, so that the program knows to search the file)

Calling unittest-autocomp with a full path to a unittest class will print all test methods of that given class:

$ unittest-autocomp test.test_completions.MethodnameCompletionTestCase.


test.test_completions.MethodnameCompletionTestCase.test_completion_with_empty_partial test.test_completions.MethodnameCompletionTestCase.test_completion_with_only_folder_or_module test.test_completions.MethodnameCompletionTestCase.test_completion_with_missing_classname test.test_completions.MethodnameCompletionTestCase.test_completion_with_only_classname test.test_completions.MethodnameCompletionTestCase.test_completion_with_only_classname_and_half_method_name test.test_completions.MethodnameCompletionTestCase.test_completion_with_only_full_method_name

(The trailing dot is required, so that the program knows to search the class for methods)

Installation?

  1. Make sure bash-completion is installed:
    • sudo apt install bash-completion
  2. Install this module:
    • pip install unittest-autocomp
  3. Activate the completion:
    • paste the file: ./unittest-completion to /etc/bash_completion.d:
      • sudo wget https://github.com/M0r13n/unittest-autocomp/blob/main/unittest-completion -P /etc/bash_completion.d

By default this installation will yield completions for the command python -m unittest. If you invoke the unittest module otherwise you need to change the line CMD="python -m unittest" locally on your machine to match your invocation.

Project details


Download files

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

Source Distribution

unittest-autocomp-0.0.1.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

unittest_autocomp-0.0.1-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file unittest-autocomp-0.0.1.tar.gz.

File metadata

  • Download URL: unittest-autocomp-0.0.1.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for unittest-autocomp-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a297fb994b5cf554fc0d2ac19aeb9683138837cf0651fe34e65653a0afdfd80b
MD5 a7eb08231b89a1049d4ff4b3bc433a7e
BLAKE2b-256 97707e4c3d90aef2b4ce41cafee387a7bf097fb6a65c4e6d5cf6c9bfa0b26c80

See more details on using hashes here.

File details

Details for the file unittest_autocomp-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for unittest_autocomp-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 049580a2ef80e3e605cecd5f6a65b4765e81a9239fd694a82b9aa22d8e497186
MD5 9805ae458fdeb7247f8c6bccf7145855
BLAKE2b-256 cdc9a6d4ee1005a2cf44ff399620ee69f9a7f344b45d9efc72351920014799fb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page