Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
付録B マイクロバージョンテストの設定および実装
OpenStack Integration Test Suite は、API マイクロバージョンをテストする安定性のあるインターフェースを提供します。以下のセクションは、これらのインターフェースを使用してマイクロバージョンテストの実装方法を説明します。
作業を開始する前に、サポートされるマイクロバージョンが OpenStack クラウドで使用するものと同じになるように、tempest.conf
の設定ファイルでオプションを設定してテスト対象のマイクロバージョンを指定する必要があります。テスト対象のマイクロバージョンの範囲を指定することで、単一の Integration Test Suite オペレーションで複数のマイクロバージョンテストを操作することができます。
設定ファイルの [compute]
セクションで、以下のように min_microversion
および max_microversion
パラメーターの値を追加します。
[compute] min_microversion = None max_microversion = latest
マイクロバージョンテストの実装
テストクラスや設定のマイクロバージョン範囲をベースにテストを省略するロジックを追加します。設定範囲に含まれないテストを自動的にスキップするには、以下のように
api_version_utils.check_skip_with_microversion
関数を使用してください。class BaseTestCase1(api_version_utils.BaseMicroversionTest): [..] @classmethod def skip_checks(cls): super(BaseTestCase1, cls).skip_checks() api_version_utils.check_skip_with_microversion(cls.min_microversion, cls.max_microversion, CONF.compute.min_microversion, CONF.compute.max_microversion)
Skip ロジックをテストベースクラスに追加してください。追加しないと、固有のテストクラスがテストクラスの構造に依存します。
API 要求と合わせて送信する際に使用する適切なマイクロバージョンを選択してください。
api_version_utils.select_request_microversion
関数を使用して、適切なマイクロバージョンを選択できます。このマイクロバージョンは API 要求に使用されます。以下に例を示します。@classmethod def resource_setup(cls): super(BaseTestCase1, cls).resource_setup() cls.request_microversion = ( api_version_utils.select_request_microversion( cls.min_microversion, CONF.compute.min_microversion))
選択したマイクロバージョンで API を要求できるように、以前のステップでテストクラスが選択したマイクロバージョンを、サービスクライアントに設定する必要があります。
マイクロバージョンは、サービスクライアント上でグローバル変数として定義することができます。これは、フィクスチャーを使用して設定できます。マイクロバージョンヘッダー名は、サービスクライアントで定義する必要があります。ヘッダー名は、API コントラクトのようにプロジェクト別に変更すべきではないので、一貫性を持たせる必要があります。以下に例を示します。
COMPUTE_MICROVERSION = None class BaseClient1(rest_client.RestClient): api_microversion_header_name = 'X-OpenStack-Nova-API-Version'
新規のテストクラスは、テストが完了したらリセットできるようにするフィクスチャーを使用して、必要なサービスクライアントに対して、選択したマイクロバージョンを設定できるようになりました。
def setUp(self): super(BaseTestCase1, self).setUp() self.useFixture(api_microversion_fixture.APIMicroversionFixture( self.request_microversion))
サービスクライアントは、API 要求ヘッダーのマイクロバージョンを追加する必要があります。これは、以下のように、rest_client の get_headers() メソッドを上書きすることで追加できます。
COMPUTE_MICROVERSION = None class BaseClient1(rest_client.RestClient): api_microversion_header_name = 'X-OpenStack-Nova-API-Version' def get_headers(self): headers = super(BaseClient1, self).get_headers() if COMPUTE_MICROVERSION: headers[self.api_microversion_header_name] = COMPUTE_MICROVERSION return headers
マイクロバージョンごとにテストクラスを分離します。
マイクロバージョンテストの場合には、別のテストクラスを実装する必要があります。さらに、各テストクラスは min_microversion および max_microversion などのクラス変数で、そのマイクロバージョンを定義します。テストは、定義した範囲で有効です。その範囲が設定したマイクロバージョンの範囲外の場合は、テストは省略されます。
注記マイクロバージョンテストでは個別のテストケースレベルではなく、テストクラスレベルでのテストがサポートされています。
以下のテストは、2.10 から 2.9 のマイクロバージョンに適用可能です。
class BaseTestCase1(api_version_utils.BaseMicroversionTest, tempest.test.BaseTestCase): [..] class Test1(BaseTestCase1): min_microversion = '2.2' max_microversion = '2.9' [..]
以下のテストは、2.10 から最新のマイクロバージョンに適用可能です。
class Test2(BaseTestCase1): min_microversion = '2.10' max_microversion = 'latest' [..]