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?
- Make sure bash-completion is installed:
sudo apt install bash-completion
- Install this module:
pip install unittest-autocomp
- 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
- paste the file: ./unittest-completion to /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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | a297fb994b5cf554fc0d2ac19aeb9683138837cf0651fe34e65653a0afdfd80b |
|
MD5 | a7eb08231b89a1049d4ff4b3bc433a7e |
|
BLAKE2b-256 | 97707e4c3d90aef2b4ce41cafee387a7bf097fb6a65c4e6d5cf6c9bfa0b26c80 |
File details
Details for the file unittest_autocomp-0.0.1-py3-none-any.whl
.
File metadata
- Download URL: unittest_autocomp-0.0.1-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 049580a2ef80e3e605cecd5f6a65b4765e81a9239fd694a82b9aa22d8e497186 |
|
MD5 | 9805ae458fdeb7247f8c6bccf7145855 |
|
BLAKE2b-256 | cdc9a6d4ee1005a2cf44ff399620ee69f9a7f344b45d9efc72351920014799fb |