Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
OpenStack Integration Test Suite ガイド
OpenStack Integration Test Suite の概要
概要
前書き
本ガイドでは、Red Hat OpenStack Platform 環境で OpenStack Integration Test Suite をインストール、設定、および管理する方法について説明します。
第1章 はじめに
OpenStack は多くの異なるプロジェクトで構成されるため、OpenStack クラスター内のプロジェクトの相互運用性をテストすることが重要です。OpenStack Integration Test Suite (tempest) は、Red Hat OpenStack Platform デプロイメントの統合テストを自動化します。テストを実行すると、クラスターが想定どおりに動作していることになり、特にアップグレード後に、潜在的な問題を早期に警告することもできます。
Integration Test Suite には、OpenStack API 検証とシナリオテストのテスト、および自己検証のユニットテストが含まれています。Integration Test Suite は、OpenStack パブリック API を使用し、テストランナーとして tempest を使用してブラックボックステストを実行します。
第2章 OpenStack Integration Test Suite のテスト
OpenStack Integration Test Suite には多くのアプリケーションがあります。これは、OpenStack コアプロジェクトへのコミットのゲートとして動作し、クラウドデプロイメントの負荷を生成するためにストレステストを行い、CLI テストを実行してコマンドラインの応答形式を確認できます。ただし、関連する機能は シナリオテストおよび
です。これらのテストは、OpenStack クラウドデプロイメントに対して実行されます。以下のセクションでは、これらの各テストの実装方法を説明します。
API テスト
2.1. シナリオテスト
シナリオテストは、サービス間の統合ポイントをテストする一般的なエンドユーザーアクションワークフローをシミュレートします。テストフレームワークは、設定を実施し、サービス間の統合をテストしてから、自動的に削除されます。テストに関連するサービスでテストにタグを付け、テストが使用するクライアントライブラリーを明確にします。
シナリオは、以下のようなユースケースに基づいています。
- Image サービスへのイメージのアップロード
- イメージからのインスタンスのデプロイ
- インスタンスへのボリュームの接続
- インスタンスのスナップショットの作成
- インスタンスからのボリュームの切断
2.2. API テスト
API テストは、OpenStack API を検証します。テストは、OpenStack API の OpenStack Integration Test Suite 実装を使用します。有効な JSON と無効な JSON の両方を使用すると、エラーの応答が有効であることを確認できます。テストを個別に実行し、以前のテスト状態に依存する必要はありません。
第3章 OpenStack Integration Test Suite のインストール
本項には、Director または手動インストールのいずれかを使用した OpenStack Integration Test Suite のインストールに関する情報が含まれています。
3.1. director の使用
stack
ユーザーのホームディレクトリーにある undercloud.conf
ファイルを編集します。enable_tempest
パラメーターが true
に設定されていることを確認します。
enable_tempest = true
アンダークラウドがすでにインストールされている場合には、undercloud.conf
ファイルを編集してから openstack undercloud install
コマンドを実行して、アンダークラウドに追加の設定を追加することができます。
$ openstack undercloud upgrade
これで、「OpenStack Integration Test Suite パッケージのインストール」 に記載されている tempest
パッケージおよびプラグインをインストールする準備が整いました。
3.2. 手動インストールの準備
OpenStack Integration Test Suite を実行するには、最初に必要なパッケージをインストールし、さまざまな OpenStack サービスやその他のテスト動作スイッチの場所を Integration Test Suite に通知する構成ファイルを作成する必要があります。
OpenStack Integration Test Suite をインストールするには、以下のネットワークが Red Hat OpenStack Platform 環境内で利用可能である必要があります。
- Floating IP を提供できる外部ネットワーク
- プライベートネットワーク
これらのネットワークはルーター経由で接続されている必要があります。
プライベートネットワークを作成します。ネットワークデプロイメントに従って、以下のオプションを指定します。
$ openstack network create <network_name> --share $ openstack subnet create <subnet_name> --subnet-range <address/prefix> \ --network <network_name> $ openstack router create <router_name> $ openstack router add subnet <router_name> <subnet_name>
パブリックネットワークを作成します。ネットワークデプロイメントに従って、以下のオプションを指定します。
$ openstack network create <network_name> --external \ --provider-network-type flat $ openstack subnet create <subnet_name> --subnet-range <address/prefix> \ --gateway <default_gateway> --no-dhcp --network <network_name> $ openstack router set <router_name> --external-gateway <public_network_name>
これで、OpenStack Integration Test Suite を tempest
の仮想マシン内にインストールおよび設定することができます。詳細は、「OpenStack Integration Test Suite パッケージのインストール」 を参照してください。
3.3. OpenStack Integration Test Suite パッケージのインストール
OpenStack Integration Test Suite に関連するパッケージをインストールします。
$ sudo yum -y install openstack-tempest
このコマンドでは、tempest プラグインはインストールされません。OpenStack のインストールに応じて、プラグインを手動でインストールする必要があります。
環境内の各コンポーネントに適切な tempest プラグインをインストールします。たとえば、keystone、horizon、neutron、cinder、および telemetry プラグインをインストールするには、以下のコマンドを実行します。
$ sudo yum install python-keystone-tests-tempest python-horizon-tests-tempest python-neutron-tests-tempest python-cinder-tests-tempest python-telemetry-tests-tempest
各 OpenStack コンポーネントの tempest プラグインの一覧については、「tempest プラグインパッケージの一覧」 を参照してください。
openstack-tempest-all パッケージもインストールできます
。このパッケージには、tempest プラグインがすべて含まれます。
3.3.1. tempest プラグインパッケージの一覧
以下のコマンドを実行して、tempest テストパッケージの一覧を取得します。
$ sudo yum search $(openstack service list -c Name -f value) 2>/dev/null | grep test | awk '{print $1}'
コンポーネント | パッケージ名 |
---|---|
barbican | python-barbican-tests-tempest |
cinder | python-cinder-tests-tempest |
designate | python-designate-tests-tempest |
ec2-api | python-ec2api-tests-tempest |
heat | python-heat-tests-tempest |
horizon | python-horizon-tests-tempest |
ironic | python-ironic-tests-tempest |
keystone | python-keystone-tests-tempest |
kuryr | python-kuryr-tests-tempest |
manila | python-manila-tests-tempest |
mistral | python-mistral-tests-tempest |
networking-bgvpn | python-networking-bgpvpn-tests-tempest |
networking-l2gw | python-networking-l2gw-tests-tempest |
neutron | python-neutron-tests-tempest |
nova-join | python-novajoin-tests-tempest |
octavia | python-octavia-tests-tempest |
patrole | python-patrole-tests-tempest |
sahara | python-sahara-tests-tempest |
telemetry | python-telemetry-tests-tempest |
tripleo-common | python-tripleo-common-tests-tempest |
zaqar | python-zaqar-tests-tempest |
tempest テストパッケージは Python バージョンに固有のものです。たとえば、システムが Python 2 を使用している場合は、Tempest テストパッケージをインストールする際に
に置き換える必要があります。
python-
を python2-
python-telemetry-tests-tempest
パッケージには、aodh、panko、gnocchi、および ceilometer テストのプラグインが含まれています。python-ironic-tests-tempest
パッケージには、ironic および ironic-inspector のプラグインが含まれます。
第4章 OpenStack Integration Test Suite の設定
4.1. ワークスペースの作成
ターゲットデプロイメントの認証情報を読み込みます。
ターゲットがアンダークラウドにある場合は、source コマンドでアンダークラウドの認証情報を読み込みます。
# source stackrc
ターゲットがオーバークラウドにある場合、source コマンドでオーバークラウドの認証情報を読み込みます。
# source overcloudrc
Initialize
tempest
:# tempest init mytempest # cd mytempest
このコマンドは、mytempest という名前の一時ワークスペースを作成します
。
以下のコマンドを実行して、既存のワークスペースの一覧を表示します。
# tempest workspace list
etc/tempest.conf
ファイルを生成します。# discover-tempest-config --deployer-input ~/tempest-deployer-input.conf \ --debug --create --network-id <UUID>
UUID
は、外部ネットワークの UUID に置き換えます。discover-tempest-config コマンドに含めることのできるオプションの詳細については、find-
tempest-config --help
を実行します。たとえば、--image
オプションを使用して、使用するイメージを定義します。--image
オプションでイメージを割り当てる場合には、割り当てられたイメージに適したフレーバーを作成しなければならない場合があります。discover-tempest-config
、m1.nano、および m1.micro が作成したデフォルトのフレーバーは、イメージ用に小さすぎる可能性があります。フレーバーを作成したら、フレーバー ID を flavor_ref および
のflavor_ref_
alttempest.conf
に追加する必要があります。discover-tempest-config
は以前のconfig_tempest.py
と呼ばれ、同じパラメーターを取ります。これは、openstack
によって提供されます。-tempest の依存関係としてインストールされる python-tempest
conf
アンダークラウドの etc/tempest.conf
ファイルを生成するには、tempest-deployer-input.conf
ファイルのリージョン名がアンダークラウドのデプロイメントの名前と同じであることを確認します。これらの名前が一致しない場合は、アンダークラウドのリージョン名と一致するように tempest-deployer-input.conf
ファイルのリージョン名を更新します。
アンダークラウドのリージョン名を検証するには、以下のコマンドを実行します。
$ source stackrc $ openstack region list
オーバークラウドのリージョン名を検証するには、以下のコマンドを実行します。
$ source overcloudrc $ openstack region list
4.2. Tempest の手動設定
discover-tempest-config
コマンドは、tempest.conf
ファイルを自動的に生成します。ただし、tempest.conf
ファイルがご自分の環境の設定に対応していることを確認する必要があります。
4.2.1. Tempest 拡張機能一覧の手動設定
default tempest.conf
ファイルには、各コンポーネントの拡張機能一覧が含まれます。tempest.conf
ファイルの各コンポーネントの api_extensions
属性を検査し、エクステンションの一覧がデプロイメントに対応していることを確認します。
デプロイメントで利用可能な拡張機能が tempest.conf
ファイルの api_extensions
属性の extensions の一覧と一致しない場合、コンポーネントは tempest テストに失敗します。この失敗を防ぐには、デプロイメントで利用可能な拡張機能を特定し、それらを api_extensions
パラメーターに含める必要があります。デプロイメント内の Network、Compute、Volume、または Identity 拡張機能の一覧を取得するには、以下のコマンドを実行します。
$ openstack extension list [--network] [--compute] [--volume] [--identity]
4.2.2. heat_plugin の手動設定
実際のデプロイメント設定に応じて、heat_plugin
プラグインを手動で設定します。以下の例は、heat_plugin
の minimum tempest.conf
設定を示しています。
[service_available] heat_plugin = True [heat_plugin] username = demo password = *** project_name = demo admin_username = admin admin_password = **** admin_project_name = admin auth_url = http://10.0.0.110:5000//v3 auth_version = 3 user_domain_id = default project_domain_id = default user_domain_name = Default project_domain_name = Default region = regionOne instance_type = m1.nano minimal_instance_type = m1.micro image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5 minimal_image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5
tempest.conf
ファイルの [service_available]
セクションで heat_plugin
を True
に設定する必要があります。また、[ heat_plugin]
セクションの username
属性のユーザーには role _member_ が必要です
。たとえば、以下のコマンドを実行して _member_
ロールを demo
ユーザーに追加します。
$ openstack role add --user demo --project demo '_member_'
4.3. Tempest 設定の検証
現在の tempest 設定を検証します。
# tempest verify-config -o <output>
output
は、Tempest が更新された設定を書き込む出力ファイルです。これは、元の設定ファイルとは異なります。
4.4. ログ設定の変更
ログファイルのデフォルトの場所は、tempest ワークスペース内の ログディレクトリー
です。
このディレクトリーを変更するには 、[DEFAULT]
セクションの下にある in tempest.conf
を変更するには、log_dir
を必要なディレクトリーに設定します。
[DEFAULT] log_dir = <directory>
[DEFAULT]
セクションの下に、独自のロギング設定ファイル in tempest.conf
がある場合は、log_config_append
をファイルに設定します。
[DEFAULT] log_config_append = <file>
log_config_append
属性を設定する場合、Tempest は log_dir
属性を含むその他すべてのロギング設定を tempest.conf
を無視します。
4.5. マイクロバージョンテストの設定
OpenStack Integration Test Suite は、API マイクロバージョンをテストする安定したインターフェースを提供します。このセクションは、これらのインターフェースを使用してマイクロバージョンテストを実装する方法を説明します。
まず、tempest.conf
設定ファイルでオプションを設定して、ターゲットマイクロバージョンを指定する必要があります。サポートされているマイクロバージョンが OpenStack クラウドで使用されているマイクロバージョンに対応するように、これらのオプションを設定します。単一の Integration Test Suite 操作で複数のマイクロバージョンテストを実行するターゲットマイクロバージョンの範囲を指定できます。
たとえば、Compute サービスの
マイクロバージョンの範囲を、設定ファイルの [compute]
セクションで制限するには、min _microversion パラメーターおよび
を割り当てます。
max_microversion
パラメーターに値
[compute] min_microversion = 2.14 max_microversion = latest
第5章 Tempest の使用
本セクションのコマンドを入力して、さまざまなテスト操作を実行します。1 tempest run
コマンドで複数のオプションを組み合わせることもできます。
5.1. 利用可能なテストの一覧表示
--list
コマンドを実行し、利用可能な tempest テストの一覧を取得します。
-tests または
run-l
オプションのいずれかでtempest-
# tempest run -l
5.2. smoke テストの実行
smoke テスト は、最も重要な機能のみを対象とした予備的なテストの種類です。これらのテストは包括的ではありませんが、smoke テストの実行で問題が特定できれば時間を節約できます。
# tempest run --smoke
5.3. ホワイトリストファイルを使用したテストへの合格
ホワイトリストファイルは、追加するテストを選択する正規表現が含まれるファイルです。正規表現は改行で区切られます。
ホワイトリストファイルを使用するには 、--whitelist-file
または -w
オプションのいずれかで tempest run
コマンドを実行します。
# tempest run -w <whitelist_file>
5.4. ブラックリストファイルを使用したテストのスキップ
ブラックリストファイルは、除外するテストを選択する正規表現が含まれるファイルです。正規表現は改行で区切られます。
blacklist ファイルを使用するには 、--blacklist-file
または -b
オプションのいずれかで tempest run
コマンドを実行します。
# tempest run -b <blacklist_file>
5.5. 並行または連続してテストの実行
テストを順次実行します。
# tempest run --serial
テストを並行して実行します。並列テストがデフォルトです。
# tempest run --parallel
--concurrency
または -c
オプションを使用して、並行してテストを実行する時に使用するワーカーの数を指定します。
# tempest run --concurrency <workers>
デフォルトでは、Integration Test Suite は利用可能な CPU ごとに 1 つのワーカーを使用します。
5.6. 特定のテストの実行
--regex
正規表現オプションを使用して特定のテストを実行します。正規表現は Python 正規表現である必要があります。
# tempest run --regex <regex>
たとえば、以下のコマンドを使用して、tempest.scenario
という名前のテストをすべて実行します。
# tempest run --regex ^tempest.scenario
第6章 コンテナー化された Tempest の実行
本項では、アンダークラウド上のコンテナーからの tempest な実行について説明します。オーバークラウドまたはアンダークラウドに対して tempest を実行できます。コンテナー化された tempest には、コンテナー化されていない tempest と同じリソースが必要です。
この機能は、本リリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト目的のみでご利用いただく機能で、実稼働環境にデプロイすべきではありません。テクノロジープレビュー機能についての詳しい情報は、「対象範囲の詳細」を参照してください。
6.1. tempest コンテナーの準備
tempest コンテナーをダウンロードし、設定するには、以下の手順を実行します。
/home/stack
ディレクトリーに移動します。$ cd /home/stack
tempest コンテナーをダウンロードします。
$ docker pull registry.redhat.io/rhosp13/openstack-tempest
このコンテナーには、すべての tempest プラグインが含まれます。このコンテナーでグローバルに tempest テストを実行するには、プラグインのテストが含まれます。たとえば、
tempest run --regex '(*.)'
コマンドを実行すると、tempest はすべてのプラグインテストを実行します。デプロイメントにすべてのプラグインの設定が含まれていない場合には、これらの tempest テストに失敗します。tempest list-plugins
コマンドを実行して、インストールされたプラグインをすべて表示します。テストを除外するには、ブラックリストファイルに除外するテストを含める必要があります。詳細は、5章Tempest の使用を参照してください。ホストマシンとコンテナー間でデータを交換するために使用するディレクトリーを作成します。
$ mkdir container_tempest tempest_workspace
必要なファイルを
container_tempest
ディレクトリーにコピーします。このディレクトリーはコンテナーのファイルソースです。$ cp stackrc overcloudrc tempest-deployer-input.conf container_tempest
利用可能な docker イメージを一覧表示します。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/rhosp13-beta/openstack-tempest latest 881f7ac24d8f 10 days ago 641 MB
コマンドエントリーを容易にするエイリアスを作成します。ディレクトリーをマウントする際に、絶対パスを使用していることを確認します。
$ alias docker-tempest="docker run -i \ -v "$(pwd)"/container_tempest:/home/stack/container_tempest \ -v "$(pwd)"/tempest_workspace:/home/stack/tempest_workspace \ registry.redhat.io/rhosp13/openstack-tempest \ /bin/bash"
コンテナーで利用可能な tempest プラグインの一覧を取得するには、以下のコマンドを実行します。
$ docker-tempest -c "rpm -qa | grep tempest"
6.2. コンテナー内でコンテナー化された Tempest の実行
コンテナー内で実行できる tempest スクリプトを作成して
tempest.conf
ファイルを生成し、tempest テストを実行します。スクリプトは以下のアクションを実行します。-
コマンドセット -e
の終了ステータスを設定します。 -
オーバークラウドに対して tempest を実行する場合には、source
コマンドで overcloudrc
ファイルを読み込みます。アンダークラウドに対して tempest を実行する場合には、stackrc ファイルを読み込みます
。 -
Run
tempest init
to create a tempest workspace.共有ディレクトリーを使用して、ホストからもファイルにアクセスできるようにします。 -
ディレクトリーを
tempest_workspace に変更
- 後で簡単に使用できるように、TEMPESTCONF 環境変数をエクスポートします。
-
discover-tempest-config
を実行してtempest.conf
ファイルを生成します。discover-tempest-config コマンドに含めることのできるオプションの詳細については、find-
tempest-config --help
を実行します。 -
--out
をhome/stack/tempest_workspace/tempest.conf
に設定して、tempest.conf
ファイルがホストマシンからアクセスできるようにします。 -
--deployer-input
を設定し、共有ディレクトリーのtempest-deployer-input.conf
ファイルを参照します。 tempest テストを実行します。このサンプルスクリプトは、smoke test
tempest run --smoke
を実行します。$ cat <<'EOF'>> /home/stack/container_tempest/tempest_script.sh set -e source /home/stack/container_tempest/overcloudrc tempest init /home/stack/tempest_workspace pushd /home/stack/tempest_workspace export TEMPESTCONF="/usr/bin/discover-tempest-config" $TEMPESTCONF \ --out /home/stack/tempest_workspace/etc/tempest.conf \ --deployer-input /home/stack/container_tempest/tempest-deployer-input.conf \ --debug \ --create \ object-storage.reseller_admin ResellerAdmin tempest run --smoke EOF
tempest.conf
ファイルがすでにあり、tempest テストのみを実行する必要がある場合は、スクリプトからTEMPESTCONF
を省略し、tempest.conf ファイルを
ディレクトリーにコピーするコマンドに置き換えます。container_tempest
ディレクトリーからtempest_
workspace/etc
$ cp /home/stack/container_tempest/tempest.conf /home/stack/tempest_workspace/etc/tempest.conf
-
tempest_script.sh
スクリプトで実行可能な権限を設定します。$ chmod +x container_tempest/tempest_script.sh
前のステップで作成したエイリアスを使用して、コンテナーから tempest スクリプトを実行します。
$ docker-tempest -c 'set -e; /home/stack/container_tempest/tempest_script.sh'
-
テスト結果に関する情報に対して
.stestr
ディレクトリーを検査します。 tempest テストを再実行する場合は、最初に tempest ワークスペースを削除し、再作成する必要があります。
$ sudo rm -rf /home/stack/tempest_workspace $ mkdir /home/stack/tempest_workspace
6.3. コンテナーの外部でコンテナー化された Tempest の実行
コンテナーは tempest.conf
ファイルを生成または取得して、テストを実行します。これらの操作は、コンテナー外部から実行できます。
オーバークラウドに対して tempest を実行する場合には、source
コマンドで overcloudrc
ファイルを読み込みます。アンダークラウドに対して tempest を実行する場合には、stackrc ファイルを読み込みます
。# source /home/stack/container_tempest/overcloudrc
Run
tempest init
to create a tempest workspace.共有ディレクトリーを使用して、ホストからもファイルにアクセスできるようにします。# tempest init /home/stack/tempest_workspace
tempest.conf
ファイルを生成します。# discover-tempest-config \ --out /home/stack/tempest_workspace/tempest.conf \ --deployer-input /home/stack/container_tempest/tempest-deployer-input-conf \ --debug \ --create \ object-storage.reseller_admin ResellerAdmin
discover-tempest-config コマンドに含めることのできるオプションの詳細については、find-
tempest-config --help
を実行します。tempest テストを実行します。たとえば、以下のコマンドを実行して、直前の手順で作成したエイリアスを使用して tempest smoke テストを実行します。
# docker-tempest -c "tempest run --smoke"
-
テスト結果に関する情報に対して
.stestr
ディレクトリーを検査します。 tempest テストを再実行する場合は、最初に tempest ワークスペースを削除し、再作成する必要があります。
$ sudo rm -rf /home/stack/tempest_workspace $ mkdir /home/stack/tempest_workspace
第7章 tempest リソースのクリーニング
実行中は 、
削除する必要のあるテストプロセスでファイル、ユーザー、およびプロジェクトが作成されます。自己クリーニングが可能なのは、設計原理の 1 つです
。
7.1. クリーンアップの実行
最初に、保存された状態を初期化する必要があります。これにより、saved_state.json
ファイルが作成されます。これにより、クリーンアップは保持する必要のあるオブジェクトを削除できなくなります。通常、一時的な実行前に --init-saved-state
でクリーンアップを実行します。この場合は、saved_state.json
を編集し、クリーンアップを削除するオブジェクトを削除する必要があります。
# tempest cleanup --init-saved-state
クリーンアップを実行します。
# tempest cleanup
tempest cleanup
コマンドは一時的なリソースを削除しますが、プロジェクトや一時管理者アカウントは削除されません。
7.2. ドライランの実行
実際のクリーンアップを実行する前にドライランを実行することが推奨されます。ドライランでは、クリーンアップによって削除されるファイルが一覧表示されますが、ファイルは削除されません。ファイルは dry_run.json
ファイルに一覧表示されます。dry_run.json
ファイルをチェックして、クリーンアップで環境に必要なファイルが削除されないようにします。
# tempest cleanup --dry-run
7.3. Tempest オブジェクトの削除
次のコマンドを実行して、プロジェクトを含むすべての tempest リソースを削除しますが、tempest 管理者アカウントは削除しません。
# tempest cleanup --delete-tempest-conf-objects