次の方法で共有


compare コマンドを使用した回帰テスト

PQTest compare コマンドは回帰テスト用の強力なツールであり、コネクタの機能とコマンド テキストの生成を徹底的に評価できます。 その多様性を説明するために、以降のセクションでは、さまざまなシナリオに合わせたさまざまな例を提供します。

基本的なクエリ

テストの最も簡単な形式は、単一のクエリ式を .query.pq ファイルに追加することです。このファイルは compare コマンドを 使用して実行できます。 PQTest は式を評価し、同じ名前の .pqout (出力) ファイルを生成します。 後続の実行では、.query.pq ファイルの評価から生成された出力と、同じ名前の pqout (出力) ファイルを比較し、評価の出力を返します。

例 1 - 出力ファイルが存在しない場合にクエリ ファイルに対して compare コマンドを実行する

次の例では、指定した Power Query 拡張機能を使用して 1 つのクエリ テスト ファイルを実行し、比較する出力ファイルを生成します。

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq
[
  {
    "Details": "Contoso.Contents(\"TestEndpoint\")",
    "EndTime": "2020-12-11T18:04:14.8991822+00:00",
    "Method": "Compare.TestFiles",
    "Name": "contoso.query.pq",
    "StartTime": "2020-12-11T18:04:11.1532388+00:00",
    "Output": [
      {
        "SourceFilePath": "contoso.query.pq",
        "OutputFilePath": "contoso.query.pqout",
        "Status": "Output File Generated",
        "SerializedSource": null,
        "SourceError": null,
        "OutputError": null
      }
    ],
    "Status": "Passed",
    "Type": "PQTest.Expression"
  }
]

例 2 - 出力ファイルが存在せず、FailOnMissingOutputFile フラグが設定されている場合にクエリ ファイルの比較コマンドを実行する

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof
[
  {
    "Details": "Contoso.Contents(\"TestEndpoint\")",
    "EndTime": "2020-12-11T18:04:14.8991822+00:00",
    "Method": "Compare.TestFiles",
    "Name": "contoso.query.pq",
    "StartTime": "2020-12-11T18:04:11.1532388+00:00",
    "Output": [
      {
        "SourceFilePath": "contoso.query.pq",
        "OutputFilePath": "contoso.query.pqout",
        "Status": "Missing Output File",
        "SerializedSource": "Output of contoso.query.pq",
        "SourceError": null,
        "OutputError": null
      }
    ],
    "Status": "Failed"
    "Type": "PQTest.Expression"
  }
]

例 3 - クエリ ファイルと出力ファイルが存在する比較コマンドの実行

次の例では、指定した Power Query 拡張機能を使用して 1 つのクエリ テスト ファイルを実行し、出力ファイルと比較して結果を返します。

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq
[
  {
    "Details": "Contoso.Contents(\"TestEndpoint\")",
    "EndTime": "2020-12-11T18:04:14.8991822+00:00",
    "Method": "Compare.TestFiles",
    "Name": "contoso.query.pq",
    "StartTime": "2020-12-11T18:04:11.1532388+00:00",
    "Output": [
      {
        "SourceFilePath": "contoso.query.pq",
        "OutputFilePath": "contoso.query.pqout",
        "Status": "Passed",
        "SerializedSource": null,
        "SourceError": null,
        "OutputError": null
      }
    ],
    "Status": "Passed",
    "Type": "PQTest.Expression"
  }
]

パラメーター クエリを使用したテスト

パラメーター クエリは、実行時にテスト クエリと組み合わされ、パラメーター クエリが最初に実行されるクエリです。 この機能を使用すると、PQ/テスト クエリ ファイルをパラメーター クエリ ファイルとテスト クエリ ファイルの 2 つの部分に分割できます。

特定のデータ ソースに依存しない形で、パラメーターおよびテスト クエリ形式を使用したテスト

この機能が役立つユース ケースの例は、データ ソースに依存しないテスト スイートを作成することです。 パラメーター クエリを使用してデータ ソースからデータを取得し、テスト クエリを汎用 M にすることができます。別のコネクタのテストを実行する場合は、その特定のデータ ソースを指すパラメーター クエリを追加または更新するだけで済みます。

パラメーター クエリを使用する場合の主な違いは、テスト クエリが別の形式に従う点です。 数式ではなく、パラメーター クエリから返されるテーブルを表す 1 つの入力パラメーターを受け取る M 関数である必要があります。

次のテスト クエリがあるとします。

let
    Source = Snowflake.Databases("...", "..."),
    Database = Source{[Name="...",Kind="Database"]}[Data],
    SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
    SelectColumns

テスト クエリとパラメーター クエリに変換するには、次のように分割する必要があります。

パラメーター クエリ:

let
    Source = Snowflake.Databases("...", "..."),
    Database = Source{[Name="...",Kind="Database"]}[Data],
    Schema = Database{[Name="...",Kind="Schema"]}[Data],
    Taxi_Table = Schema{[Name="...",Kind="Table"]}[Data],
in
    Taxi_Table

テスト クエリ:

(Source) => let
    SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
    SelectColumns

例 4 - compare コマンドでパラメーター クエリとテスト クエリの両方を使用する

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -pa contoso.parameter.pq
[
  {
    "Details": "(Source) => let\r\n    Schemas = Table.RemoveColumns(Source, { \"Data\" })\r\nin\r\n    Schemas",
    "EndTime": "2020-12-11T18:04:14.8991822+00:00",
    "Method": "Compare.TestFiles",
    "Name": "contoso.query.pq",
    "StartTime": "2020-12-11T18:04:11.1532388+00:00",
    "Output": [
      {
        "SourceFilePath": "contoso.query.pq",
        "OutputFilePath": "contoso.query.pqout",
        "Status": "Passed",
        "SerializedSource": null,
        "SourceError": null,
        "OutputError": null
      }
    ],
    "Status": "Passed",
    "Type": "PQTest.Expression"
  }
]

診断の比較

compare コマンドを使用する場合は、診断チャネルをサブスクライブすることで、追加の診断情報を評価できます。 compare コマンドを実行すると、PQTest は、イベントが発生したサブスクライブされたチャネルごとに .diagnostics ファイルを出力します。 それ以降の実行では、.pqout と同様に、診断イベントとその .diagnostics ファイルが比較されます。

例 5 - クエリ フォールディングを検証するための ODBC (Open Database Connectivity) 診断チャネルのサブスクライブ

次の例では、ODBC チャネルをサブスクライブする方法を示します。このチャネルは、クエリ フォールディングが使用されるときに ODBC ドライバーによって生成されたすべての SQL をキャプチャします。

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -dc "Odbc"

ODBC 診断チャネルを使用して、クエリが折りたたまれており、正しい SQL が生成されていることを確認できます。

let
    Source = AzureSpark.Tables("...")
    T1 = Source{[Schema="default",Item="DATABASE"]}[Data],
    SelectColumns = Table.Group(T1, {}, {{"Maximum", each List.Max([number_column]), type number}}),
    FirstN = Table.FirstN(SelectColumns, 1)
in
    FirstN

これで、.diagnostics ファイルに次の ODBC コマンド テキストが折りたたまれ、生成されます。

[
  {
    "Command": "DESCRIBE default.DATABASE;"
  },
  {
    "Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
  }
]

設定ファイルの使用

compare コマンドのコマンド ライン入力パラメーターは、JSON 設定ファイルを使用して渡すこともできます。 JSON には、次のオプションを指定できます。

Option タイプ Description
ExtensionPaths アレイ コネクタ ファイル (mez/pqx) を指すパスの配列。
FailOnMissingOutputFile ブール (bool) Compare は PQOut ファイルを生成せず、存在しない場合は失敗します。
FailOnFoldingFailure ブール (bool) クエリ フォールディング エラーがスローされた場合、比較は失敗します。
ParameterQueryFilePath 文字列 M 式を含むクエリ ファイル。実行時にテスト クエリ ファイルと組み合わされます。 一般的なユース ケースは、複数のテスト クエリのデータを取得する M 式を指定する単一のパラメーター クエリ ファイルを持つことです。
QueryFilePath 文字列 テストする M 式 (.pq) を含むクエリ ファイル。
TrxReportPath 文字列 TRX (Visual Studio テスト結果ファイル) の結果ファイルを生成し、特定のパス内のテストごとに個別の JSON ファイルを生成します。
DiagnosticChannels アレイ テスト実行にアタッチする診断チャネルの名前 (クエリ フォールディング ステートメントをキャプチャするための Odbc など)。

コマンド ライン入力と設定オプションの両方が指定されている場合は、コマンド ライン入力が優先されます。

例 6 - コマンド ライン引数の代わりに設定ファイルを使用する

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof

上記のコマンドは、次のコマンドと同じです。

<Path to PQTest.exe>.\PQTest.exe compare -sf settings.json

ここで settings.json は次の JSON ファイルです。

{
  "ExtensionPaths": ["contoso.mez"],
  "QueryFilePath": "contoso.query.pq",
  "FailOnMissingOutputFile": true
}

比較コマンドを使用してバッテリーをテストする

テスト バッテリーは、コードの複数の側面を評価するテストのコレクションです。 PQTest で簡単に検索できるように、クエリ ファイルを同じフォルダーに配置します。 特定のテスト ファイル名を渡す代わりに、フォルダー パスを指定し、PQTest はすべての .query.pq テスト クエリ ファイルを 1 回のパスで実行します。

例 7 - 一連のテストを実行する

次のファイルを含む test という名前のフォルダーを想定します。

  • contoso.testa.query.pq
  • contoso.testb.query.pq
  • contoso.testc.query.pq

テスト バッテリ全体は、次のコマンド ラインを使用して実行できます。

<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q .\test

一連のテストを実行するときに特定のテストを無視する

.query.pq ファイルの拡張子を .query.pq.ignore に変更することで、テストのバッテリーを実行するときにテストを無視できます。

例 8 - 複数のテストを実行するときにテストを無視する

次のファイルを含む test という名前のフォルダーを想定します。

  • contoso.testa.query.pq
  • contoso.testb.query.pq.ignore
  • contoso.testc.query.pq

contoso.testa.query.pq ファイルと contoso.testc.query.pq ファイルは実行されますが、次のコマンドを実行してテスト バッテリーを実行すると、contoso.testb.query.pq.ignore は無視されます。

<Path to PQTest.exe>.\PQTest.exepqtest.exe compare -e contoso.mez -q .\test