horizon/tools/unit_tests.sh
Radomir Dopieralski 36536272ff Add pytest-based selenium tests
This is a patch to start work on re-writing the integration tests
using pytest syntax and several improvements, as proposed on the
upstream meeting, and summarized at https://etherpad.opendev.org/p/horizon-pytest

The new tests are to eventually replace the existing integration
tests. At the moment they don't run automatically, you have to explicitly run them using tox or pytest. When the new tests are complete, we will switch to them on the gate.



Change-Id: Iea38e4f9771ff3cae7ae8675863e9c488f3f6d8a
2023-08-08 11:45:20 +00:00

99 lines
2.2 KiB
Bash
Executable File

# Usage: unit_tests.sh [--coverage] <root_dir> [<test-file>, ...]
if [ "$1" = "--coverage" ]; then
shift
coverage=1
else
coverage=0
fi
root=$1
posargs="${@:2}"
report_dir=$root/test_reports
# Attempt to identify if any of the arguments passed from tox is a test subset
if [ -n "$posargs" ]; then
for arg in "$posargs"
do
if [ ${arg:0:1} != "-" ]; then
subset=$arg
fi
done
fi
function run_test {
local project=$1
local tag
local target
local settings_module
local report_args
local ignore
tag="not selenium and not integration and not plugin_test"
case "$project" in
horizon)
settings_module="horizon.test.settings"
;;
openstack_dashboard)
settings_module="openstack_dashboard.test.settings"
;;
openstack_auth)
settings_module="openstack_auth.tests.settings"
;;
plugin|plugin-test|plugin_test)
project="plugin"
tag="plugin_test"
target="$root/openstack_dashboard/test/test_plugins"
settings_module="openstack_dashboard.test.settings"
;;
*)
# Declare error by returning 1 which usually means error in bash
return 1
esac
if [ -z "$target" ]; then
if [ -n "$subset" ]; then
target="$subset"
else
target="$root/$project"
fi
fi
ignore="--ignore=$root/openstack_dashboard/test/selenium"
if [ "$coverage" -eq 1 ]; then
coverage run -m pytest $target $ignore --ds=$settings_module -m "$tag"
else
report_args="--junitxml=$report_dir/${project}_test_results.xml"
report_args+=" --html=$report_dir/${project}_test_results.html"
report_args+=" --self-contained-html"
pytest $target --ds=$settings_module -v -m "$tag" $ignore $report_args
fi
return $?
}
# If we are running a test subset, supply the correct settings file.
# If not, simply run the entire test suite.
if [ -n "$subset" ]; then
project="${subset%%/*}"
run_test $project
exit $?
else
results=()
for project in horizon openstack_dashboard openstack_auth plugin; do
run_test $project
results+=($?)
done
# we have to tell tox if either of these test runs failed
for r in "${results[@]}"; do
if [ $r != 0 ]; then
exit 1
fi
done
fi