Del via


Regressionstest med kommandoen sammenlign

Kommandoen PQTest compare er et effektivt værktøj til regressionstest, så du kan evaluere connectorens funktioner og genereringen af kommandotekst grundigt. For at illustrere dens alsidighed vil de efterfølgende afsnit indeholde en række eksempler, der er skræddersyet til forskellige scenarier.

Grundlæggende forespørgsler

Den nemmeste form for test er at føje et enkelt forespørgselsudtryk til en .query.pq-fil, som du kan udføre ved hjælp af kommandoen sammenlign. PQTest evaluerer udtrykket og genererer en .pqout-fil (output) med samme navn. I forbindelse med efterfølgende kørsler sammenlignes outputtet, der genereres fra evalueringen af .query.pq-filen, med pqout-filen (output) med det samme navn og returnerer resultatet 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 ved hjælp af det angivne Power Query-filtypenavn og genererer outputfil, der skal sammenlignes.

<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 parameterforespørgslen til at hente data fra datakilden og få testforespørgslen til at være generisk M. Hvis du vil køre testene for en anden connector, skal du kun tilføje/opdatere parameterforespørgslen for at pege på den pågældende 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 kommandoen sammenlign køres, opretter PQTest en .diagnosticeringsfil for hver kanal, der abonneres på, og som havde en hændelse. I forbindelse med efterfølgende kørsler sammenlignes diagnosticeringshændelsen med .diagnosticeringsfilen på samme måde som .pqout.

Eksempel 5 – Abonnement på ODBC-diagnosticeringskanalen (Open Database Forbind ivity) 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 .diagnosticeringsfilen:

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

Brug af en indstillingsfil

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

Indstilling Skriv Description
ExtensionPaths matrix Matrix af stier, der peger på connectorfilen (mez/pqx).
FailOnMissingOutputFile bool Sammenligningen genererer ikke en PQOut-fil og mislykkes, hvis den ikke findes.
FailOnFoldingFailure bool Sammenligningen mislykkes, hvis der udløses en fejl ved forespørgselsdelegering.
ParameterQueryFilePath string 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 string Forespørgselsfil, der indeholder M-udtryk (.pq), der skal testes.
TrxReportPath string Genererer en TRX-resultatfil (Visual Studio Test Results File) og separate JSON-filer for hver test i en given sti.
Diagnosticeringskanaler matrix Navnet på de diagnosticeringskanaler, der skal knyttes til testkørslen (f.eks. Odbc til hentning af forespørgselsdelegeringssæ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

Ovenstående kommando 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