Compartir a través de


Prueba de regresión con el comando “compare”

El comando compare de PQTest es una herramienta eficaz para la prueba de regresión, ya que le permite evaluar exhaustivamente las funciones del conector y la generación de texto de comandos. Para ilustrar su versatilidad, las secciones siguientes proporcionarán una variedad de ejemplos adaptados a diferentes escenarios.

Consultas básicas

La forma más sencilla de realizar pruebas es agregar una expresión de consulta única a un archivo “.query.pq”, que puede ejecutar mediante el comando compare. PQTest evalúa la expresión y genera un archivo “.pqout” (salida) con el mismo nombre. Para las ejecuciones siguientes, se compara la salida generada a partir de la evaluación del archivo “.query.pq” con el archivo “pqout” (salida) con el mismo nombre y se devuelve la salida de la evaluación.

Ejemplo 1: ejecución del comando “compare” para un archivo de consulta cuando no existe un archivo de resultados

En el ejemplo siguiente se ejecuta un único archivo de prueba de consulta mediante la extensión de Power Query especificada y se genera un archivo de resultados para comparar.

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

Ejemplo 2: ejecución del comando “compare” para un archivo de consulta cuando no existe un archivo de resultados y se ha configurado la marca 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"
  }
]

Ejemplo 3: ejecución del comando “compare” para un archivo de consulta cuando existe un archivo de resultados

En el ejemplo siguiente se ejecuta un único archivo de prueba de consulta mediante la extensión de Power Query especificada, se compara con un archivo de resultados y se devuelve el resultado.

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

Prueba con consulta de parámetros

La consulta de parámetros es una consulta que se combina con una consulta de prueba en runtime; consulta de parámetros se ejecuta primero. Esta funcionalidad le permite dividir el archivo de consulta de prueba/PQ en dos partes: el archivo de consulta de parámetros y el archivo de consulta de prueba.

Prueba de orígenes de datos independientes con el formato de consulta de parámetros y prueba

Un ejemplo de caso de uso en el que esta funcionalidad sería útil es crear un conjunto de pruebas independiente del origen de datos. A continuación puede utilizar la consulta de parámetros para recuperar datos del origen de datos y hacer que la consulta de prueba sea M genérica. Si desea ejecutar las pruebas para otro conector, solo tiene que agregar o actualizar la consulta de parámetros para que apunte a ese origen de datos específico.

Una diferencia clave al utilizar una consulta de parámetros es que la consulta de prueba sigue un formato diferente. En lugar de ser una expresión de fórmula, debe ser una función M que toma un parámetro de entrada, el cual representa la tabla devuelta desde la consulta de parámetros.

Supongamos que tiene la siguiente consulta de prueba:

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

Para convertirla en una consulta de prueba y parámetros, debe dividirla de la siguiente manera:

Consulta de parámetros:

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

Consulta de prueba:

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

Ejemplo 4: utilización de la consulta de parámetros y la consulta de prueba con el 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"
  }
]

Comparación de diagnósticos

Se puede evaluar información de diagnóstico adicional al utilizar el comando compare mediante la suscripción a un canal de diagnóstico. Cuando se ejecuta el comando compare, PQTest genera un archivo “.diagnostics” para cada canal suscrito que tenía un evento. Para las ejecuciones siguientes, se compara el evento de diagnóstico con su archivo “.diagnostics”, similar a “.pqout”.

Ejemplo 5: suscribirse al canal de diagnóstico ODBC (conectividad abierta de bases de datos) para validar el plegado de consultas

En el ejemplo siguiente se muestra cómo suscribirse al canal ODBC, que captura cualquier SQL generada por el controlador ODBC cuando se usa el plegado de consultas.

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

El canal de diagnóstico ODBC se puede utilizar para verificar que una consulta se está plegando y que está generando la SQL correcta.

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 consulta ahora se pliega y genera el siguiente texto de comando ODBC en el archivo “.diagnostics”:

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

Utilización de un archivo de configuración

Cualquier parámetro de entrada de línea de comandos para el comando compare también se puede pasar a través de un archivo de configuración JSON. El archivo JSON puede tener las opciones siguientes:

Opción Tipo Descripción
ExtensionPaths array Matriz de rutas de acceso que apuntan al archivo del conector (mez/pqx).
FailOnMissingOutputFile bool El comando “compare” no genera un archivo PQOut y genera un error si no existe.
FailOnFoldingFailure bool Se generará un error en el comando “compare” si también se produce un error en el plegado de consulta.
ParameterQueryFilePath string Archivo de consulta que contiene expresiones M y se combina en runtime con el archivo de consulta de prueba. Un caso de uso común es tener un único archivo de consulta de parámetros para especificar una expresión M y recuperar los datos de varias consultas de prueba.
QueryFilePath string Archivo de consulta que contiene la expresión M (.pq) que se va a probar.
TrxReportPath string Genera un archivo de resultados de TRX (archivo de resultados de pruebas de Visual Studio) y archivos JSON independientes para cada prueba en una ruta de acceso determinada.
DiagnosticChannels array Nombre de los canales de diagnóstico que se van a adjuntar a la serie de pruebas (por ejemplo, Odbc para capturar instrucciones de plegado de consultas).

En caso de que se proporcione la opción entrada y configuración de la línea de comandos, se dará prioridad a la entrada de la línea de comandos.

Ejemplo 6: utilización del archivo de configuración en lugar de argumentos de la línea de comandos

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

El comando anterior es equivalente al comando siguiente:

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

Donde “settings.json” es el siguiente archivo JSON:

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

Baterías de pruebas con el comando “compare”

Una batería de pruebas es una colección de pruebas que evalúan varios aspectos del código. Coloque los archivos de consulta en la misma carpeta para que PQTest pueda ubicarlos fácilmente. En lugar de pasar un nombre de archivo de prueba específico, especifique la ruta de acceso de la carpeta y PQTest ejecutará todos los archivos de consulta de prueba “.query.pq” en un solo pase.

Ejemplo 7: ejecución de una batería de pruebas

Supongamos que una carpeta denominada “test” contiene los siguientes archivos:

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

Toda la batería de pruebas se puede ejecutar mediante la siguiente línea de comandos:

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

Ignorar pruebas al ejecutar una batería de pruebas

Es posible omitir una prueba al ejecutar una batería de pruebas cambiando la extensión del archivo “.query.pq” a “.query.pq.ignore”.

Ejemplo 8: ignorar una prueba al ejecutar una batería de pruebas

Supongamos que una carpeta denominada “test” contiene los siguientes archivos:

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

Los archivos “contoso.testa.query.pq” y “contoso.testc.query.pq” se ejecutan, pero “contoso.testb.query.pq.ignore” se omite cuando se ejecuta el siguiente comando para ejecutar la batería de pruebas:

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