Testowanie regresji za pomocą polecenia compare
Polecenie porównania PQTest to zaawansowane narzędzie do testowania regresji, które pozwala dokładnie ocenić funkcje łącznika i generowanie tekstu polecenia. Aby zilustrować jego wszechstronność, kolejne sekcje będą zawierać różne przykłady dostosowane do różnych scenariuszy.
Zapytania podstawowe
Najprostszą formą testowania jest dodanie pojedynczego wyrażenia zapytania do pliku query.pq, które można wykonać za pomocą polecenia compare. Narzędzie PQTest oblicza wyrażenie i generuje plik pqout (output) o tej samej nazwie. W przypadku wszystkich kolejnych przebiegów porównuje dane wyjściowe wygenerowane z oceny pliku query.pq z plikiem pqout (output) o tej samej nazwie i zwraca dane wyjściowe oceny.
Przykład 1 — uruchamianie polecenia porównania dla pliku zapytania, gdy plik wyjściowy nie istnieje
Poniższy przykład wykonuje pojedynczy plik testowy zapytania przy użyciu określonego rozszerzenia Power Query i generuje plik wyjściowy do porównania.
<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"
}
]
Przykład 2 — uruchomienie polecenia porównania dla pliku zapytania, gdy plik wyjściowy nie istnieje, a flaga FailOnMissingOutputFile jest ustawiona
<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"
}
]
Przykład 3 — uruchamianie polecenia porównania dla pliku zapytania z obecnym plikiem wyjściowym
Poniższy przykład wykonuje pojedynczy plik testowy zapytania przy użyciu określonego rozszerzenia Power Query, porównuje go z plikiem wyjściowym i zwraca wynik.
<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"
}
]
Testowanie za pomocą zapytania parametru
Zapytanie parametru to zapytanie połączone z zapytaniem testowym w czasie wykonywania z zapytaniem parametru uruchomionym najpierw. Ta funkcja umożliwia podzielenie pliku zapytania PQ/test na dwie części: plik zapytania parametrów i plik zapytania testowego.
Niezależne testowanie źródła danych przy użyciu parametru i formatu zapytania testowego
Przykładem przypadku użycia, w którym ta funkcja byłaby przydatna, jest utworzenie niezależnego zestawu testów źródła danych. Możesz użyć zapytania parametru, aby pobrać dane ze źródła danych i mieć zapytanie testowe jako ogólne M. Jeśli chcesz uruchomić testy dla innego łącznika, wystarczy dodać/zaktualizować zapytanie parametru, aby wskazać to konkretne źródło danych.
Kluczową różnicą w przypadku używania zapytania parametru jest to, że zapytanie testowe jest zgodne z innym formatem. Zamiast być wyrażeniem formuły, musi to być funkcja M, która przyjmuje jeden parametr wejściowy, który reprezentuje tabelę zwracaną z zapytania parametru.
Załóżmy, że masz następujące zapytanie testowe:
let
Source = Snowflake.Databases("...", "..."),
Database = Source{[Name="...",Kind="Database"]}[Data],
SelectColumns = Table.RemoveColumns(Database, { "Data" })
in
SelectColumns
Aby przekonwertować go na zapytanie testowe i parametrowe, należy je podzielić w następujący sposób:
Zapytanie parametru:
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
Zapytanie testowe:
(Source) => let
SelectColumns = Table.RemoveColumns(Source, { "VendorID" })
in
SelectColumns
Przykład 4 — używanie zarówno zapytania parametru, jak i zapytania testowego z poleceniem 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"
}
]
Porównywanie diagnostyki
Dodatkowe informacje diagnostyczne można ocenić podczas korzystania z polecenia compare , subskrybując kanał diagnostyczny. Po uruchomieniu polecenia compare narzędzie PQTest generuje plik diagnostyczny dla każdego subskrybowanego kanału, który miał zdarzenie. W przypadku wszystkich kolejnych przebiegów porównuje zdarzenie diagnostyczne z jego plikiem diagnostyki, podobnie jak plik pqout.
Przykład 5 — subskrybowanie kanału diagnostycznego ODBC (Open Database Połączenie ivity) w celu zweryfikowania składania zapytań
W poniższym przykładzie pokazano, jak zasubskrybować kanał ODBC, który przechwytuje dowolny kod SQL wygenerowany przez sterownik ODBC podczas składania zapytań.
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -dc "Odbc"
Kanał diagnostyczny ODBC może służyć do sprawdzania, czy zapytanie składa się i czy generuje prawidłowy kod 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
Zapytanie składa się i generuje następujący tekst polecenia ODBC w pliku diagnostycznym:
[
{
"Command": "DESCRIBE default.DATABASE;"
},
{
"Command": "select top 1 max(`number_column`) as `C1` from `SPARK`.`default`.`DATABASE`"
}
]
Używanie pliku ustawień
Dowolny parametr wejściowy wiersza polecenia dla polecenia compare można również przekazać za pośrednictwem pliku ustawień JSON. Kod JSON może mieć następujące opcje:
Opcja | Type | Opis |
---|---|---|
ExtensionPaths | tablica | Tablica ścieżek wskazujących plik łącznika (mez/pqx). |
FailOnMissingOutputFile | bool | Funkcja Compare nie generuje pliku PQOut i kończy się niepowodzeniem, jeśli nie istnieje. |
FailOnFoldingFailure | bool | Porównanie kończy się niepowodzeniem, jeśli zgłaszany jest błąd składania zapytań. |
ParameterQueryFilePath | string | Plik zapytania zawierający wyrażenia języka M, który jest połączony w czasie wykonywania z plikiem zapytania testowego. Typowym przypadkiem użycia jest posiadanie pojedynczego pliku zapytania parametrów w celu określenia wyrażenia M w celu pobrania danych dla wielu zapytań testowych. |
QueryFilePath | string | Plik zapytania zawierający wyrażenie M (pq) do przetestowania. |
TrxReportPath | string | Generuje plik wyników trX (plik wyników testów programu Visual Studio) i oddzielne pliki JSON dla każdego testu w danej ścieżce. |
DiagnosticChannels | tablica | Nazwa kanałów diagnostycznych, które mają być dołączone do przebiegu testu (na przykład Odbc do przechwytywania instrukcji składania zapytań). |
W przypadku, gdy jest dostępna zarówno opcja danych wejściowych wiersza polecenia, jak i ustawień, priorytet danych wejściowych wiersza polecenia.
Przykład 6 — używanie pliku ustawień zamiast argumentów wiersza polecenia
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q contoso.query.pq -fomof
Powyższe polecenie jest równoważne następującemu poleceniu:
<Path to PQTest.exe>.\PQTest.exe compare -sf settings.json
Gdzie settings.json jest następującym plikiem JSON:
{
"ExtensionPaths": ["contoso.mez"],
"QueryFilePath": "contoso.query.pq",
"FailOnMissingOutputFile": true
}
Testowanie baterii za pomocą polecenia compare
Bateria testowa to kolekcja testów, które oceniają wiele aspektów kodu. Umieść pliki zapytań w tym samym folderze, aby plik PQTest mógł je łatwo zlokalizować. Zamiast przekazywać określoną nazwę pliku testowego, określ ścieżkę folderu, a narzędzie PQTest wykonuje wszystkie pliki zapytań testowych query .query.pq w jednym przebiegu.
Przykład 7 — uruchamianie baterii testów
Przy założeniu, że folder o nazwie test zawiera następujące pliki:
- contoso.testa.query.pq
- contoso.testb.query.pq
- contoso.testc.query.pq
Całą baterię testową można uruchomić przy użyciu następującego wiersza polecenia:
<Path to PQTest.exe>.\PQTest.exe compare -e contoso.mez -q .\test
Ignorowanie testów podczas uruchamiania baterii testów
Test można zignorować podczas uruchamiania baterii testów, zmieniając rozszerzenie pliku query.pq na .query.pq.ignore.
Przykład 8 — ignorowanie testu podczas uruchamiania baterii testów
Przy założeniu, że folder o nazwie test zawiera następujące pliki:
- contoso.testa.query.pq
- contoso.testb.query.pq.ignore
- contoso.testc.query.pq
Pliki contoso.testa.query.pq i contoso.testc.query.pq są uruchamiane, ale contoso.testb.query.pq.ignore jest ignorowany po wykonaniu następującego polecenia w celu uruchomienia baterii testowej:
<Path to PQTest.exe>.\PQTest.exepqtest.exe compare -e contoso.mez -q .\test