2016-05-12 5 views
2

Я хотел бы использовать токсикодендрон запустить py.test на проект, который нуждается в дополнительной настройке в дополнение к установке пакетов в virtualenv. После создания virtualenv и установки зависимостей необходимо выполнить некоторые команды.Рекомендуемый способ выполнения команд после установки зависимостей в virtualenv

В частности, я говорю о создании узла и НПХ среды с использованием nodeenv:

nodeenv --prebuilt -p 

Я вижу, что токсикодендрон позволяет мне обеспечить пользовательскую команду, используемую для установки зависимостей путем установки install_command в tox.ini. Но я не думаю, что это то, что я хочу, потому что заменяет команду (предположим, pip), используемую для установки зависимостей.

Я думал об использовании py.test арматуры с сессии рамкой для обработки установки nodeenv, но это кажется Hacky ко мне, как я не хочу, чтобы это произошло, когда py.test запускается непосредственно, а не через Tox.

Каков наименее безумный способ достижения этого?

ответ

2

Вы можете выполнить всю необходимую настройку после создания виртуальной машины и установки зависимостей в commands. Да, он говорит «команды, которые нужно вызвать для тестирования». но если вам нужно сделать дополнительную работу для подготовки к тестированию, вы можете просто сделать это прямо там.

Он работает через все, что вы бросаете на нее в порядке, это дано - например:

[testenv:someenv] 
    deps = 
    nodeenv 
    pytest 
    flexmock 
    commands = 
    nodeenv --prebuilt -p 
    ; ... and whatever else you might need to do 
    py.test path/to/my/tests 

Если у вас есть команды/скрипты или что-то другое, что дает правильный результат, но она возвращает не статус нулевого выхода вы можете игнорировать это, добавив - (как в - naughty-command).

Если вам нужно больше действий, вы можете обернуть их небольшим сценарием (Python) и вместо этого вызвать этот сценарий, как указано в https://stackoverflow.com/a/47834447/2626627.

Существует также проблема, позволяющая добавить более чем одну команду установки: https://github.com/tox-dev/tox/issues/715.

+1

Кажется, это лучший способ. Мне просто нужно проверить, была ли эта команда уже вызвана, а не повторять ее снова в последующих тестовых прогонах. – Feuermurmel

+0

Этот ответ в порядке, но он также пропускает отметку. Я хочу сделать то же самое - установить узел и его зависимости на этапе установки, отдельно от шага, в котором выполняются тесты. Эта рекомендация не будет работать, например, при запуске 'pytest -notest' - она ​​установит среду Python, но не среду узла. Вероятно, токсин должен представлять 'install_commands' вместо просто' install_command', почти так же, как в средах CI установлены шаги, предшествующие шагам тестирования. –

+0

Я отмечаю, что вместо whitelisting nodeenv вы можете вызывать nodeenv через python с помощью 'python -m nodeenv -prebuilt -p'. –

1

У меня была такая же проблема, и поскольку для меня было важно создать среду без вызова тестов (через --notest), я хотел, чтобы установка выполнялась на этапе установки, а не на этапе запуска, поэтому Я сделал что-то немного по-другому. Во-первых, я создал create-env сценарий:

#!/usr/bin/env sh 

pip install $1 $2 
nodeenv --prebuilt --python-virtualenv --node=8.2.1 

Тогда в tox.ini:

[testenv] 
install_command = ./create-env 

Этот подход имеет недостаток, что он будет работать только на Unix.

В tox 715 я предлагаю возможность встроенной поддержки нескольких команд установки.