Del via


Regresjonstesting med sammenligningskommandoen

Kommandoen PQTest-sammenligning er et kraftig verktøy for regresjonstesting, slik at du kan evaluere funksjonene til koblingen grundig og generering av kommandotekst. For å illustrere allsidigheten vil de påfølgende inndelingene gi en rekke eksempler som er skreddersydd for ulike scenarier.

Grunnleggende spørringer

Den enkleste formen for testing er å legge til ett enkelt spørringsuttrykk i en .query.pq-fil, som du kan utføre ved hjelp av sammenligningskommandoen. PQTest evaluerer uttrykket og genererer en PQOUT-fil (utdata) med samme navn. For eventuelle etterfølgende kjøringer sammenligner den utdataene som genereres fra evalueringen av .query.pq-filen med utdatafilen (utdata) med samme navn, og returnerer utdataene for evalueringen.

Eksempel 1 – Kjører sammenligningskommando for en spørringsfil når en utdatafil ikke finnes

Følgende eksempel utfører en enkelt spørringstestfil ved hjelp av den angitte Power Query-filtypen og genererer utdatafil for å sammenligne.

<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 – Kommandoen Kjør sammenligning for en spørringsfil når en utdatafil ikke finnes, og FailOnMissingOutputFile-flagget er angitt

<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 – Kjører sammenligningskommando for en spørringsfil med en utdatafil som finnes

Følgende eksempel kjører en enkelt spørringstestfil ved hjelp av den angitte Power Query-filtypen, sammenligner den med utdatafilen 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"
  }
]

Testing med parameterspørring

Parameterspørring er en spørring som kombineres med en testspørring under kjøring, og parameterspørringen kjører først. Med denne funksjonaliteten kan du dele PQ/test-spørringsfilen i to deler: parameterspørringsfilen og testspørringsfilen.

Agnostisk datakildetesting med parameter- og testspørringsformat

Et eksempel på et brukstilfelle der denne funksjonaliteten vil være nyttig, er å opprette en datakildeagnostisk testserie. Du kan bruke parameterspørringen til å hente data fra datakilden, og få testspørringen til å være generisk M. Hvis du vil kjøre testene for en annen kobling, trenger du bare å legge til/ oppdatere parameterspørringen for å peke til den bestemte datakilden.

En viktig forskjell når du bruker en parameterspørring, er at testspørringen følger et annet format. I stedet for å være et formeluttrykk, må det være en M-funksjon som tar én inndataparameter, som representerer tabellen som returneres fra parameterspørringen.

La oss si at du har følgende testspørring:

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 parameterspørring, må du dele dem på følgende måte:

Parameterspørring:

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

Testspørring:

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

Eksempel 4 – Bruke både parameterspørring og testspørring med sammenligningskommando

<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 av diagnostikk

Ekstra diagnosedata kan evalueres når du bruker sammenligningskommandoen ved å abonnere på en diagnosekanal. Når sammenligningskommandoen kjøres, sender PQTest ut en DIAGNOSE-fil for hver abonnerte kanal som hadde en hendelse. For eventuelle etterfølgende kjøringer sammenligner den diagnosehendelsen med diagnosefilen, på samme måte som PQOUT.

Eksempel 5 – Abonner på diagnosekanalen ODBC (Open Database Koble til ivity) for å validere spørringsdelegering

Eksemplet nedenfor viser hvordan du abonnerer på ODBC-kanalen, som registrerer sql-en som genereres av ODBC-driveren når spørringsdelegering brukes.

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

ODBC-diagnosekanalen kan brukes til å bekrefte at en spørring brettes og at den genererer riktig 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

Spørringen brettes og genererer nå følgende ODBC-kommandotekst i DIAGNOSE-filen:

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

Bruke en innstillingsfil

Alle inndataparametere for kommandolinjen for sammenligningskommandoen kan også sendes via en JSON-innstillingsfil. JSON kan ha følgende alternativer:

Alternativ Type Bekrivelse
ExtensionPaths matrise Matrise med baner som peker til koblingsfil (mez/pqx).
FailOnMissingOutputFile boolsk Sammenligning genererer ikke en PQOut-fil og mislykkes hvis den ikke finnes.
FailOnFoldingFailure boolsk Sammenligning mislykkes hvis det oppstår en feil under spørringsdelegering.
ParameterQueryFilePath streng Spørringsfil som inneholder M-uttrykk, som kombineres ved kjøring med testspørringsfilen. Et vanlig brukstilfelle er å ha én enkelt parameterspørringsfil for å angi et M-uttrykk for å hente dataene for flere testspørringer.
QueryFilePath streng Spørringsfil som inneholder M-uttrykk (PQ) som skal testes.
TrxReportPath streng Genererer en TRX-resultatfil (Visual Studio Test Results File) og skiller JSON-filer for hver test i en gitt bane.
DiagnosticChannels matrise Navnet på diagnosekanaler som skal knyttes til testkjøringen (for eksempel Odbc for registrering av spørringsdelegeringssetninger).

I tilfelle både kommandolinjeinndata og innstillinger er angitt, prioriteres kommandolinjeinndataene.

Eksempel 6 – Bruke innstillingsfil i stedet for kommandolinjeargumenter

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

Kommandoen ovenfor tilsvarer 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 sammenligningskommando

Et testbatteri er en samling tester som evaluerer flere aspekter av koden. Plasser spørringsfilene i samme mappe, slik at PQTest enkelt kan finne dem. I stedet for å sende et bestemt testfilnavn, angir du mappebanen, og PQTest utfører alle .query.pq-testspørringsfilene i ett enkelt pass.

Eksempel 7 – Kjøre et batteri av tester

Forutsatt at en mappe med navnet test som inneholder følgende filer:

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

Hele testbatteriet kan kjøres ved hjelp av følgende kommandolinje:

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

Ignorerer tester når du kjører et batteri av tester

En test kan ignoreres når du kjører et batteri av tester ved å endre utvidelsen av .query.pq-filen til .query.pq.ignore.

Eksempel 8 – Ignorerer en test når du kjører et batteri av tester

Forutsatt at en mappe med navnet test som inneholder følgende filer:

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

Contoso.testa.query.pq- og contoso.testc.query.pq-filene kjøres, men contoso.testb.query.pq.ignore ignoreres når følgende kommando utføres for å kjøre testbatteriet:

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