Regressionstest med kommandoen sammenlign

Kommandoen PQTest sammenlign er et effektivt værktøj til regressionstest, så du kan evaluere connectorens funktioner og generering af kommandotekst grundigt. For at illustrere dens alsidighed giver de følgende afsnit forskellige eksempler tilpasset forskellige scenarier.

Vigtigt!

Kommandoen run-compare erstatter compare kommandoen. Brug run-compe-kommandoen til fremtidig regressionstest af Power Query-forbindelserne.

Grundlæggende forespørgsler

Den simpleste form for test er at tilføje et enkelt forespørgselsudtryk til en .query.pq fil, som du kan udføre med comply-kommandoen . PQTest evaluerer udtrykket og genererer en .pqout (output)fil med samme navn. For eventuelle efterfølgende kørsler sammenligner den outputtet genereret fra evalueringen af .query.pq filen med .pqout (output)filen med samme navn og returnerer outputtet af evalueringen.

Eksempel 1 – Kører kommandoen Sammenlign for en forespørgselsfil, når der ikke findes en outputfil

Følgende eksempel udfører en enkelt forespørgselstestfil .query.pq ved brug af den angivne Power Query-udvidelse og genererer outputfilen til sammenligning.

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

Eksempel 2 – Kører kommandoen Sammenlign for en forespørgselsfil, når der ikke findes en outputfil, og flaget FailOnMissingOutputFile er angivet

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

Eksempel 3 – Kører kommandoen sammenlign for en forespørgselsfil med en outputfil, der findes

Følgende eksempel udfører en enkelt forespørgselstestfil ved hjælp af det angivne Power Query-filtypenavn, sammenligner den med outputfilen og returnerer resultatet.

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

Test med parameterforespørgsel

Parameterforespørgsel er en forespørgsel, der kombineres med en testforespørgsel på kørselstidspunktet, hvor parameterforespørgslen kører først. Med denne funktionalitet kan du opdele PQ-/testforespørgselsfilen i to dele: parameterforespørgselsfilen og testforespørgselsfilen.

Test af agnostisk datakilde med parameter- og testforespørgselsformat

Et eksempel på en use case, hvor denne funktionalitet ville være nyttig, er at oprette en agnostisk testpakke til datakilder. Du kan bruge din parameterforespørgsel til at hente data fra datakilden og lade testforespørgslen være generisk M. Hvis du vil køre testene for en anden connector, behøver du kun at tilføje/opdatere parameterforespørgslen, så den peger på den specifikke datakilde.

En vigtig forskel ved brug af en parameterforespørgsel er, at testforespørgslen følger et andet format. I stedet for at være et formeludtryk skal det være en M-funktion, der tager én inputparameter, som repræsenterer den tabel, der returneres fra parameterforespørgslen.

Lad os sige, at du har følgende testforespørgsel:

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

Hvis du vil konvertere den til en test- og parameterforespørgsel, skal du opdele dem på følgende måde:

Parameterforespørgsel:

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

Testforespørgsel:

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

Eksempel 4 – Brug af både parameterforespørgsel og testforespørgsel med kommandoen sammenlign

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

Sammenligning af diagnosticering

Ekstra diagnosticeringsoplysninger kan evalueres, når du bruger kommandoen sammenlign ved at abonnere på en diagnosticeringskanal. Når sammenlign-kommandoen køres, udleverer PQTest en .diagnostics fil for hver abonneret kanal, der havde en hændelse. For efterfølgende kørsler sammenligner den diagnostiske hændelse med sin .diagnostics fil, ligesom .pqout.

Eksempel 5 – Abonnement på ODBC-diagnosticeringskanalen (Open Database Connectivity) for at validere forespørgselsdelegering

I følgende eksempel kan du se, hvordan du abonnerer på ODBC-kanalen, som registrerer sql, der genereres af ODBC-driveren, når forespørgselsdelegering bruges.

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

ODBC-diagnosticeringskanalen kan bruges til at bekræfte, at en forespørgsel foldes, og at den genererer den korrekte 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

Forespørgslen foldes nu og genererer følgende ODBC-kommandotekst i filen .diagnostics :

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

Brug af en indstillingsfil

Alle kommandolinjeinputparametre for kommandoen sammenlign kan også overføres via en JSON-indstillingsfil. JSON kan have følgende indstillinger:

Mulighed Type Beskrivelse
ExtensionPaths matrix Matrix af stier, der peger på connectorfilen (mez/pqx).
FailOnMissingOutputFile Bool Compare genererer ikke en .pqout fil og fejler, hvis den ikke eksisterer.
FailOnFoldingFailure Bool Sammenligningen mislykkes, hvis der udløses en fejl ved forespørgselsdelegering.
ParameterQueryFilePath streng Forespørgselsfil, der indeholder M-udtryk, som kombineres på kørselstidspunktet med testforespørgselsfilen. En almindelig use case er at have en enkelt parameterforespørgselsfil til at angive et M-udtryk for at hente dataene for flere testforespørgsler.
QueryFilePath streng Forespørgselsfil, der indeholder M-udtryk (.pq) der skal testes.
TrxReportPath streng Genererer en TRX (Visual Studio Test Results File) resultatfil og separate JSON-filer for hver test i en given sti.
Diagnosticeringskanaler matrix Navn på diagnostiske kanaler, der skal tilknyttes testkørslen (for eksempel Odbc til at fange query folding-sætninger).

Hvis der angives både kommandolinjeinput og indstillinger, prioriteres kommandolinjeinputtet.

Eksempel 6 – Brug af indstillingsfilen i stedet for kommandolinjeargumenter

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

Kommandoen svarer til følgende kommando:

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

Hvor settings.json er følgende JSON-fil:

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

Test batterier med kommandoen Sammenlign

Et testbatteri er en samling test, der evaluerer flere aspekter af din kode. Placer forespørgselsfilerne i den samme mappe, så PQTest nemt kan finde dem. I stedet for at overføre et bestemt testfilnavn skal du angive mappestien, og PQTest udfører alle .query.pq-testforespørgselsfilerne i et enkelt gennemløb.

Eksempel 7 – Kørsel af et batteri af test

Hvis der antages en mappe med navnet test, der indeholder følgende filer:

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

Hele testbatteriet kan køres på følgende kommandolinje:

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

Ignorerer test, når du kører et batteri af test

En test kan ignoreres, når du kører et batteri af test, ved at ændre filtypenavnet for .query.pq-filen til .query.pq.ignore.

Eksempel 8 – Ignorerer en test, når der køres et batteri af test

Hvis der antages en mappe med navnet test, der indeholder følgende filer:

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

Filerne contoso.testa.query.pq og contoso.testc.query.pq køres, men contoso.testb.query.pq.ignore ignoreres, når følgende kommando udføres for at køre testbatteriet:

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