แชร์ผ่าน


การทดสอบการถดถอยด้วยคําสั่งเปรียบเทียบ

PQTest เปรียบเทียบคําสั่ง เป็นเครื่องมือที่มีประสิทธิภาพสําหรับการทดสอบการถดถอย ซึ่งช่วยให้คุณสามารถประเมินฟังก์ชันของตัวเชื่อมต่อและการสร้างข้อความคําสั่งได้อย่างละเอียด เพื่อแสดงให้เห็นถึงความสามารถรอบด้าน ส่วนถัดไปจะให้ตัวอย่างที่หลากหลายซึ่งปรับให้เหมาะกับสถานการณ์ที่แตกต่างกัน

คิวรีพื้นฐาน

รูปแบบที่ง่ายที่สุดของการทดสอบคือการเพิ่มนิพจน์คิวรีเดี่ยวไปยังไฟล์ .query.pq ซึ่งคุณสามารถดําเนินการโดยใช้ เปรียบเทียบคําสั่ง PQTest จะประเมินนิพจน์และสร้างไฟล์ .pqout (ผลลัพธ์) ที่มีชื่อเดียวกัน สําหรับการเรียกใช้ที่ตามมาใด ๆ ซึ่งจะเปรียบเทียบเอาต์พุตที่สร้างขึ้นจากการประเมินไฟล์ .query.pq กับไฟล์ pqout (ผลลัพธ์) ที่มีชื่อเดียวกันและแสดงผลลัพธ์ของการประเมิน

ตัวอย่างที่ 1 - การเรียกใช้คําสั่งเปรียบเทียบสําหรับไฟล์คิวรีเมื่อไม่มีไฟล์เอาต์พุต

ตัวอย่างต่อไปนี้ดําเนินการไฟล์ทดสอบคิวรีเดียวโดยใช้ส่วนขยาย Power Query ที่ระบุและสร้างไฟล์เอาต์พุตเพื่อเปรียบเทียบ

<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 - การเรียกใช้คําสั่งเปรียบเทียบสําหรับไฟล์คิวรีที่มีไฟล์ผลลัพธ์อยู่

ตัวอย่างต่อไปนี้ดําเนินการไฟล์ทดสอบคิวรีเดียวโดยใช้ส่วนขยาย Power Query ที่ระบุ เปรียบเทียบกับไฟล์เอาต์พุตและแสดงผลลัพธ์

<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/test ออกเป็นสองส่วน: ไฟล์คิวรีพารามิเตอร์ และไฟล์คิวรีทดสอบ

การทดสอบแหล่งข้อมูล Agnostic ที่มีพารามิเตอร์และรูปแบบการทดสอบคิวรี

ตัวอย่างของกรณีการใช้งานที่ฟังก์ชันนี้มีประโยชน์คือการสร้างชุดการทดสอบการวินิจฉัยแหล่งข้อมูล คุณสามารถใช้คิวรีพารามิเตอร์ของคุณเพื่อดึงข้อมูลจากแหล่งข้อมูล และมีคิวรีทดสอบเป็นแบบ 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"
  }
]

การเปรียบเทียบการวินิจฉัย

สามารถประเมินข้อมูลการวินิจฉัยเพิ่มเติมได้เมื่อใช้ เปรียบเทียบคําสั่ง โดยการสมัครใช้งานช่องการวินิจฉัย เมื่อเรียกใช้ เปรียบเทียบ คําสั่ง PQTest จะส่งออกไฟล์ .diagnostics สําหรับแต่ละช่องที่สมัครใช้งานที่มีเหตุการณ์ สําหรับการเรียกใช้ที่ตามมา จะเปรียบเทียบเหตุการณ์การวินิจฉัยกับไฟล์ .diagnostics ซึ่งคล้ายกับ .pqout

ตัวอย่างที่ 5 - การสมัครใช้งานไปยังช่องทางการวินิจฉัย ODBC (Open Database Connectivity) เพื่อตรวจสอบการพับคิวรี

ตัวอย่างต่อไปนี้แสดงวิธีการสมัครสมาชิกช่อง 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 สามารถมีตัวเลือกต่อไปนี้:

ตัวเลือก พิมพ์ คำอธิบาย
ExtensionPaths อาร์เรย์ อาร์เรย์ของเส้นทางที่ชี้ไปยังไฟล์ตัวเชื่อมต่อ (mez/pqx)
FailOnMissingOutputFile bool เปรียบเทียบไม่ได้สร้างไฟล์ PQOut และล้มเหลวถ้าไม่มีอยู่
FailOnFoldingFailure bool การเปรียบเทียบล้มเหลวหากมีข้อผิดพลาดการพับคิวรีเกิดขึ้น
ParameterQueryFilePath สตริง ไฟล์คิวรีที่มีนิพจน์ M ซึ่งรวมกันในขณะทํางานกับไฟล์คิวรีทดสอบ กรณีการใช้งานทั่วไปคือการมีไฟล์คิวรีพารามิเตอร์เดียวเพื่อระบุนิพจน์ M เพื่อดึงข้อมูลสําหรับคิวรีทดสอบหลายรายการ
QueryFilePath สตริง ไฟล์คิวรีที่มีนิพจน์ M (.pq) ที่จะทดสอบ
TrxReportPath สตริง สร้างไฟล์ผลลัพธ์ TRX (ไฟล์ผลการทดสอบ Visual Studio) และแยกไฟล์ JSON สําหรับการทดสอบแต่ละครั้งในเส้นทางที่กําหนด
แชนเนลการวินิจฉัย อาร์เรย์ ชื่อของช่องการวินิจฉัยที่จะแนบไปกับการเรียกใช้การทดสอบ (ตัวอย่างเช่น Odbc สําหรับการจับคําสั่ง Query Folding)

ในกรณีที่มีทั้งตัวเลือกการป้อนข้อมูลบรรทัดคําสั่งและการตั้งค่าการป้อนข้อมูลบรรทัดคําสั่งจะถูกจัดลําดับความสําคัญ

ตัวอย่างที่ 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