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

マイクロバージョンテストの実装

  1. テストクラスや設定のマイクロバージョン範囲をベースにテストを省略するロジックを追加します。設定範囲に含まれないテストを自動的にスキップするには、以下のように 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 ロジックをテストベースクラスに追加してください。追加しないと、固有のテストクラスがテストクラスの構造に依存します。

  2. 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))
  3. 選択したマイクロバージョンで 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
  4. マイクロバージョンごとにテストクラスを分離します。

    マイクロバージョンテストの場合には、別のテストクラスを実装する必要があります。さらに、各テストクラスは 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'
    
        [..]