Test de régression avec la commande compare
La commande PQTest compare est un outil puissant pour les tests de régression, ce qui vous permet d’évaluer soigneusement les fonctions du connecteur et la génération de texte de commande. Pour illustrer sa polyvalence, les sections suivantes fournissent un large éventail d’exemples adaptés à différents scénarios.
Requêtes de base
La forme de test la plus simple consiste à ajouter une expression de requête unique à un fichier .query.pq, que vous pouvez exécuter à l’aide de la commande compare. PQTest évalue l’expression et génère un fichier .pqout (sortie) portant le même nom. Pour toutes les exécutions suivantes, elle compare la sortie générée à partir de l’évaluation du fichier .query.pq avec le fichier pqout (sortie) portant le même nom et retourne la sortie de l’évaluation.
Exemple 1 : exécution de la commande compare pour un fichier de requête lorsqu’un fichier de sortie n’existe pas
L’exemple suivant exécute un fichier de test de requête unique à l’aide de l’extension Power Query spécifiée et génère le fichier de sortie à comparer.
<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"
}
]
Exemple 2 : exécution de la commande compare pour un fichier de requête lorsqu’un fichier de sortie n’existe pas et que l’indicateur FailOnMissingOutputFile est défini
<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"
}
]
Exemple 3 : exécution de la commande compare pour un fichier de requête avec un fichier de sortie présent
L’exemple suivant exécute un fichier de test de requête unique à l’aide de l’extension Power Query spécifiée, le compare au fichier de sortie et retourne le résultat.
<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 avec la requête avec paramètres
La requête avec paramètres est une requête combinée à une requête de test au moment de l’exécution, la requête avec paramètres s’exécutant en premier. Cette fonctionnalité vous permet de diviser le fichier de requête PQ/test en deux parties : le fichier de requête avec paramètres et le fichier de requête de test.
Test de source de données indépendant avec un format de requête de paramètre et de test
Un exemple de cas d'utilisation dans lequel cette fonctionnalité serait utile consiste à créer une suite de tests indépendante de la source de données. Vous pouvez donc utiliser votre requête avec paramètres pour récupérer les données de la source de données et faire en sorte que la requête de test soit M générique. Si vous souhaitez exécuter les tests pour un autre connecteur, il vous suffit d’ajouter/mettre à jour la requête avec paramètres pour qu’elle pointe vers cette source de données spécifique.
Une différence clé lors de l’utilisation d’une requête avec paramètres est que la requête de test suit un format différent. Au lieu d’être une expression de formule, il doit s’agir d’une fonction M qui accepte un paramètre d’entrée, lequel représente la table retournée par la requête avec paramètres.
Supposons que vous ayez la requête de test suivante :
let
Source = Snowflake.Databases("...", "..."),
Database = Source{[Name="...",Kind="Database"]}[Data],
SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
SelectColumns
Pour la convertir en requête de test et requête avec paramètres, vous devez les diviser comme suit :
Requête avec paramètres :
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
Requête de test :
(Source) => let
SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
SelectColumns
Exemple 4 : utilisation de la requête avec paramètres et de la requête de test avec la commande 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"
}
]
Comparaison des diagnostics
Des informations de diagnostic supplémentaires peuvent être évaluées lors de l’utilisation de la commande compare en s’abonnant à un canal de diagnostic. Lorsque la commande compare est exécutée, PQTest génère un fichier .diagnostics pour chaque canal abonné ayant un événement. Pour toutes les exécutions suivantes, il compare l’événement de diagnostic à son fichier .diagnostics, similaire à .pqout.
Exemple 5 : abonnement au canal de diagnostic ODBC (Open Database Connectivity) pour valider le pliage des requêtes
L’exemple suivant montre comment s’abonner au canal ODBC, qui capture n’importe quel SQL généré par le pilote ODBC lors de l’utilisation du pliage de requête.
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -dc "Odbc"
Le canal de diagnostic ODBC peut être utilisé pour vérifier qu’une requête est pliée et qu’elle génère le bon code 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
La requête se replie et génère désormais le texte de commande ODBC suivant dans le fichier .diagnostics :
[
{
"Command": "DESCRIBE default.DATABASE;"
},
{
"Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
}
]
Utilisation d’un fichier de paramètres
Tout paramètre d’entrée de ligne de commande pour la commande de compare peut également être transmis via un fichier de paramètres JSON. Le JSON peut inclure les options suivantes :
Option | Type | Description |
---|---|---|
ExtensionPaths | array | Tableau de chemins qui pointent vers le fichier connecteur (mez/pqx). |
FailOnMissingOutputFile | bool | Compare ne génère pas de fichier PQOut et échoue s’il n’existe pas. |
FailOnFoldingFailure | bool | Compare échoue si une erreur de pliage de requête est levée. |
ParameterQueryFilePath | string | Fichier de requête qui contient des expressions M, combiné au moment de l’exécution avec le fichier de requête de test. Un cas d’usage courant consiste à avoir un fichier de requête avec paramètres unique pour spécifier une expression M afin de récupérer les données pour plusieurs requêtes de test. |
QueryFilePath | string | Fichier de requête qui contient l’expression M (.pq) à tester. |
TrxReportPath | string | Génère un fichier de résultats TRX (fichier de résultats de test Visual Studio) et des fichiers JSON distincts pour chaque test dans un chemin donné. |
DiagnosticChannels | array | Nom des canaux de diagnostic à attacher à l’exécution de test (par exemple, Odbc pour capturer des instructions de pliage de requête). |
Dans le cas où l’option d’entrée de ligne de commande et de paramètres est fournie, l’entrée de ligne de commande est hiérarchisée.
Exemple 6 : utilisation d’un fichier de paramètres au lieu des arguments de ligne de commande
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof
La commande ci-dessus est équivalente à la commande suivante :
<Path to PQTest.exe>.\PQTest.exe compare -sf settings.json
Où settings.json est le fichier JSON suivant :
{
"ExtensionPaths": ["contoso.mez"],
"QueryFilePath": "contoso.query.pq",
"FailOnMissingOutputFile": true
}
Batteries de tests avec la commande compare
Une batterie de tests est une collection de tests qui évaluent plusieurs aspects de votre code. Placez les fichiers de requête dans le même dossier afin que PQTest puisse les localiser facilement. Au lieu de passer un nom de fichier de test spécifique, spécifiez le chemin du dossier et PQTest exécute tous les fichiers de requête de test .query.pq en un seul passage.
Exemple 7 : exécution d’une batterie de tests
En supposant qu’un dossier nommé test contient les fichiers suivants :
- contoso.testa.query.pq
- contoso.testb.query.pq
- contoso.testc.query.pq
La batterie de tests entière peut être exécutée à l’aide de la ligne de commande suivante :
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q .\test
Ignorer les tests lors de l’exécution d’une batterie de tests
Un test peut être ignoré lors de l’exécution d’une batterie de tests en modifiant l’extension du fichier .query.pq en .query.pq.ignore.
Exemple 8 : ignorer un test lors de l’exécution d’une batterie de tests
En supposant qu’un dossier nommé test contient les fichiers suivants :
- contoso.testa.query.pq
- contoso.testb.query.pq.ignore
- contoso.testc.query.pq
Les fichiers contoso.testa.query.pq et contoso.testc.query.pq sont exécutés, mais contoso.testb.query.pq.ignore est ignoré lorsque la commande suivante est exécutée pour exécuter la batterie de tests :
<Path to PQTest.exe>.\PQTest.exepqtest.exe compare -e contoso.mez -q .\test