tox
から実行されるunitおよびfunctionalテストがどのように実行されるのかを簡単にメモ。なおstestr
には触れていない。
テストツール
tox
からテストを実行するとtox.ini
に定義に従いテストツールが起動される。
unitテストとfunctionalテストともに通常はstestr
が利用されている。
stestr --test-path=./nova/tests/functional run {posargs}
デバッグを行う場合は異なり、stestr
ではなくoslo_debug_helper
が利用される。
oslo_debug_helper {posargs}
oslo_debug_helper
oslo_debug_helper
の実体はshellスクリプト。 https://github.com/openstack/oslotest/blob/master/tools/oslo_debug_helper
デバッグを行う際には自分であらかじめbreak pointをコードに埋め込み、tox
にて-e debug
オプションを指定してデバッグを開始する。https://docs.openstack.org/oslotest/latest/user/features.html
import pdb; pdb.set_trace()
tox -e debug $TEST_DIR
コマンドを実行すると、oslo_debug_helper
にて対象となるテストをtesttools
から起動する($TEST_DIR
はxxx/tests
などを指定)。
oslo_debug_helper
の中ではまず実行対象となるテスト関数をリストアップする。
${PYTHON} -m testtools.run discover -t ./ $TEST_DIR --list > $ALL_TESTS
ここで、ALL_TESTS
にはTEST_DIR
配下にある全てのテスト関数が書き込まれるため、特定のテスト関数のみを実行する場合はフィルタリングが行われる。
# getopts friendly way of determining if a positional arg has been passed
ARG1=${@:$OPTIND:1}
if [ "$ARG1" ]; then
grep "$ARG1" < $ALL_TESTS > $TESTS_TO_RUN
else
mv $ALL_TESTS $TESTS_TO_RUN
fi
最後にTEST_TO_RUN
に書き込まれた対象のテスト関数が実行する。
${PYTHON} -m testtools.run discover --load-list $TESTS_TO_RUN