다음을 통해 공유


compare 명령을 사용한 회귀 테스트

PQTest 비교 명령은 회귀 테스트를 위한 강력한 도구이므로 커넥터의 함수와 명령 텍스트 생성을 철저히 평가할 수 있습니다. 다양한 기능을 설명하기 위해 후속 섹션에서는 다양한 시나리오에 맞게 조정된 다양한 예제를 제공합니다.

기본 쿼리

테스트의 가장 간단한 형태는 비교 명령을 사용하여 실행할 수 있는 .query.pq 파일에 단일 쿼리 식을 추가하는 것입니다. PQTest는 식을 평가하고 이름이 같은 .pqout(출력) 파일을 생성합니다. 이후 실행의 경우 .query.pq 파일 평가에서 생성된 출력을 동일한 이름의 pqout(출력) 파일과 비교하고 평가의 출력을 반환합니다.

예제 1 - 출력 파일이 없는 경우 쿼리 파일에 대한 비교 명령 실행

다음 예제에서는 지정된 파워 쿼리 확장을 사용하여 단일 쿼리 테스트 파일을 실행하고 비교할 출력 파일을 생성합니다.

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

예제 2 - 출력 파일이 없고 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"
  }
]

예제 3 - 출력 파일이 있는 쿼리 파일에 대한 비교 명령 실행

다음 예제에서는 지정된 파워 쿼리 확장자를 사용하여 단일 쿼리 테스트 파일을 실행하고 출력 파일과 비교하여 결과를 반환합니다.

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

매개 변수 쿼리를 사용하여 테스트

매개 변수 쿼리는 런타임에 테스트 쿼리와 결합되고 매개 변수 쿼리가 먼저 실행되는 쿼리입니다. 이 기능을 사용하면 PQ/테스트 쿼리 파일을 매개 변수 쿼리 파일과 테스트 쿼리 파일의 두 부분으로 분할할 수 있습니다.

매개 변수 및 테스트 쿼리 형식을 사용하여 독립적인 데이터 원본 테스트

이 기능이 유용한 사용 사례의 예는 데이터 원본에 구애받지 않는 테스트 제품군을 만드는 것입니다. 매개 변수 쿼리를 사용하여 데이터 원본에서 데이터를 검색하고 테스트 쿼리가 제네릭 M이 되도록 할 수 있습니다. 다른 커넥터에 대한 테스트를 실행하려면 해당 특정 데이터 원본을 가리키도록 매개 변수 쿼리를 추가/업데이트하기만 하면 됩니다.

매개 변수 쿼리를 사용할 때 주요 차이점은 테스트 쿼리가 다른 형식을 따른다는 것입니다. 수식 식이 아니라 매개 변수 쿼리에서 반환된 테이블을 나타내는 하나의 입력 매개 변수를 사용하는 M 함수여야 합니다.

다음과 같은 테스트 쿼리가 있다고 가정해 보겠습니다.

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

테스트 및 매개 변수 쿼리로 변환하려면 다음과 같이 분할해야 합니다.

매개 변수 쿼리:

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

테스트 쿼리:

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

예제 4 - 비교 명령에 매개 변수 쿼리 및 테스트 쿼리 사용

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

진단 비교

진단 채널을 구독하여 비교 명령을 사용할 때 추가 진단 정보를 평가할 수 있습니다. compare 명령을 실행하면 PQTest는 이벤트가 있는 구독된 각 채널에 대해 .진단 파일을 출력합니다. 후속 실행의 경우 진단 이벤트를 해당 이벤트와 비교합니다. .pqout과 유사한 진단 파일입니다.

예제 5 - 쿼리 폴딩의 유효성을 검사하기 위해 ODBC(Open Database 커넥트ivity) 진단 채널 구독

다음 예제에서는 쿼리 폴딩을 사용할 때 ODBC 드라이버에서 생성된 모든 SQL을 캡처하는 ODBC 채널을 구독하는 방법을 보여 줍니다.

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

ODBC 진단 채널을 사용하여 쿼리가 접이고 있고 올바른 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

이제 쿼리는 접어서 다음 ODBC 명령 텍스트를 생성합니다. 진단 파일:

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

설정 파일 사용

비교 명령에 대한 명령줄 입력 매개 변수는 JSON 설정 파일을 통해 전달할 수도 있습니다. JSON에는 다음 옵션이 있을 수 있습니다.

옵션 Type 설명
ExtensionPaths 배열 커넥터 파일(mez/pqx)을 가리키는 경로의 배열입니다.
FailOnMissingOutputFile bool 비교는 PQOut 파일을 생성하지 않으며 PQOut 파일이 없으면 실패합니다.
FailOnFoldingFailure bool 쿼리 접기 오류가 throw되면 비교가 실패합니다.
ParameterQueryFilePath string M 식을 포함하는 쿼리 파일로, 런타임 시 테스트 쿼리 파일과 결합됩니다. 일반적인 사용 사례는 여러 테스트 쿼리에 대한 데이터를 검색하는 M 식을 지정하는 단일 매개 변수 쿼리 파일을 갖는 것입니다.
QueryFilePath string 테스트할 M 식(.pq)이 포함된 쿼리 파일입니다.
TrxReportPath string 지정된 경로의 각 테스트에 대해 TRX(Visual Studio 테스트 결과 파일) 결과 파일과 별도의 JSON 파일을 생성합니다.
DiagnosticChannels 배열 테스트 실행에 연결할 진단 채널의 이름입니다(예: 쿼리 폴딩 문을 캡처하기 위한 Odbc).

명령줄 입력 및 설정 옵션이 모두 제공되는 경우 명령줄 입력의 우선 순위가 지정됩니다.

예제 6 - 명령줄 인수 대신 설정 파일 사용

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

위의 명령은 다음 명령과 동일합니다.

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

여기서 settings.json JSON 파일은 다음과 같습니다.

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

비교 명령을 사용하여 배터리 테스트

테스트 배터리는 코드의 여러 측면을 평가하는 테스트 컬렉션입니다. PQTest에서 쉽게 찾을 수 있도록 쿼리 파일을 동일한 폴더에 배치합니다. 특정 테스트 파일 이름을 전달하는 대신 폴더 경로를 지정하고 PQTest는 모든 .query.pq 테스트 쿼리 파일을 단일 패스로 실행합니다.

예제 7 - 테스트 배터리 실행

다음 파일이 포함된 테스트라는 폴더를 가정합니다.

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

전체 테스트 배터리는 다음 명령줄을 사용하여 실행할 수 있습니다.

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

테스트 배터리를 실행할 때 테스트 무시

.query.pq 파일의 확장을 .query.pq.ignore로 변경하여 테스트 배터리를 실행할 때 테스트를 무시할 수 있습니다.

예제 8 - 테스트 배터리를 실행할 때 테스트 무시

다음 파일이 포함된 테스트라는 폴더를 가정합니다.

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

contoso.testa.query.pq 및 contoso.testc.query.pq 파일은 실행되지만 테스트 배터리를 실행하기 위해 다음 명령을 실행하면 contoso.testb.query.pq.ignore가 무시됩니다.

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