Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
PQTest run-compe-kommandoen er et kraftig verktøy for regresjonstesting, som gjør det mulig å grundig evaluere funksjonene til koblingen og genereringen av kommandotekst. For å illustrere dens allsidighet gir de påfølgende seksjonene ulike eksempler tilpasset ulike scenarioer.
Note
Kommandoen run-compare erstatter den forrige comparna-kommandoen.
Testinndataformater
Kommandoen run-compare støtter to testinndataformater:
-
Uttrykksformat: Et enkelt M-uttrykk (for eksempel et
letuttrykk eller funksjonskall). Dette formatet er det enkleste formatet og egner seg for de fleste testscenarier. - Seksjonsdokumentformat: Et M-seksjonsdokument som inneholder ett eller flere seksjonselementer. Dette formatet er nyttig for tester som krever hjelpefunksjoner, delte verdier eller mer komplekse oppsett.
Når en testfil bruker uttrykksformatet, konverterer PQTest den automatisk til et seksjonsdokument internt før evaluering. Du kan også skrive testinput direkte som et seksjonsdokument.
Uttrykksformateksempel
let
Source = Contoso.Contents("TestEndpoint"),
Result = Table.RowCount(Source)
in
Result
Eksempel på seksjonsdokumentformat
section Test;
shared Helper = (x) => x + 1;
shared Query = let
Source = Contoso.Contents("TestEndpoint"),
Result = Helper(Table.RowCount(Source))
in
Result;
Når en parameterspørring er gitt, legges parameterspørringen til som et seksjonsmedlem i seksjonsdokumentet. Parameterspørringen evalueres som en del av samme seksjon, slik at testspørringen kan referere direkte til den.
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 med run-compe-kommandoen . PQTest evaluerer uttrykket og genererer en .pqout (output)fil med samme navn. For eventuelle påfølgende kjøringer sammenligner den utdataene generert fra evalueringen av .query.pq filen med .pqout (ut)filen med samme navn og returnerer utdataene fra evalueringen.
Eksempel 1 - Kjøre run-compe-kommandoen for en spørringsfil når en utdatafil ikke eksisterer
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 run-compare -e contoso.mez -q contoso.query.pq
[
{
"Details": "Contoso.Contents(\"TestEndpoint\")",
"EndTime": "2025-12-11T18:04:14.8991822+00:00",
"Method": "Compare.TestFiles",
"Name": "contoso.query.pq",
"StartTime": "2025-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 - Kjører run-compe-kommandoen for en spørringsfil når en utdatafil ikke eksisterer og FailOnMissingOutputFile-flagget er satt
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q contoso.query.pq -fomof
[
{
"Details": "Contoso.Contents(\"TestEndpoint\")",
"EndTime": "2025-12-11T18:04:14.8991822+00:00",
"Method": "Compare.TestFiles",
"Name": "contoso.query.pq",
"StartTime": "2025-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øre run-compere-kommandoen for en spørringsfil med en utdatafil til stede
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 run-compare -e contoso.mez -q contoso.query.pq
[
{
"Details": "Contoso.Contents(\"TestEndpoint\")",
"EndTime": "2025-12-11T18:04:14.8991822+00:00",
"Method": "Compare.TestFiles",
"Name": "contoso.query.pq",
"StartTime": "2025-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. Denne funksjonaliteten lar deg dele ".query.pq"-filen 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 din til å hente data fra datakilden, og ha testspørringen generisk M. Hvis du ønsker å kjøre testene for en annen connector, trenger du bare å legge til/oppdatere parameterspørringen slik at den peker på den spesifikke 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.
Når en parameterspørring er tilgjengelig, legges parameterspørringen til som et seksjonsmedlem på slutten av testens seksjonsdokument. Test- og parameterinputene evalueres deretter sammen som et enkelt mashup-seksjonsdokument.
Note
Hvis parameterspørringsfilen inneholder feil (for eksempel syntaksfeil eller evalueringsfeil), rapporterer PQTest en beskrivende feil som indikerer problemet med parameterfilen i stedet for å produsere en uklar feil.
La oss si at du har følgende testspørsmål:
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 - Bruk av både parameterspørring og testspørring med run-compe-kommandoen
<Path to PQTest.exe>.\PQTest.exe run-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": "2025-12-11T18:04:14.8991822+00:00",
"Method": "Compare.TestFiles",
"Name": "contoso.query.pq",
"StartTime": "2025-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 diagnostisk informasjon kan evalueres ved bruk av run-compe-kommandoen ved å abonnere på en diagnostisk kanal. Når kommandoen run-compare kjøres, gir PQTest ut en .diagnostics fil for hver abonnert kanal som hadde en hendelse. For påfølgende kjøringer sammenligner den diagnostiske hendelsen med sin .diagnostics fil, på samme måte som .pqout.
Eksempel 5 – Abonner på diagnosekanalen ODBC (Open Database Connectivity) 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 run-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 nå og genererer følgende ODBC-kommandotekst i filen .diagnostics :
[
{
"Command": "DESCRIBE default.DATABASE;"
},
{
"Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
}
]
Bruke en innstillingsfil
Enhver kommandolinjeparameter for run-compere-kommandoen kan også sendes via en JSON-innstillingsfil. JSON kan ha følgende alternativer:
| Alternativ | Type | Beskrivelse |
|---|---|---|
| ExtensionPaths | matrise | Matrise med baner som peker til koblingsfil (mez/pqx). |
| FailOnMissingOutputFile | bool | Run-compare genererer ikke en PQOut-fil og feiler hvis den ikke eksisterer. |
| FailOnFoldingFailure | bool | Run-compare feiler hvis en spørring ikke blir fullstendig avgjort. Når de er aktivert, gir spørringer som ikke kan foldes fullt ut til datakilden en feil i stedet for å falle tilbake til lokal evaluering. |
| 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 (Visual Studio Test Results File) resultatfil og separate JSON-filer for hver test i en gitt sti. |
| DiagnosticChannels | matrise | Navn på diagnostiske kanaler som skal knyttes til testkjøringen (for eksempel Odbc for å fange spørringsfolding-setninger). |
| IntermediateTestResultsFolder | streng | Egendefinert mappesti for lagring av mellomliggende testresultater. |
| PersisterIntermediateTestResults | bool | Beholder mellomliggende testresultater etter at testutførelsen er fullført. |
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 run-compare -e contoso.mez -q contoso.query.pq -fomof
Kommandoen tilsvarer følgende kommando:
<Path to PQTest.exe>.\PQTest.exe run-compare -sf settings.json
Hvor settings.json er følgende JSON-fil:
{
"ExtensionPaths": ["contoso.mez"],
"QueryFilePath": "contoso.query.pq",
"FailOnMissingOutputFile": true
}
Testbatterier med run-compare kommando
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 run-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.exe run-compare -e contoso.mez -q .\test
Filtreringstester
Alternativet --testFilter lar deg selektivt inkludere eller ekskludere testfiler når du kjører testbatterier. Dette alternativet bruker glob-mønstre for å matche filstier og kan spesifiseres flere ganger for å lage komplekse filtreringsregler.
Inklusjonsfiltre
Spesifiser hvilke filer som skal inkluderes i testkjøringen ved bruk av standard glob-mønstre.
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "Suite1/**/*.pq"
Eksklusjonsfiltre
Spesifiser hvilke filer som skal utelukkes fra testkjøringen ved å bruke prefikset ! for å angi eksklusjonsmønstre.
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "!BrokenTests/*"
Flere filtre
Flere --testFilter alternativer kan kombineres for å lage kompleks filtreringslogikk:
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "**/*.pq" --testFilter "!BrokenTests/*" --testFilter "!**/*donotrun*.pq"
Filteroppførsel
-
Implisitt inkludering: Når ingen inklusjonsfiltre er spesifisert,
**/*.query.pqanvendes automatisk. - Små og små bokstaver: Alle mønstre stemmer overens med små og små bokstaver.
- Rekkefølgeuavhengig: Rekkefølgen på filtrene påvirker ikke resultatet.
-
Stiformat: Bruk fremoverskråstreker (
/) i mønstre for plattformuavhengig kompatibilitet.
Eksempler på glob-mønstre
| Mønster | Beskrivelse |
|---|---|
**/*.pq |
Alle .pq filer i en hvilken som helst mappe |
**/*.query.pq |
Alle .query.pq filer i en hvilken som helst mappe |
Suite1/**/*.pq |
Alle .pq filer under Suite1-mappen |
**/test*.pq |
Alle .pq filer som begynner med "test" |
!BrokenTests/* |
Ekskluder alle filer i BrokenTests-katalogen |
!**/*temp*.pq |
Ekskluder alle .pq filer som inneholder "temp" |
SpecificTest.pq |
Inkluder kun den spesifikke filen |
Note
Filtre gjelder for den relative stien fra den angitte spørringskatalogen. En feil returneres hvis filtre er oppgitt og søkefilens sti peker til en spesifikk fil i stedet for en katalog. Bruk anførselstegn rundt mønstre for å hindre utvidelse av skallet.
Listing av testfiler uten kjøring
Alternativet --listOnly lar deg forhåndsvise hvilke testfiler som ville blitt kjørt med run-compe-kommandoen uten å faktisk kjøre testene. Dette alternativet er nyttig for å verifisere testoppdagelse og filteradferd.
Eksempel 9 - Listing av testfiler
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --listOnly
{
"SourcePath": "C:\\MyProject\\test",
"TestFilters": [],
"Tests": [
{
"Test": "MyTest.query.pq",
"RelativePath": "Suite1\\MyTest.query.pq",
"AbsolutePath": "C:\\MyProject\\test\\Suite1\\MyTest.query.pq"
},
{
"Test": "AnotherTest.query.pq",
"RelativePath": "Suite2\\AnotherTest.query.pq",
"AbsolutePath": "C:\\MyProject\\test\\Suite2\\AnotherTest.query.pq"
}
]
}
Utdataene inneholder følgende felt:
-
SourcePath: QueryFilePath-verdien som ble gitt til kommandoen (fra
-qalternativet). -
TestFilters: En liste over alle TestFilter-verdier som ble brukt (fra
--testFilteralternativer). -
Tester: Et array av testfilobjekter, hvor hvert objekt inneholder:
- Test: Filnavnet på testfilen.
-
RelativePath: Stien relativt til basistestkatalogen spesifisert av
-q. - AbsolutePath: Den fullstendige Absolute-stien til testfilen.
Kombinasjon med testfiltre
Alternativet --listOnly respekterer alle --testFilter alternativer, slik at du kan forhåndsvise effekten av filtrene dine:
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "Suite1/**/*.pq" --listOnly
Note
Alle testfiltre brukes før listing. Ingen faktisk testutførelse skjer når man bruker --listOnly.
Håndtering av mellomtestresultater
Kommandoen run-compare genererer mellomliggende filer under testkjøringen, inkludert faktiske testutdata (.pqout) og diagnostikkfiler (.diagnostics). Som standard opprettes disse filene på et midlertidig sted med en datobasert undermappestruktur og ryddes automatisk etter at testkjøringen er fullført.
Du kan kontrollere denne oppførselen ved hjelp av to alternativer:
-
--intermediateTestResultsFolder | -itrf: Spesifiserer en egendefinert mappesti for lagring av mellomliggende testresultater. -
--persistIntermediateTestResults | -pitr: Beholder mellomresultatene etter at testutførelsen er fullført.
Eksempel 10 - Bruker en egendefinert mellomliggende mappe og vedvarende resultater
<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test -itrf "C:\TestResults" -pitr
Mellomliggende mappestruktur
Når du spesifiserer en mellomliggende testresultatmappe, lager PQTest en datobasert undermappestruktur for å organisere testresultatene:
<IntermediateTestResultsFolder>\
└── YYYYMMDD_HHmmss_ffffff\
├── Test1.query.pqout
├── Test2.query.pqout
├── Test3.query.odbc.diagnostics
└── ...
Oppryddingsatferd
Oppryddingsoppførselen avhenger av om du spesifiserer en mellomliggende mappe og om du bruker persist-flagget:
| Scenario | Mellomliggende mappe spesifisert | Persist-flagget | Virkemåte |
|---|---|---|---|
| 1 | Nei | Nei | Filer opprettet på midlertidig plassering, datobasert undermappe slettet etter tester |
| 2 | Ja | Nei | Filer opprettet i spesifisert mappe, datobasert undermappe slettet etter tester |
| 3 | Nei | Ja | Filer opprettet på midlertidig plassering, datobasert undermappe slettet etter tester |
| 4 | Ja | Ja | Filer opprettet i spesifisert mappe, datobasert undermappe bevart |
Note
For å opprettholde mellomliggende resultater må du spesifisere både --intermediateTestResultsFolder og --persistIntermediateTestResults. Flagget --persistIntermediateTestResults alene uten å spesifisere en mappe gir ikke resultater. Hvis den angitte mellomliggende mappen ikke eksisterer, forsøker PQTest å opprette den. Relative stier støttes og løses i forhold til den nåværende arbeidskatalogen.