Regressionstests mit dem Befehl "Vergleichen"

Der Befehl " PQTest-Vergleich " ist ein leistungsfähiges Tool für Regressionstests, mit dem Sie die Funktionen des Verbinders und die Generierung von Befehlstext gründlich auswerten können. Um die Vielseitigkeit zu veranschaulichen, bieten die nachfolgenden Abschnitte verschiedene Beispiele, die auf verschiedene Szenarien zugeschnitten sind.

Von Bedeutung

Der Befehl run-compare ersetzt den Befehl compare. Verwenden Sie den Befehl run-compare für zukünftige Regressionstests der Power Query-Connectors.

Grundlegende Abfragen

Die einfachste Form von Tests besteht darin, einer Datei einen einzelnen Abfrageausdruck .query.pq hinzuzufügen, den Sie mit dem Befehl "Vergleichen " ausführen können. PQTest wertet den Ausdruck aus und generiert eine .pqout (Ausgabe)-Datei mit demselben Namen. Bei nachfolgenden Läufen vergleicht sie die aus der Auswertung der .query.pq Datei generierte Ausgabe mit der .pqout Datei (Ausgabedatei) mit demselben Namen und gibt die Ausgabe der Auswertung zurück.

Beispiel 1: Ausführen des Vergleichsbefehls für eine Abfragedatei, wenn keine Ausgabedatei vorhanden ist

Im folgenden Beispiel wird eine einzelne Abfragetestdatei .query.pq mithilfe der angegebenen Power Query-Erweiterung ausgeführt und ausgabedatei generiert, die verglichen werden soll.

<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"
  }
]

Beispiel 2: Ausführen des Vergleichsbefehls für eine Abfragedatei, wenn keine Ausgabedatei vorhanden ist und FailOnMissingOutputFile-Flag festgelegt ist

<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"
  }
]

Beispiel 3 : Ausführen des Vergleichsbefehls für eine Abfragedatei mit einer vorhandenen Ausgabedatei

Im folgenden Beispiel wird eine einzelne Abfragetestdatei mithilfe der angegebenen Power Query-Erweiterung ausgeführt, mit der Ausgabedatei verglichen und das Ergebnis zurückgegeben.

<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"
  }
]

Testen mit Parameterabfrage

Die Parameterabfrage ist eine Abfrage, die mit einer Testabfrage zur Laufzeit kombiniert wird, wobei die Parameterabfrage zuerst ausgeführt wird. Mit dieser Funktion können Sie die PQ/Testabfragedatei in zwei Teile aufteilen: die Parameterabfragedatei und die Testabfragedatei.

Agnostische Datenquellentests mit Parameter- und Testabfrageformat

Ein Beispiel für einen Anwendungsfall, in dem diese Funktionalität nützlich wäre, besteht darin, eine agnostische Testsuite für Datenquellen zu erstellen. Sie können Ihre Parameterabfrage verwenden, um Daten aus der Datenquelle abzurufen und die Testabfrage generisch M zu haben. Wenn Sie die Tests für einen anderen Connector ausführen möchten, müssen Sie die Parameterabfrage nur hinzufügen/aktualisieren, um auf diese bestimmte Datenquelle zu verweisen.

Ein wichtiger Unterschied bei der Verwendung einer Parameterabfrage besteht darin, dass die Testabfrage einem anderen Format folgt. Anstatt ein Formelausdruck zu sein, muss es sich um eine M-Funktion handeln, die einen Eingabeparameter verwendet, der die von der Parameterabfrage zurückgegebene Tabelle darstellt.

Angenommen, Sie haben die folgende Testabfrage:

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

Um sie in eine Test- und Parameterabfrage zu konvertieren, müssen Sie sie wie folgt aufteilen:

Parameterabfrage:

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

Testabfrage:

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

Beispiel 4 : Verwenden von Parameterabfragen und Testabfragen mit Vergleichsbefehl

<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"
  }
]

Vergleich der Diagnose

Zusätzliche Diagnoseinformationen können ausgewertet werden, wenn Sie den Befehl "Vergleichen " verwenden, indem Sie einen Diagnosekanal abonnieren. Wenn der Vergleichsbefehl ausgeführt wird, gibt PQTest eine .diagnostics Datei für jeden abonnierten Kanal mit einem Ereignis aus. Bei nachfolgenden Ausführungen vergleicht es das Diagnoseereignis mit seiner .diagnostics Datei, ähnlich wie .pqout.

Beispiel 5: Abonnieren des ODBC-Diagnosekanals (Open Database Connectivity), um das Query Folding zu überprüfen

Das folgende Beispiel zeigt, wie Sie den ODBC-Kanal abonnieren, der den gesamten vom ODBC-Treiber generierte SQL-Code erfasst, wenn Query Folding verwendet wird.

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

Der ODBC-Diagnosekanal kann verwendet werden, um zu überprüfen, ob eine Abfrage gefaltet wird und dass sie das richtige SQL generiert.

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

Die Abfrage wird nun gefaltet und generiert den folgenden ODBC-Befehlstext in der .diagnostics Datei:

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

Verwenden einer Einstellungsdatei

Jeder Befehlszeileneingabeparameter für den Vergleichsbefehl kann auch über eine JSON-Einstellungsdatei übergeben werden. Der JSON-Code kann die folgenden Optionen haben:

Option Typ BESCHREIBUNG
ExtensionPaths Array Array von Pfaden, die auf die Connectordatei verweisen (mez/pqx).
FailOnMissingOutputFile Boolesch Die Vergleichsfunktion generiert keine .pqout-Datei und schlägt fehl, wenn diese nicht existiert.
FailOnFoldingFailure Boolesch Der Vergleich schlägt fehl, wenn ein Query Folding-Fehler ausgelöst wird.
ParameterQueryFilePath Schnur Abfragedatei, die M-Ausdrücke enthält, die zur Laufzeit mit der Testabfragedatei kombiniert werden. Ein gängiger Anwendungsfall besteht darin, eine einzelne Parameterabfragedatei zum Angeben eines M-Ausdrucks zum Abrufen der Daten für mehrere Testabfragen zu verwenden.
QueryFilePath Schnur Abfragedatei, die M-Ausdruck (.pq) enthält, der getestet werden soll.
TrxReportPath Schnur Generiert eine TRX (Visual Studio Test Results File) Ergebnisdatei und separate JSON-Dateien für jeden Test in einem bestimmten Pfad.
DiagnosticChannels Array Name der Diagnosekanäle, die an die Testausführung angehängt werden sollen (z. B. Odbc zum Erfassen von Abfragefaltungsanweisungen).

Wenn sowohl die Befehlszeileneingabe als auch die Einstellungsoption bereitgestellt werden, wird die Befehlszeileneingabe priorisiert.

Beispiel 6: Verwenden der Einstellungsdatei anstelle von Befehlszeilenargumenten

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

Der Befehl entspricht dem folgenden Befehl:

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

Dabei ist settings.json die folgende JSON-Datei:

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

Testen von Batterien mit Vergleichsbefehl

Eine Testbatterie ist eine Sammlung von Tests, die mehrere Aspekte Ihres Codes auswerten. Platzieren Sie die Abfragedateien im selben Ordner, damit PQTest sie problemlos finden kann. Geben Sie anstelle eines bestimmten Testdateinamens den Ordnerpfad an, und PQTest führt alle .query.pq-Testabfragedateien in einem einzigen Durchgang aus.

Beispiel 7 : Ausführen einer Batterie von Tests

Angenommen, ein Ordner mit dem Namen "Test", der die folgenden Dateien enthält:

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

Die gesamte Testbatterie kann über die folgende Kommandozeile ausgeführt werden.

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

Ignorieren von Tests beim Ausführen einer Reihe von Tests

Ein Test kann ausgelassen werden, wenn eine Reihe von Tests durchgeführt wird, indem die Dateierweiterung der Datei .query.pq in .query.pq.ignore geändert wird.

Beispiel 8 – Ignorieren eines Tests beim Ausführen einer Testbatterie

Angenommen, ein Ordner mit dem Namen "Test", der die folgenden Dateien enthält:

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

Die Dateien "contoso.testa.query.pq" und "contoso.testc.query.pq" werden ausgeführt, aber "contoso.testb.query.pq.ignore" wird ignoriert, wenn der folgende Befehl ausgeführt wird, um die Testbatterie auszuführen.

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