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