Metadata-Version: 2.0
Name: pytest-nginx
Version: 1.1
Summary: nginx fixture for pytest
Home-page: https://github.com/lahwaacz/pytest-nginx
Author: Jakub Klinkovský
Author-email: lahwaacz@users.noreply.github.com
License: GPLv3
Keywords: tests py.test pytest fixture nginx
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: pytest (>=3.0.0)

pytest-nginx
============

pytest-nginx is a pytest plugin, that allows you to test code, which requires
communicating with a full-fledged web server. Custom fixtures can be made which
manage the content of the server root directory.

Usage
=====

The plugin contains one fixture:

* **nginx_proc** - session scoped fixture, which manages the nginx daemon with
  the most basic configuration for serving static files.
* **nginx_php_proc** - session scoped fixture, which manages the nginx daemon
  and the php-fpm daemon, both configured to work together.

All fixtures take the name of a fixture managing the server root directory. In
the simplest case it is an empty temporary directory managed with the
``tmpdir_factory`` built-in fixture:

.. code-block:: python

    from pytest_nginx import factories

    @pytest.fixture(scope="session")
    def nginx_server_root(tmpdir_factory):
        return tmpdir_factory.mktemp("nginx-server-root")

    nginx_proc = factories.nginx_proc("nginx_server_root")

To manage the served content, you can create additional module or
function-scoped fixtures on top of ``nginx_proc``:

.. code-block:: python

    @pytest.fixture(scope="module")
    def nginx_hello_world(nginx_proc):
        f = open(os.path.join(nginx_proc.server_root, "index.html"), "w")
        f.write("Hello world! This is pytest-nginx serving on host {}, port {}."
                .format(nginx_proc.host, nginx_proc.port))
        f.close()
        return nginx_proc

Configuration
=============

You can define your settings in three ways: with fixture factory arguments,
with command line options and with ``pytest.ini`` configuration options. These
settings are handled in the following order:

1. Fixture factory arguments
2. Command line options
3. ``pytest.ini`` configuration options

+---------------------------+---------------------------+---------------------------+---------------------------+
| Fixture factory argument  | Command line option       | pytest.ini option         | Default                   |
+===========================+===========================+===========================+===========================+
| host                      | --nginx-host              | nginx_host                | 127.0.0.1                 |
+---------------------------+---------------------------+---------------------------+---------------------------+
| port                      | --nginx-port              | nginx_port                | random                    |
+---------------------------+---------------------------+---------------------------+---------------------------+
| nginx_exec                | --nginx-exec              | nginx_exec                | nginx                     |
+---------------------------+---------------------------+---------------------------+---------------------------+
| nginx_params              | --nginx-params            | nginx_params              | ""                        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| nginx_config_template     | --nginx-config-template   | nginx_config_template     | auto-generated            |
+---------------------------+---------------------------+---------------------------+---------------------------+
| php_fpm_exec              | --php-fpm-exec            | php_fpm_exec              | php-fpm                   |
+---------------------------+---------------------------+---------------------------+---------------------------+
| php_fpm_params            | --php-fpm-params          | php_fpm_params            | ""                        |
+---------------------------+---------------------------+---------------------------+---------------------------+
| php_fpm_config_template   | --php-fpm-config-template | php_fpm_config_template   | auto-generated            |
+---------------------------+---------------------------+---------------------------+---------------------------+

Examples showing how to specify the port number:

* Pass it as an argument to the factory function:

  .. code-block:: python

        nginx_proc = factories.nginx_proc(port=8888)

* Use the ``--nginx-port`` command line option when running pytest:

  .. code-block::

        pytest ./tests --nginx-port=8888


* Add the ``nginx_port`` option to the ``pytest.ini`` file:

  .. code-block:: ini

        [pytest]
        nginx_port = 8888


