# Installing and Using plugins

This section talks about installing and using third party plugins. For writing your own plugins, please refer to Writing plugins.

Installing a third party plugin can be easily done with `pip`:

    pip install pytest-NAME
    pip uninstall pytest-NAME

If a plugin is installed, `pytest` automatically finds and integrates it, there is no need to activate it.

Here is a little annotated list for some popular plugins:

- pytest-django: write tests for django apps, using pytest integration.
- pytest-twisted: write tests for twisted apps, starting a reactor and processing deferreds from test functions.
- pytest-catchlog: to capture and assert about messages from the logging module
- pytest-cov: coverage reporting, compatible with distributed testing
- pytest-xdist: to distribute tests to CPUs and remote hosts, to run in boxed mode which allows to survive segmentation faults, to run in looponfailing mode, automatically re-running failing tests on file changes, see also xdist: pytest distributed testing plugin
- pytest-instafail: to report failures while the test run is happening.
- pytest-bdd and pytest-konira to write tests using behaviour-driven testing.
- pytest-timeout: to timeout tests based on function marks or global definitions.
- pytest-pep8: a `--pep8` option to enable PEP8 compliance checking.
- pytest-flakes: check source code with pyflakes.
- oejskit: a plugin to run javascript unittests in live browsers.

To see a complete list of all plugins with their latest testing status against different py.test and Python versions, please visit plugincompat.

You may also discover more plugins through a pytest- pypi.python.org search.

## Requiring/Loading plugins in a test module or conftest file

You can require plugins in a test module or a conftest file like this:

    pytest_plugins = "myapp.testsupport.myplugin",

When the test module or conftest plugin is loaded the specified plugins will be loaded as well.

> pytest_plugins = “myapp.testsupport.myplugin”

which will import the specified module as a `pytest` plugin.

## Finding out which plugins are active

If you want to find out which plugins are active in your environment you can type:

    py.test --traceconfig

and will get an extended test header which shows activated plugins and their names. It will also print local plugins aka conftest.py files when they are loaded.

## Deactivating / unregistering a plugin by name

You can prevent plugins from loading or unregister them:

    py.test -p no:NAME

This means that any subsequent try to activate/load the named plugin will not work.

If you want to unconditionally disable a plugin for a project, you can add this option to your `pytest.ini` file:

    [pytest]
    addopts = -p no:NAME

Alternatively to disable it only in certain environments (for example in a CI server), you can set `PYTEST_ADDOPTS` environment variable to `-p no:name`.

See Finding out which plugins are active for how to obtain the name of a plugin.

## Pytest default plugin reference

You can find the source code for the following plugins in the pytest repository.

`_pytest.assertion` | support for presenting detailed information in failing assertions.
`_pytest.cacheprovider` | merged implementation of the cache provider
`_pytest.capture` | per-test stdout/stderr capturing mechanism.
`_pytest.config` | command line options, ini-file and conftest.py processing.
`_pytest.doctest` | discover and run doctests in modules and test files.
`_pytest.genscript` | (deprecated) generate a single-file self-contained version of pytest
`_pytest.helpconfig` | version info, help messages, tracing configuration.
`_pytest.junitxml` | report test results in JUnit-XML format,
`_pytest.mark` | generic mechanism for marking and selecting python functions.
`_pytest.monkeypatch` | monkeypatching and mocking functionality.
`_pytest.nose` | run test suites written for nose.
`_pytest.pastebin` | submit failure or test session information to a pastebin service.
`_pytest.pdb` | interactive debugging with PDB, the Python Debugger.
`_pytest.pytester` | (disabled by default) support for testing pytest and pytest plugins.
`_pytest.python` | Python test discovery, setup and run of test functions.
`_pytest.recwarn` | recording warnings during test function execution.
`_pytest.resultlog` | log machine-parseable test session result information in a plain
`_pytest.runner` | basic collect and runtest protocol implementations
`_pytest.main` | core implementation of testing process: init, session, runtest loop.
`_pytest.skipping` | support for skip/xfail functions and markers.
`_pytest.terminal` | terminal reporting of the full testing process.
`_pytest.tmpdir` | support for providing temporary directories to test functions.
`_pytest.unittest` | discovery and running of std-library “unittest” style tests.