Regressiotestaus run-compare -komennolla

PQTestin run-compare -komento on tehokas työkalu regressiotestaukseen, jonka avulla voit arvioida liittimen toimintoja ja komentotekstin generointia. Monipuolisuuden havainnollistamiseksi seuraavat osiot tarjoavat erilaisia esimerkkejä, jotka on räätälöity eri tilanteisiin.

Note

Run-compare -komento korvaa edellisen vertailukomennon.

Testisyötemuodot

Run-compare -komento tukee kahta testisyötemuotoa:

  • Lausekemuoto: Yksittäinen M-lauseke (esimerkiksi let lauseke tai funktiokutsu). Tämä muoto on yksinkertaisin ja sopii useimpiin testitilanteisiin.
  • Osiodokumentin muoto: M-osaston asiakirja , jossa on yksi tai useampi osaston jäsen. Tämä muoto on hyödyllinen testeissä, jotka vaativat apufunktioita, jaettuja arvoja tai monimutkaisempia asetelmia.

Kun testitiedosto käyttää lausekemuotoa, PQTest muuntaa sen automaattisesti osiodokumentiksi sisäisesti ennen arviointia. Voit myös kirjoittaa testisyötteen suoraan osiodokumentiksi.

Esimerkki lausekemuotoista

let
    Source = Contoso.Contents("TestEndpoint"),
    Result = Table.RowCount(Source)
in
    Result

Osioasiakirjan muotoesimerkki

section Test;

shared Helper = (x) => x + 1;
shared Query = let
    Source = Contoso.Contents("TestEndpoint"),
    Result = Helper(Table.RowCount(Source))
in
    Result;

Kun parametrikysely annetaan, se lisätään osio-asiakirjaan osion jäsenenä. Parametrikysely arvioidaan osana samaa osiota, jolloin testikysely voi viitata siihen suoraan.

Peruskyselyt

Yksinkertaisin testaustapa on lisätä tiedostoon yksittäinen kyselylauseke .query.pq , jonka voi suorittaa run-compare -komennolla. PQTest arvioi lausekkeen ja tuottaa .pqout (tulostus)tiedoston samalla nimellä. Seuraavilla ajoilla se vertaa tiedoston arvioinnista .query.pq tuotettua tulosta samannimiseen .pqout (output)-tiedostoon ja palauttaa arvioinnin tuloksen.

Esimerkki 1 – Run-compare -komennon suorittaminen kyselytiedostolle, kun tulostiedostoa ei ole olemassa

Seuraava esimerkki suorittaa yksittäisen kyselytestitiedoston käyttäen määritettyä Power Query -laajennusta ja luo tulostetiedoston vertailtavaksi.

<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"
  }
]

Esimerkki 2 – Run-compare -komennon suorittaminen kyselytiedostolle, kun tulostiedostoa ei ole ja FailOnMissingOutputFile-lippu on asetettu

<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"
  }
]

Esimerkki 3 - Run-compare -komennon suorittaminen kyselytiedostolle, jossa on tulostiedosto

Seuraava esimerkki suorittaa yksittäisen kyselytestitiedoston käyttäen määritettyä Power Query -laajennusta, vertaa sitä tulostiedostoon ja palauttaa tuloksen.

<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"
  }
]

Testaaminen parametrikyselyllä

Parametrikysely on kysely, joka yhdistetään suorituksen aikana suoritettavaan testikyselyyn, jossa parametrikysely suoritetaan ensin. Tämä toiminto mahdollistaa ".query.pq"-tiedoston jakamisen kahteen osaan: parametrikyselytiedostoon ja testikyselytiedostoon.

Agnostinen tietolähdetestaus parametrilla ja testikyselyn muodolla

Esimerkki käyttötapauksesta, jossa tästä toiminnosta olisi hyötyä, on tietolähdeagnostisen testiohjelmiston luominen. Voit käyttää parametrikyselyäsi hakeaksesi dataa lähteestä, ja testikysely on geneerinen M. Jos haluat suorittaa testit toiselle liittimelle, sinun tarvitsee vain lisätä/päivittää parametrikysely, joka osoittaa kyseiseen tietolähteeseen.

Parametrikyselyn tärkein ero on se, että testikysely noudattaa eri muotoa. Sen sijaan, että se olisi kaavalauseke, sen on oltava M-funktio, joka ottaa yhden syöteparametrin, joka edustaa parametrikyselystä palautettua taulukkoa.

Kun parametrihaku annetaan, parametrikysely lisätään osion jäsenenä testin osiodokumentin loppuun. Testi- ja parametrisyötteet arvioidaan yhdessä yhtenä Mashup-osiodokumenttina.

Note

Jos parametrikyselytiedostossa on virheitä (esimerkiksi syntaksivirheitä tai arviointivirheitä), PQTest raportoi kuvailevan virheen, joka osoittaa parametritiedoston ongelman sen sijaan, että tuottaisi epäselvän virheen.

Oletetaan, että sinulla on seuraava testikysely:

let
    Source = Snowflake.Databases("...", "..."),
    Database = Source{[Name="...",Kind="Database"]}[Data],
    SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
    SelectColumns

Jos haluat muuntaa sen testi- ja parametrikyselyksi, sinun on jaettava ne seuraavasti:

Parametrikysely:

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

Testaa kyselyä:

(Source) => let
    SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
    SelectColumns

Esimerkki 4 – Sekä parametrikyselyn että testikyselyn käyttäminen run-vertaus-komennolla

<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"
  }
]

Diagnostiikan vertailu

Lisädiagnostiikkatietoja voidaan arvioida run-compare -komentoa käyttäessä tilaamalla diagnostiikkakanavan. Kun run-compare -komento suoritetaan, PQTest lähettää .diagnostics tiedoston jokaiselle tilatulle kanavalle, jolla on tapahtuma. Seuraavilla suorituksilla se vertaa diagnostiikkatapahtumaa tiedostoonsa .diagnostics , kuten .pqout.

Esimerkki 5 – DIAGNOStiikkakanavan ODBC(Open Database Connectivity) -diagnostiikkakanavan tilaaminen kyselyn delegoinnin vahvistamiseksi lähteeseen

Seuraavassa esimerkissä näytetään, miten voit tilata ODBC-kanavan, joka sieppaa ODBC-ohjaimen luoman SQL-ohjaimen, kun kyselyn delegointia lähteeseen käytetään.

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q contoso.query.pq -dc "Odbc"

ODBC-diagnostiikkakanavan avulla voidaan varmistaa, että kysely on taittuu ja että se luo oikean SQL:n.

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

Kysely taittuu nyt ja tuottaa tiedostoon seuraavan ODBC-komentotekstin .diagnostics :

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

Asetustiedoston käyttäminen

Mikä tahansa komentorivin syöteparametri run-compare -komennolle voidaan myös välittää JSON-asetustiedoston kautta. JSON-tiedostossa voi olla seuraavat asetukset:

Vaihtoehto Tyyppi Kuvaus
ExtensionPaths matriisi Matriisi poluista, jotka osoittavat liitintiedostoon (mez/pqx).
FailOnMissingOutputFile bool Run-compare ei tuota PQOut-tiedostoa ja epäonnistuu, jos sitä ei ole olemassa.
FailOnFoldingFailure bool Run-compare epäonnistuu, jos kysely ei täysin foldoi. Kun se on käytössä, kyselyt, joita ei voi täysin taittaa tietolähteeseen, aiheuttavat virheen sen sijaan, että palaisivat paikalliseen arviointiin.
ParameterQueryFilePath merkkijono M-lausekkeita sisältävä kyselytiedosto, joka yhdistetään suorituksen aikana testikyselytiedostoon. Yleinen käyttötapaus on, että käytössä on yksittäinen parametrikyselytiedosto, jolla määritetään M-lauseke useiden testikyselyiden tietojen noutamista varten.
QueryFilePath merkkijono Kyselytiedosto, joka sisältää M-lausekkeen (.pq) testattavaksi.
TrxReportPath merkkijono Luo (Visual Studio Test Results File) TRX tulostiedoston ja erilliset JSON-tiedostot jokaiselle testille tietyllä polulla.
Diagnostiset kanavat matriisi Diagnostiikkakanavien nimet, jotka liitetään testiajoon (esimerkiksi Odbc kyselyn taittolauseiden tallentamiseen).
IntermediateTestResultsFolder merkkijono Mukautettu kansiopolku välitestitulosten tallentamiseen.
PersistIntermediateTestResults bool Säilyttää välivaiheen testitulokset testin suorituksen jälkeen.

Jos käytössä on sekä komentorivin syöte- että asetusasetus, komentorivin syöte priorisoidaan.

Esimerkki 6 – Asetustiedoston käyttäminen komentoriviargumenttien sijaan

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q contoso.query.pq -fomof

Komento vastaa seuraavaa komentoa:

<Path to PQTest.exe>.\PQTest.exe run-compare -sf settings.json

Tässä settings.json on seuraava JSON-tiedosto:

{
  "ExtensionPaths": ["contoso.mez"],
  "QueryFilePath": "contoso.query.pq",
  "FailOnMissingOutputFile": true
}

Testaa akkuja run-compare -komennolla

Testiakku on kokoelma testejä, joissa arvioidaan koodin eri ominaisuuksia. Sijoita kyselytiedostot samaan kansioon, jotta PQTest voi helposti paikantaa ne. Määritä tietyn testitiedostonimen välittämisen sijaan kansiopolku, ja PQTest suorittaa kaikki .query.pq-testikyselytiedostot yksittäisessä läpäisyssä.

Esimerkki 7 - Testiakun suorittaminen

Oletetaan, että kansio nimeltä testi sisältää seuraavat tiedostot:

  • contoso.testa.query.pq
  • contoso.testb.query.pq
  • contoso.testc.query.pq

Koko testiakku voidaan suorittaa seuraavalla komentorivillä:

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test

Testien ohittaminen testejä suoritettaessa

Testi voidaan ohittaa testejä suoritettaessa muuttamalla .query.pq-tiedoston laajennukseksi .query.pq.ignore.

Esimerkki 8 – Testin ohittaminen testejä suoritettaessa

Oletetaan, että kansio nimeltä testi sisältää seuraavat tiedostot:

  • contoso.testa.query.pq
  • contoso.testb.query.pq.ignore
  • contoso.testc.query.pq

Contoso.testa.query.pq- ja contoso.testc.query.pq-tiedostot suoritetaan, mutta contoso.testb.query.pq.ignore ohitetaan, kun testiakun suorittamiseksi suoritetaan seuraava komento:

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test

Suodatustestit

Vaihtoehto --testFilter mahdollistaa testitiedostojen valikoivan sisällyttämisen tai poissulkemisen, kun testiparistot ovat käytössä. Tämä vaihtoehto käyttää glob-kuvioita tiedostopolkujen sovittamiseen ja sitä voidaan määrittää useita kertoja monimutkaisten suodatussääntöjen luomiseksi.

Sisällytyssuodattimet

Määritä, mitkä tiedostot sisällytetään testiajoon, käyttäen tavallisia glob-kuvioita.

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "Suite1/**/*.pq"

Poissulkemissuodattimet

Määritä, mitkä tiedostot suljetaan pois testisuorituksesta käyttämällä etuliitettä ! poissulkemiskuvioiden ilmaisemiseksi.

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "!BrokenTests/*"

Useat suodattimet

Useita --testFilter vaihtoehtoja voidaan yhdistää monimutkaisen suodatuslogiikan luomiseksi:

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "**/*.pq" --testFilter "!BrokenTests/*" --testFilter "!**/*donotrun*.pq"

Suodattimen käyttäytyminen

  • Implisiittinen sisällyttäminen: Kun inkluusiosuodattimia ei ole määritelty, **/*.query.pq se otetaan automaattisesti käyttöön.
  • Kirjainkoon liittyvä tunteeton: Kaikki kuviot vastaavat kirjainkoon epäsensitiivisesti.
  • Järjestyksestä riippumaton: Suodattimien järjestys ei vaikuta tulokseen.
  • Polun muoto: Käytä eteenpäin suuntaviivoja (/) kuvioissa eri alustojen yhteensopivuuden takaamiseksi.

Glob-kuvion esimerkkejä

Malli Kuvaus
**/*.pq Kaikki .pq tiedostot missä tahansa hakemistossa
**/*.query.pq Kaikki .query.pq tiedostot missä tahansa hakemistossa
Suite1/**/*.pq Kaikki .pq tiedostot Suite1-hakemistossa
**/test*.pq Kaikki .pq tiedostot, jotka alkavat "testi"-kirjaimella
!BrokenTests/* Poista kaikki tiedostot BrokenTests-hakemistosta
!**/*temp*.pq Sulje pois kaikki .pq tiedostot, jotka sisältävät "temp"-tiedostot
SpecificTest.pq Sisällytä vain kyseinen tiedosto

Note

Suodattimet koskevat relatiivista polkua määritetystä kyselyhakemistosta. Virhe palautetaan, jos suodattimia on saatavilla ja kyselytiedoston polku osoittaa tiettyyn tiedostoon eikä kansioon. Käytä lainausmerkkejä kuvioiden ympärillä estääksesi kuoren laajenemisen.

Testitiedostojen listaaminen ilman suoritusta

Vaihtoehto --listOnly antaa sinun esikatsella, mitkä testitiedostot suoritettaisiin run-compare -komennolla ilman, että testit ajetaan varsinaisesti. Tämä vaihtoehto on hyödyllinen testien löytämisen ja suodattimen käyttäytymisen varmistamiseen.

Esimerkki 9 - Testitiedostojen listaaminen

<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"
        }
    ]
}

Tuloste sisältää seuraavat kentät:

  • SourcePath: QueryFilePath-arvo, joka annettiin komennolle (vaihtoehdosta -q ).
  • TestFilters: Lista kaikista TestFilter-arvoista, jotka on käytetty (vaihtoehdoista --testFilter ).
  • Testit: Testitiedostoobjektien taulukko, jossa kukin olio sisältää:
    • Testi: Testitiedoston tiedostonimi.
    • RelativePath: Polku suhteessa perustestihakemistoon, joka on määritelty .-q
    • AbsolutePath: Täydellinen absoluuttinen polku testitiedostoon.

Yhdistäminen testisuodattimiin

Vaihtoehto --listOnly kunnioittaa kaikkia --testFilter vaihtoehtoja, jolloin voit esikatsella suodattimiesi vaikutusta:

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test --testFilter "Suite1/**/*.pq" --listOnly

Note

Kaikki testisuodattimet otetaan käyttöön ennen listautumista. Varsinaista testisuoritusta ei tapahdu käytettäessä --listOnly.

Välikokeiden tulosten hallinta

Run-compare -komento tuottaa välitiedostoja testin suorituksen aikana, mukaan lukien varsinaiset testitulostiedostot (.pqout) ja diagnostiikkatiedostot (.diagnostics). Oletuksena nämä tiedostot luodaan väliaikaiseen sijaintiin, jossa on päivämääräpohjainen alikansiorakenne, ja ne siivotaan automaattisesti testiajon päätyttyä.

Voit hallita tätä käyttäytymistä kahdella vaihtoehdolla:

  • --intermediateTestResultsFolder | -itrf: Määrittää mukautetun kansiopolun välitestitulosten tallentamiseen.
  • --persistIntermediateTestResults | -pitr: Säilyttää välitulokset testin suorituksen jälkeen.

Esimerkki 10 – Mukautetun välikansion käyttö ja pysyvien tulosten käyttö

<Path to PQTest.exe>.\PQTest.exe run-compare -e contoso.mez -q .\test -itrf "C:\TestResults" -pitr

Välikansiorakenne

Kun määrität välivaiheen testituloskansion, PQTest luo päivämääräperusteisen alikansiorakenteen testitulosten järjestämistä varten:

<IntermediateTestResultsFolder>\
  └── YYYYMMDD_HHmmss_ffffff\
      ├── Test1.query.pqout
      ├── Test2.query.pqout
      ├── Test3.query.odbc.diagnostics
      └── ...

Siivouskäyttäytyminen

Puhdistuskäyttäytyminen riippuu siitä, määritätkö välikansion ja käytätkö persist-lippua:

Esimerkkitilanne Välikansio määritelty Persist Flag Toimintatapa
1 Ei Ei Väliaikaisessa sijainnissa luodut tiedostot, päivämääräpohjainen alikansio poistettu testien jälkeen
2 Kyllä Ei Tiedostot, jotka on luotu tietyssä kansiossa, päivämääräpohjainen alikansio poistetaan testien jälkeen
3 Ei Kyllä Väliaikaisessa sijainnissa luodut tiedostot, päivämääräpohjainen alikansio poistettu testien jälkeen
4 Kyllä Kyllä Tiedostot, jotka on luotu tietyssä kansiossa, säilytetään päivämääräpohjainen alikansio

Note

Jotta välitulokset pysyvät, sinun täytyy määrittää sekä --intermediateTestResultsFolder että --persistIntermediateTestResults. Pelkkä lippu --persistIntermediateTestResults ilman kansion määrittelyä ei säilytä tuloksia. Jos määriteltyä välikansiota ei ole, PQTest yrittää luoda sen. Suhteelliset polut ovat tuettuja ja ratkaistuja suhteessa nykyiseen työhakemistoon.