Use tox for running tests locally.

See: http://wiki.openstack.org/ProjectTestingInterface

Tox can manage virtualenvs, and is currently doing so for running
tests in Jenkins.  It's just as, or more, useful for running tests
locally, so this starts the migration from the run_tests system to
tox.  The goal is to reduce duplicate testing infrastructure, and
get what's running locally on developer workstations as close to
what is run by Jenkins as possible.

This patch removes run_tests.py, and the scripts that manage .venv.
It makes run_tests.sh call tox to facilitate the transition for
developers used to typing "run_tests.sh".

Developers will need tox installed on their workstations.  It can
be installed from PyPI with "pip install tox".  run_tests.sh outputs
those instructions if tox is not present.

New facilities are available using tox directly, including:

  tox -e py26  # run tests under python 2.6
  tox -e py27  # run tests under python 2.7
  tox -e pep8  # run pep8 tests
  tox          # run all of the above
  tox -e venv foo  # run the command "foo" inside a virtualenv

The configuration of the openstack nose plugin is removed from
setup.cfg and added to the nosetests command line arguments in tox.
It is used when running tox from the command line, so the enhanced,
colorized output is visible to developers running the test suite
locally.  However, when Jenkins runs tox, the xunit plugin will be
used instead, providing output natively understood by jenkins which
is much more readable in that context.

Change-Id: Id678c2fb8a5a7d79c680d3d1f2f12141f73dc8a6
This commit is contained in:
James E. Blair
2012-04-26 17:40:10 +00:00
parent 3344eac545
commit ae58edcba7
7 changed files with 42 additions and 566 deletions
+22 -68
View File
@@ -4,92 +4,46 @@ function usage {
echo "Usage: $0 [OPTION]..."
echo "Run python-glanceclient's test suite(s)"
echo ""
echo " -V, --virtual-env Always use virtualenv. Install automatically if not present"
echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local environment"
echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
echo " --unittests-only Run unit tests only, exclude functional tests."
echo " -p, --pep8 Just run pep8"
echo " -h, --help Print this usage message"
echo ""
echo "Note: with no options specified, the script will try to run the tests in a virtual environment,"
echo " If no virtualenv is found, the script will ask if you would like to create one. If you "
echo " prefer to run tests NOT in a virtual environment, simply pass the -N option."
echo "This script is deprecated and currently retained for compatibility."
echo 'You can run the full test suite for multiple environments by running "tox".'
echo 'You can run tests for only python 2.7 by running "tox -e py27", or run only'
echo 'the pep8 tests with "tox -e pep8".'
exit
}
command -v tox > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo 'This script requires "tox" to run.'
echo 'You can install it with "pip install tox".'
exit 1;
fi
just_pep8=0
function process_option {
case "$1" in
-h|--help) usage;;
-V|--virtual-env) let always_venv=1; let never_venv=0;;
-N|--no-virtual-env) let always_venv=0; let never_venv=1;;
-p|--pep8) let just_pep8=1;;
-f|--force) let force=1;;
*) noseargs="$noseargs $1"
esac
}
venv=.venv
with_venv=tools/with_venv.sh
always_venv=0
never_venv=0
force=0
noseargs=
wrapper=""
just_pep8=0
for arg in "$@"; do
process_option $arg
done
function run_tests {
# Just run the test suites in current environment
${wrapper} rm -f tests.sqlite
${wrapper} $NOSETESTS 2> run_tests.err.log
}
function run_pep8 {
echo "Running pep8..."
PEP8_OPTIONS="--exclude=$PEP8_EXCLUDE --repeat"
PEP8_INCLUDE="glanceclient/*.py setup.py run_tests.py tools/install_venv.py"
${wrapper} pep8 $PEP8_OPTIONS $PEP8_INCLUDE
}
NOSETESTS="python run_tests.py $noseargs"
if [ $never_venv -eq 0 ]
then
# Remove the virtual environment if --force used
if [ $force -eq 1 ]; then
echo "Cleaning virtualenv..."
rm -rf ${venv}
fi
if [ -e ${venv} ]; then
wrapper="${with_venv}"
else
if [ $always_venv -eq 1 ]; then
# Automatically install the virtualenv
python tools/install_venv.py
wrapper="${with_venv}"
else
echo -e "No virtual environment found...create one? (Y/n) \c"
read use_ve
if [ "x$use_ve" = "xY" -o "x$use_ve" = "x" -o "x$use_ve" = "xy" ]; then
# Install the virtualenv and run the test suite in it
python tools/install_venv.py
wrapper=${with_venv}
fi
fi
fi
fi
if [ $just_pep8 -eq 1 ]; then
run_pep8
exit
tox -e pep8
exit
fi
run_tests || exit
if [ -z "$noseargs" ]; then
run_pep8
tox -e py27 $toxargs 2>&1 | tee run_tests.err.log || exit
if [ ${PIPESTATUS[0]} -ne 0 ]; then
exit ${PIPESTATUS[0]}
fi
if [ -z "$toxargs" ]; then
tox -e pep8
fi