Freigeben über


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. Zur Veranschaulichung ihrer Vielseitigkeit bieten die nachfolgenden Abschnitte eine Vielzahl von Beispielen, die auf verschiedene Szenarien zugeschnitten sind.

Grundlegende Abfragen

Die einfachste Form von Tests besteht darin, einer .query.pq-Datei einen einzelnen Abfrageausdruck hinzuzufügen, den Sie mit dem Befehl "Vergleichen " ausführen können. PQTest wertet den Ausdruck aus und generiert eine PQout-Datei (Ausgabedatei) 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 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. Die Parameterabfrage kann zum Abrufen von Daten aus der Datenquelle verwendet werden und die Testabfrage generisch M sein. 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 DIAGNOSE-Datei für jeden abonnierten Kanal aus, der ein Ereignis hatte. Bei nachfolgenden Ausführungen wird das Diagnoseereignis mit der „.diagnostics“-Datei verglichen, ä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 DIAGNOSE-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 Vergleich generiert keine PQOut-Datei und schlägt fehl, wenn sie nicht vorhanden ist.
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-Ergebnisdatei (Visual Studio Test Results File) und separate JSON-Dateien für jeden Test in einem bestimmten Pfad.
DiagnosticChannels Array Name der Diagnosekanäle, die an die Testausführung angefügt werden sollen (z. B. ODBC zum Erfassen von Query Folding-Anweisungen).

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 obige 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