Test di regressione con il comando di confronto
Il comando PQTest compare è uno strumento potente per i test di regressione, consentendo di valutare accuratamente le funzioni del connettore e la generazione del testo del comando. Per illustrare la sua versatilità, le sezioni successive forniranno un'ampia gamma di esempi su misura per diversi scenari.
Query di base
La forma più semplice di test consiste nell'aggiungere una singola espressione di query a un file con estensione query.pq, che è possibile eseguire usando il comando compare. PQTest valuta l'espressione e genera un file con estensione pqout (output) con lo stesso nome. Per le esecuzioni successive, confronta l'output generato dalla valutazione del file .query.pq con il file pqout (output) con lo stesso nome e restituisce l'output della valutazione.
Esempio 1 - Esecuzione del comando compare per un file di query quando un file di output non esiste
L'esempio seguente esegue un singolo file di test di query usando l'estensione di Power Query specificata e genera il file di output da confrontare.
<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"
}
]
Esempio 2- Esecuzione del comando compare per un file di query quando un file di output non esiste e viene impostato il flag FailOnMissingOutputFile
<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"
}
]
Esempio 3 - Esecuzione del comando compare per un file di query con un file di output presente
L'esempio seguente esegue un singolo file di test di query usando l'estensione di Power Query specificata, lo confronta con il file di output e restituisce il risultato.
<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 con query sui parametri
La query sui parametri è una query combinata con una query di test in fase di esecuzione, con la query del parametro in esecuzione per prima. Questa funzionalità consente di suddividere il file di query PQ/test in due parti: il file di query dei parametri e il file di query di test.
Test dell'origine dati indipendente con parametro e formato di query di test
Un esempio di caso d'uso in cui questa funzionalità sarebbe utile consiste nel creare un gruppo di test indipendente dall'origine dati. È possibile usare la query dei parametri per recuperare i dati dall'origine dati e fare in modo che la query di test sia generica M. Se si desidera eseguire i test per un altro connettore, è sufficiente aggiungere/aggiornare la query del parametro in modo che punti a tale origine dati specifica.
Una differenza fondamentale quando si usa una query di parametri è che la query di test segue un formato diverso. Anziché essere un'espressione di formula, deve essere una funzione M che accetta un parametro di input, che rappresenta la tabella restituita dalla query del parametro.
Si supponga di avere la query di test seguente:
let
Source = Snowflake.Databases("...", "..."),
Database = Source{[Name="...",Kind="Database"]}[Data],
SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
SelectColumns
Per convertirlo in una query di test e di parametri, è necessario suddividerli nel modo seguente:
Query parametro:
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
Query di test:
(Source) => let
SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
SelectColumns
Esempio 4- Uso di query di parametri e query di test con il comando compare
<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"
}
]
Confronto tra diagnostica
È possibile valutare informazioni di diagnostica aggiuntive quando si usa il comando di confronto sottoscrivendo un canale di diagnostica. Quando viene eseguito il comando compare , PQTest restituisce un file con estensione diagnostics per ogni canale sottoscritto che ha avuto un evento. Per tutte le esecuzioni successive, confronta l'evento di diagnostica con il relativo file con estensione diagnostics, simile a pqout.
Esempio 5 : sottoscrizione al canale di diagnostica ODBC (Open Database Connessione ivity) per convalidare la riduzione delle query
Nell'esempio seguente viene illustrato come sottoscrivere il canale ODBC, che acquisisce qualsiasi SQL generato dal driver ODBC quando viene usata la riduzione delle query.
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -dc "Odbc"
Il canale di diagnostica ODBC può essere usato per verificare che una query sia piegata e che generi il codice SQL corretto.
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
La query ora si riduce e genera il testo del comando ODBC seguente nel file con estensione diagnostics:
[
{
"Command": "DESCRIBE default.DATABASE;"
},
{
"Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
}
]
Uso di un file di impostazioni
Qualsiasi parametro di input della riga di comando per il comando compare può anche essere passato tramite un file di impostazioni JSON. Il codice JSON può avere le opzioni seguenti:
Opzione | Tipo | Descrizione |
---|---|---|
ExtensionPaths | array | Matrice di percorsi che puntano al file del connettore (mez/pqx). |
FailOnMissingOutputFile | bool | Il confronto non genera un file PQOut e non riesce se non esiste. |
FailOnFoldingFailure | bool | Il confronto ha esito negativo se viene generato un errore di riduzione della query. |
ParameterQueryFilePath | string | File di query che contiene espressioni M, combinate in fase di esecuzione con il file di query di test. Un caso d'uso comune consiste nell'avere un singolo file di query di parametri per specificare un'espressione M per recuperare i dati per più query di test. |
QueryFilePath | string | File di query contenente l'espressione M (con estensione pq) da testare. |
TrxReportPath | string | Genera un file di risultati TRX (Visual Studio Test Results File) e file JSON separati per ogni test in un determinato percorso. |
DiagnosticChannels | array | Nome dei canali di diagnostica da collegare all'esecuzione del test, ad esempio Odbc per l'acquisizione di istruzioni di riduzione delle query. |
Nel caso in cui siano disponibili sia l'opzione input della riga di comando che l'opzione delle impostazioni, l'input della riga di comando è prioritario.
Esempio 6 - Uso del file delle impostazioni anziché degli argomenti della riga di comando
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof
Il comando precedente equivale al comando seguente:
<Path to PQTest.exe>.\PQTest.exe compare -sf settings.json
Dove settings.json è il file JSON seguente:
{
"ExtensionPaths": ["contoso.mez"],
"QueryFilePath": "contoso.query.pq",
"FailOnMissingOutputFile": true
}
Testare le batterie con il comando compare
Una batteria di test è una raccolta di test che valutano più aspetti del codice. Posizionare i file di query nella stessa cartella in modo che PQTest possa individuarli facilmente. Anziché passare un nome file di test specifico, specificare il percorso della cartella e PQTest esegue tutti i file di query di test .query.pq in un singolo passaggio.
Esempio 7 - Esecuzione di una batteria di test
Supponendo che una cartella denominata test contenga i file seguenti:
- contoso.testa.query.pq
- contoso.testb.query.pq
- contoso.testc.query.pq
L'intera batteria di test può essere eseguita usando la riga di comando seguente:
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q .\test
Ignorare i test durante l'esecuzione di una batteria di test
Un test può essere ignorato quando si esegue una batteria di test modificando l'estensione del file .query.pq in .query.pq.ignore.
Esempio 8 - Ignorare un test durante l'esecuzione di una batteria di test
Supponendo che una cartella denominata test contenga i file seguenti:
- contoso.testa.query.pq
- contoso.testb.query.pq.ignore
- contoso.testc.query.pq
I file contoso.testa.query.pq e contoso.testc.query.pq vengono eseguiti, ma contoso.testb.query.pq.ignore viene ignorato quando viene eseguito il comando seguente per eseguire la batteria di test:
<Path to PQTest.exe>.\PQTest.exepqtest.exe compare -e contoso.mez -q .\test