テスト

用途

test: historic_revenue_is_accurate {
  explore_source:  orders {
    column:  total_revenue {
      field:  orders.total_revenue 
    }
    filters: [orders.created_date:  "2017"]
  }
  assert:  revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}
階層
test

または

test

または

test
デフォルト値
なし

許可
データテストの ID と、テスト アサーションとクエリを定義するサブパラメータ。

定義

Looker には、LookML コードの構文が有効であることを確認する LookML Validator と、コンテンツとモデル間のオブジェクト参照を確認する Content Validator があります。

これらのバリデーターに加えて、test パラメータを使用すると、モデルのロジックを検証できます。データテストごとに、クエリと yesno アサーション ステートメントを作成します。データテストでテストクエリを実行し、テストクエリの各行に対してアサーションが true となることを検証します。アサーション ステートメントがテストクエリのすべての行に対して yes を返したとしたら、データテストは合格です。

本番環境にデプロイする前にデータテストに合格するようにプロジェクトが設定されていて、プロジェクトに 1 つ以上の test パラメータがある場合は、変更をプロジェクトに commit した後に [テストを実行] ボタンが表示されます。LookML デベロッパーは、変更を本番環境にデプロイする前にデータテストを実行する必要があります。

プロジェクトで本番環境へのデプロイ前のデータテストが必須となっているかどうかにかかわらず、開発モードの LookML デベロッパーはいつでもデータテストを実行して、モデルのロジックを検証できます。

データテストは、モデルファイルビューファイル、または個別の専用のデータテスト ファイルで作成できます。データテストを専用ファイルに保存する場合は、データテストを実行するモデルファイルまたはビューファイルでデータテスト ファイルを include することを忘れないでください。

データテストの名前と explore_source は、同じプロジェクト内の別のデータテストと同じにすることはできません。プロジェクト内の複数のデータテストで同じ explore_source を使用している場合は、データテストの名前がすべて一意であることを確認してください。

test パラメータには次のサブパラメータがあります。

  • explore_source: データテストで使用するクエリを定義します。
  • assert: テストクエリのすべての行で実行され、データを検証する Looker 式を定義します。

テストの LookML を定義したら、データテストを実行して、テストが正しく機能することを確認し、モデルのロジックがテストに合格するかどうかを確認できます(データテストを実行するには、開発モードである必要があります)。

プロジェクトのデータテストを開始する方法はいくつかあります。

  1. ファイルを本番環境にデプロイする前にデータテストに合格するようにプロジェクトが設定されている場合は、変更をプロジェクトに commit した後に [Run Tests] ボタンが表示されます。これにより、テストを定義するファイルに関係なく、プロジェクトのすべてのテストが実行されます。変更を本番環境にデプロイする前に、データテストに合格する必要があります。
  2. [プロジェクトの状態] パネルで、[データテストの実行] ボタンを選択します。これにより、テストを定義するファイルに関係なく、プロジェクト内のすべてのデータテストが実行されます。
  3. ファイルのメニューから [Run LookML Tests] オプションを選択します。これにより、現在のファイルで定義されているテストのみが実行されます。

データテストを実行すると、[プロジェクトの状態] パネルに進行状況と結果が表示されます。

各テスト結果の [Explore Query] リンクを選択して、データテストで定義されたクエリを含む Explore を開くことができます。

explore_source

データテストの explore_source パラメータは、派生テーブルの explore_source パラメータと同じ構文とロジックを使用します。唯一の違いは、データテストの explore_sourcederived_columnbind_filtersbind_all_filters のサブパラメータをサポートしていないことです。

便利なヒント: explore_source LookML を簡単に取得するには、既存の Explore を使用してクエリを作成します。Explore で、Explore の歯車メニューから [LookML を取得] を選択し、[派生テーブル] タブを選択して、クエリの LookML を取得します。詳細については、ネイティブ派生テーブルの作成に関するドキュメントをご覧ください。

データテストの explore_source について、次の点に注意してください。

  • データテストの explore_source クエリは標準の Looker クエリです。つまり、テストの explore_source クエリには 5,000 行の上限があります。クエリが 5,000 行を超えないようにして、テスト用の完全な結果セットを取得してください。explore_source にフィルタや並べ替えを組み込んで、クエリの行数を減らしたり、関連する行をクエリの先頭に表示したりできます。

  • extension: required を含む explore は、データテストexplore_source として使用できません。LookML Validator は、explore_source が見つからないことを示すエラーを生成します。

assert

assert サブパラメータは、explore_source クエリの結果が有効と見なされる基準を定義します。expression サブパラメータは、yesno(ブール値)を返す Looker 式を受け取ります。explore_source クエリが実行されると、クエリの結果セットのすべての行に対してアサーションの式が評価されます。クエリの行に対して no レスポンスがある場合、データテストは失敗します。クエリ自体にエラーがある場合も、テストは失敗します。

テストには複数の assert 宣言を含めることができます。テストに合格するには、explore_source クエリのすべての行に対して各アサーションが true である必要があります。

便利なヒント: 表計算ダイアログを使用して、テストの expression パラメータで使用する Looker 式の構文をテストできます。

データテストで使用する場合、Looker 式のフィールドは完全にスコープ設定されている必要があります。つまり、view_name.field_name 形式で指定されている必要があります。たとえば、次の式はフィールドを aircraft_engine_types.aircraft_engine_type_id として宣言します。

assert: engine_type_id_not_null {
  expression: NOT is_null(${aircraft_engine_types.aircraft_engine_type_id}) ;;
}

主キーが一意であることを確認する

次のデータテストでは、orders Explore からクエリを作成し、結果セットで注文 ID が一意であることをテストする expression を定義します。explore_source クエリは、データベース内の各 ID に関連付けられた行の数を作成します。ID が一意の場合、データベースには ID の行が 1 つだけ存在します。さらに、カウントで並べ替え、結果セットを 1 行に制限するため、クエリ レスポンスはカウントが最も多い ID になります。いずれかの ID のカウントが 1 より大きい場合、その ID に複数の行が存在するため、ID は一意ではありません。この場合、このデータテストは失敗します。

test: order_id_is_unique {
  explore_source: orders {
    column: id {}
    column: count {}
    sorts: [orders.count: desc]
    limit: 1
  }
  assert: order_id_is_unique {
    expression: ${orders.count} = 1 ;;
  }

既知の値の検証

次のデータテストでは、2017 年の収益の値が常に $626,000 であることを確認します。このデータセットでは、これは変更されることのない既知の値です。

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue {
      field: orders.total_revenue
    }
    filters: [orders.created_date: "2017"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

null 値がないことを確認する

次のデータテストでは、データに null 値がないことを確認します。この explore_sourcesort を使用して、null がクエリの先頭で返されるようにします。null の並べ替えは、言語によって異なる場合があります。次のテストでは、desc: yes を例として使用します。


test: status_is_not_null {
  explore_source: orders {
    column: status {}
    sorts: [orders.status: desc]
    limit: 1
  }
  assert: status_is_not_null {
    expression: NOT is_null(${orders.status}) ;;
  }
}