Regressionstestning med jämförelsekommandot
Kommandot PQTest compare är ett kraftfullt verktyg för regressionstestning, så att du kan utvärdera funktionerna i anslutningsappen och genereringen av kommandotexten. För att illustrera dess mångsidighet ger de efterföljande avsnitten en mängd olika exempel som är skräddarsydda för olika scenarier.
Grundläggande frågor
Den enklaste formen av testning är att lägga till ett enda frågeuttryck i en .query.pq-fil, som du kan köra med hjälp av jämförelsekommandot. PQTest utvärderar uttrycket och genererar en .pqout-fil (utdata) med samma namn. För efterföljande körningar jämförs utdata som genererats från utvärderingen av .query.pq-filen med pqout-filen (utdata) med samma namn och returnerar resultatet av utvärderingen.
Exempel 1 – Köra jämförelsekommandot för en frågefil när en utdatafil inte finns
I följande exempel körs en enskild frågetestfil med det angivna Power Query-tillägget och genererar utdatafil att jämföra.
<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"
}
]
Exempel 2 – Köra jämförelsekommandot för en frågefil när en utdatafil inte finns och flaggan FailOnMissingOutputFile har angetts
<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"
}
]
Exempel 3 – Köra jämförelsekommandot för en frågefil med en utdatafil som finns
I följande exempel körs en enskild frågetestfil med det angivna Power Query-tillägget, jämför den med utdatafilen och returnerar 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"
}
]
Testa med parameterfråga
Parameterfråga är en fråga som kombineras med en testfråga vid körning, där parameterfrågan körs först. Med den här funktionen kan du dela upp PQ/test-frågefilen i två delar: parameterfrågefilen och testfrågefilen.
Agnostisk datakällatestning med parameter- och testfrågeformat
Ett exempel på ett användningsfall där den här funktionen skulle vara användbar är att skapa en datakällas agnostiska testsvit. Du kan använda parameterfrågan för att hämta data från datakällan och låta testfrågan vara allmän M. Om du vill köra testerna för en annan anslutningsapp behöver du bara lägga till/uppdatera parameterfrågan så att den pekar på den specifika datakällan.
En viktig skillnad när du använder en parameterfråga är att testfrågan följer ett annat format. I stället för att vara ett formeluttryck måste det vara en M-funktion som tar en indataparameter som representerar tabellen som returneras från parameterfrågan.
Anta att du har följande testfråga:
let
Source = Snowflake.Databases("...", "..."),
Database = Source{[Name="...",Kind="Database"]}[Data],
SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
SelectColumns
Om du vill konvertera den till en test- och parameterfråga måste du dela upp dem på följande sätt:
Parameterfråga:
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
Testfråga:
(Source) => let
SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
SelectColumns
Exempel 4 – Använda både parameterfråga och testfråga med compare-kommandot
<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"
}
]
Jämföra diagnostik
Extra diagnostikinformation kan utvärderas när du använder jämförelsekommandot genom att prenumerera på en diagnostikkanal. När jämförelsekommandot körs matar PQTest ut en .diagnostics-fil för varje prenumererad kanal som hade en händelse. För efterföljande körningar jämför den diagnostikhändelsen med dess .diagnostics-fil, ungefär som .pqout.
Exempel 5 – Prenumerera på diagnostikkanalen ODBC (Open Database Anslut ivity) för att validera frågedelegering
I följande exempel visas hur du prenumererar på ODBC-kanalen, som samlar in alla SQL-värden som genereras av ODBC-drivrutinen när frågedelegering används.
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -dc "Odbc"
ODBC-diagnostikkanalen kan användas för att verifiera att en fråga viks och att den genererar rätt 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
Frågan viker nu och genererar följande ODBC-kommandotext i .diagnostics-filen:
[
{
"Command": "DESCRIBE default.DATABASE;"
},
{
"Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
}
]
Använda en inställningsfil
Alla indataparameter för kommandoraden för jämförelsekommandot kan också skickas via en JSON-inställningsfil. JSON kan ha följande alternativ:
Alternativ | Typ | Beskrivning |
---|---|---|
ExtensionPaths | matris | Matris med sökvägar som pekar på anslutningsfilen (mez/pqx). |
FailOnMissingOutputFile | bool | Compare genererar ingen PQOut-fil och misslyckas om den inte finns. |
FailOnFoldingFailure | bool | Jämförelse misslyckas om ett frågedelegeringsfel utlöses. |
ParameterQueryFilePath | sträng | Frågefil som innehåller M-uttryck, som kombineras vid körning med testfrågefilen. Ett vanligt användningsfall är att ha en frågefil med en enda parameter för att ange ett M-uttryck för att hämta data för flera testfrågor. |
QueryFilePath | sträng | Frågefil som innehåller M-uttryck (.pq) som ska testas. |
TrxReportPath | sträng | Genererar en TRX-resultatfil (Visual Studio Test Results File) och separata JSON-filer för varje test i en viss sökväg. |
DiagnosticChannels | matris | Namn på diagnostikkanaler som ska kopplas till testkörningen (till exempel Odbc för att samla in frågedelegeringsinstruktioner). |
Om både kommandoradsindata och inställningsalternativ tillhandahålls prioriteras kommandoradsindata.
Exempel 6 – Använda inställningsfilen i stället för kommandoradsargument
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof
Kommandot ovan motsvarar följande kommando:
<Path to PQTest.exe>.\PQTest.exe compare -sf settings.json
Där settings.json är följande JSON-fil:
{
"ExtensionPaths": ["contoso.mez"],
"QueryFilePath": "contoso.query.pq",
"FailOnMissingOutputFile": true
}
Testa batterier med kommandot compare
Ett testbatteri är en samling tester som utvärderar flera aspekter av koden. Placera frågefilerna i samma mapp så att PQTest enkelt kan hitta dem. I stället för att skicka ett specifikt testfilnamn anger du mappsökvägen och PQTest kör alla .query.pq-testfrågefiler i ett enda pass.
Exempel 7 – Köra ett batteri med tester
Anta en mapp med namnet test som innehåller följande filer:
- contoso.testa.query.pq
- contoso.testb.query.pq
- contoso.testc.query.pq
Hela testbatteriet kan köras med hjälp av följande kommandorad:
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q .\test
Ignorera tester när du kör ett batteri av tester
Ett test kan ignoreras när du kör ett batteri av tester genom att ändra tillägget för .query.pq-filen till .query.pq.ignore.
Exempel 8 – Ignorera ett test när du kör ett batteri med tester
Anta en mapp med namnet test som innehåller följande filer:
- contoso.testa.query.pq
- contoso.testb.query.pq.ignore
- contoso.testc.query.pq
Filerna contoso.testa.query.pq och contoso.testc.query.pq körs men contoso.testb.query.pq.ignore ignoreras när följande kommando körs för att köra testbatteriet:
<Path to PQTest.exe>.\PQTest.exepqtest.exe compare -e contoso.mez -q .\test