ctrl+shift+p filters: :st2 :st3 :win :osx :linux
Browse

Test Plier

by asfaltboy ST2/ST3

run python tests quickly from within a project

Details

Installs

  • Total 108
  • Win 51
  • OS X 39
  • Linux 18
Aug 20 Aug 19 Aug 18 Aug 17 Aug 16 Aug 15 Aug 14 Aug 13 Aug 12 Aug 11 Aug 10 Aug 9 Aug 8 Aug 7 Aug 6 Aug 5 Aug 4 Aug 3 Aug 2 Aug 1 Jul 31 Jul 30 Jul 29 Jul 28 Jul 27 Jul 26 Jul 25 Jul 24 Jul 23 Jul 22 Jul 21 Jul 20 Jul 19 Jul 18 Jul 17 Jul 16 Jul 15 Jul 14 Jul 13 Jul 12 Jul 11 Jul 10 Jul 9 Jul 8 Jul 7 Jul 6
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OS X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Readme

Source
raw.​githubusercontent.​com

Sublime Test Plier

Master Develop
Build Status Build Status

This Sublime Text 3 (only) plugin allows python developers to run (a single or more) tests quickly from within a project environment.

Preface

Unlike other plugins for running python tests, which mostly use a regex pattern to find a given test to run, Sublime Test Plier parses the source using AST, and locates the class/method/function whose definition contains the caret position. The found results are passed as named arguments to the test command, which can be anything (py.test, nosetests, python manage.py or your-own-test-runner).

Usage

The simplest usage is simply running the build system; ctrl+shift+b (super+shift+b on OSX) and select test_plier - Python Tests from the build system selection drop-down, after using it once you may hit ctrl+b (super+b on OSX) to run the build system again. Alternatively, select test_plier - Python Tests (external) to run the test in an external terminal window.

Note: this works by running the test runner executable found using the same environment varaibles SublimeText was launched with; which, will work for the simplest of cases, but for most projects you will want to configure the test environment; for more details on this see configuration section below.

Run a specific test

This is the main reason for using Test Plier: you can use it to run a specified test module, class or function by placing the caret at the desired test location prior to running test all placeholders are replaced in cmd by the located test and selected text.

Launching an external terminal window

By default the test command is passed to SublimeText's built-in exec command which spawns the command and pipes it's output to the build results panel in the editor.

In most cases this is sufficient; but sometimes, an external terminal window is preferred, most often when user input is required (e.g pdb entered). Luckily, it is now possible to pass the test command to run in an external terminal window.

If RunPythonTestsCommand.external_runner is set (e.g in a subclass), or the build system kwargs contains an “external” property, the given command array is executed.

The existing command kwargs are parsed into a “shell-friendly” command (delimited arguments) that is passed as to this “external” command.

Default/Example

An example for an external command execution helpers is provided in the utils/ sub-dir. And when “external” command argument is set to true, the utils/run_externally.py is launched, and this spawns a child process that calls osascript launch_in_iterm.applescript to run the test in an iTerm session.

If you add your own terminal/os don't forget to submit a pull-request :) !

Configuration

By default the command we run is pytest {filename}::{test_class}::{test_func} -k {selection} --doctest-modules -v. Let us look at the substitute arguments with more detail:

  • --doctest-modules - if no UnitTest class/method given run module unittests
  • -v - verbose test output

Placeholder arguments are optional, and will be cleanly removed where possible:

  • {filename} - test target file
  • {test_class} - test target class
  • {test_func} - test target function/method
  • -k {selection} - use selected text as pattern

You may customize the command and any of it's parameters (all optional) in your project.sublime-project settings.

IMPORTANT: The only required argument of the build system is the target. It must be set to run_python_tests command, in order to execute build with SublimeTestPlier's command.

For example Django's test runner can be run like so:

{
    "build_systems":
    [
        {
            "cmd":
            [
                "python",
                "manage.py",
                "test",
                "--noinput",
                "{filename}:{test_class}.{test_func}",
                "--settings=test_settings"
            ],
            "env":
            {
                "PYTHONPATH": "/home/user/.venvs/project/lib/python2.7/site-packages",
                "REUSE_DB": "1"  // WARNING: remember to use strings as values
            },
            "name": "Django Test",
            "target": "run_python_tests",
            "working_dir": "${project_path}/project/"
        }
    ]
}

For more info on the SublimeText build-system configuration see the unofficial documentation.

Sublime ANSI

This plugin supports passing the command through SublimeANSI to display ANSI colors in the ST output panel. This will be automatically activated if the plugin is installed.

Contributing

We welcome any and all contributions. For stuff that I'd like to see done first see below:

Things on our TODO list

  • [ ] document all arguments the command accepts
  • [x] add an example for external test - how I use it to launch test in an iTerm2 session.