Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tox WARNING:test command found but not installed in testenv

I am using tox for my project.

Here is my tox.ini file:

[tox]
envlist =
    py27,
    lint,
    coverage

skipsdist = True

[testenv:py27]
deps = -rrequirements.txt
commands = python -m unittest discover -s ./tests

[testenv:coverage]
commands =
    coverage run --source=tests -m unittest discover -s tests/
    coverage html
    coverage report


[testenv:lint]
commands = pylint ./foo

whenever I run tox, everything is getting executed which basically is linting, coverage.

but Tox is displaying warning for everything.

WARNING:test command found but not installed in testenv
Maybe you forgot to specify a dependency? See also the whitelist_externals envconfig setting.

Everything succeeds, but it is still displaying warning and errors. Can anyone tell me to what I am doing wrong?

My requirements.txt file is this:

requests==2.18.4
JsonForm==0.0.2
jsonify==0.5
jsonschema==2.6.0
JsonSir==0.0.2
python-dateutil==1.5
DateTime==4.2
urllib3==1.22
contextlib2==0.5.5
mock==2.0.0
patch==1.16
like image 740
primer Avatar asked Dec 04 '17 22:12

primer


People also ask

How to pass environment variables from Tox to test environment?

By default tox will only pass the PATH environment variable (and on windows SYSTEMROOT and PATHEXT) from the tox invocation to the test environments. If you want to pass down additional environment variables you can use the passenv option:

How do I use Tox’s install-command?

By default tox uses pip to install packages, both the package-under-test and any dependencies you specify in tox.ini . You can fully customize tox’s install-command through the testenv-specific install_command = ARGV setting. For instance, to use pip’s --find-links and --no-index options to specify an alternative source for your dependencies:

Where can I find the Tox configuration in pyproject?

The tox configuration can also be in pyproject.toml (if you want to avoid an extra file). Currently only the old format is supported via legacy_tox_ini, a native implementation is planned though. Note that when you define a pyproject.toml you must define the build-system section per PEP-518.

What is new in Tox new version?

New in version 1.6.2. By default, tox sets PYTHONHASHSEED for test commands to a random integer generated when tox is invoked. This mimics Python’s hash randomization enabled by default starting in Python 3.3.


Video Answer


3 Answers

Programs that you use in commands must either be installed in tox' virtual environment or whitelisted:

[tox]
envlist =
    py27,
    lint,
    coverage

skipsdist = True

[testenv:py27]
deps = -rrequirements.txt
whitelist_externals = python
commands = python -m unittest discover -s ./tests

[testenv:coverage]
whitelist_externals = coverage
commands =
    coverage run --source=tests -m unittest discover -s tests/
    coverage html
    coverage report


[testenv:lint]
whitelist_externals = pylint
commands = pylint ./foo
like image 135
phd Avatar answered Sep 21 '22 08:09

phd


As specified by the error use:

whitelist_externals = <your command>

e.g. my external command is curl then tox.ini looks like

[tox]
envlist = py3
isolated_build = True

[testenv]
whitelist_externals = curl
deps =
    pytest
    chispa
    pyspark
    requests
    requests-mock
commands =
    curl url/hadoop-aws-3.2.0.jar --output ../lib/jars/hadoop-aws-3.2.0.jar
    curl url/aws-sdk-java-2.jar --output ../lib/jars/aws-sdk-java-2.jar
    python3 -m pytest
like image 34
der Fotik Avatar answered Sep 22 '22 08:09

der Fotik


From the tox docs:

whitelist_externals has the same meaning and usage as allowlist_externals but it is now deprecated.


Since no one didn't mention it yet, I'll introduce allowlist_externals solution

Running tox in a virtual environment (python virtualenv) threw me warnings:

WARNING: test command found but not installed in testenv
Maybe you forgot to specify a dependency? See also the allowlist_externals envconfig setting.

The only command tox executed was commands = pytest --basetemp={envtmpdir}


Following the warning hint I went and check allowlist_externals which allows us to define which command can be used in the commands section without triggering "not installed in virtualenv" warnings


My final tox.ini [testenv] looked like this:

...
[testenv]
allowlist_externals = pytest
setenv =
    PYTHONPATH = {toxinidir}
deps =
    -r{toxinidir}\requirements_test_no_conflicts.txt
commands = 
    pytest --basetemp={envtmpdir}
...

As a side note: allowlist_externals can be used in different tox.ini sections

like image 27
Jack Avatar answered Sep 20 '22 08:09

Jack