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