The first python command above runs all tests related to tables,
mapping, creating, dropping, etc. The second one executes a single
test to generate SQL to create a trigger. The third runs all the
functional tests. Please review the pytest documentation for further options.

By default, the tests use a Postgres database named pyrseas_testdb
which is created if it doesn’t already exist. The tests are run as the
logged in user, using the USER Unix/Linux environment variable (or
USERNAME under Windows). They access Postgres on the local host
using the default port number (5432).

The following four environment variables can be used to change the
defaults described above:

Unless the test database exists and the user running the tests has
access to it, the user role will need CREATEDB privilege.

Most tests do not require special privileges. However, certain tests
may require Postgres SUPERUSER privilege. Such tests will normally be
skipped if the user lacks the privilege.

Most tests do not require installation of supporting Postgres
packages. However, a few tests rely on the availability of Postgres
contrib modules such as the spi module or
procedural languages such as plperl or plpythonu.

On Windows, it is necessary to install Perl in order to run some of
the tests (most Linux or Unix variants already include it as part of
their normal distribution). The last time we checked, a suitable
choice appeared to be Strawberry Perl which can be downloaded from
http://strawberryperl.com/releases.html. However, the default
installation is placed in C:\strawberry and can hold a single Perl
version. Furthermore, some Postgres versions may be linked with
non-current Perl versions. It is recommended that the latest Perl
version be installed as this will usually give the fewest test
failures. See this blog post
for more details.

The COLLATION tests, run under Postgres 9.3 and later, require the
fr_FR.utf8 locale (or French.France.1252 language on Windows)
to be installed.

The following is a summary list of steps needed to test Pyrseas on a
new machine. Refer to Development for details on how to
accomplish a given installation task. “Package manager” refers to the
platform’s package management system utility such as apt-get or
yum. Installation from PyPI can be done with pip. Some
operations require administrative or superuser privileges, at either
the operating system or Postgres level.

On Linux, make sure you install the contrib and plperl
packages, e.g., on Debian, postgresql-contrib-n.n and
postgresql-plperl-n.n (where n.n is the Postgres
version number–or simply n from Postgres 10 onward)

Psycopg2, PyYAML, pytest and Tox all have to be installed
twice, i.e., once under Python 3.6 (or 3.5) and another
under 2.7.

On Windows, install Perl (see discussion above under
“Restrictions”). On Linux, usually Perl is already available.

As postgres user, using psql or pgAdmin, create a test user,
e.g., your name. The user running tests must have at a minimum
createdb privilege, in order to create the test database. To run
all the tests, the user also needs superuser privilege.

Create directories to hold tablespaces, e.g., /extra/pg/9.6/ts1
on Linux, C:\\extra\\pg\\9.6\\ts1 on Windows. The directories
need to be owned by the postgres user. This may be tricky on
older Windows versions, but the command cacls<dir>/E/Gpostgres:F should suffice. Using psql, create tablespaces
ts1 and ts2, e.g., CREATETABLESPACEts1LOCATION'<directory>' (on Windows, you’ll have to use, e.g.,
E'C:\\dir\\ts1', to specify the directory).

On Windows, for Postgres 9.2, the default installation is owned
by the Network Service account, so the cacls command should
be cacls<dir>/E/Gnetworkservices:F.

Note

The creation of users/roles and tablespaces has to be
repeated for each Postgres version.

Install the locale fr_FR.utf8 on Linux/Unix or the language
French.France.1252 on Windows.

On Debian and derivatives, this can be done with the command:

sudodpkg-reconfigurelocales

On Windows, open the Control Panel, select Date, Time, Language,
and Regional Options, then Regional and Language Options (or Add
other languages), click on the Advanced tab in the dialog and
then choose “French (France)” from the dropdown. Finally, click
OK and respond to any subsequent prompts to install the locale,
including rebooting the machine.

Change to the Pyrseas source directory (created by the second step above).

Define the environment variables PG93_PORT, PG94_PORT,
PG95_PORT, PG96_PORT and PG100_PORT to point to the
corresponding Postgres ports.

Invoke tox. This will create two virtualenvs in a .tox
subdirectory–one for Python 3.6 or 3.5 and another for 2.7,
install Pyrseas and its prerequisites (Psycopg2 and PyYAML) into
each virtualenv and run the unit tests for each combination of
Postgres and Python.

If you find any problems with the instructions above, please open an
issue on GitHub.