Testen des Azure Data Lake Analytics-Codes

Azure Data Lake stellt die U-SQL-Sprache bereit. U-SQL kombiniert deklarative SQL mit imperativen C#-Elementen, damit Daten jedweden Umfangs verarbeitet werden können. In diesem Dokument erfahren Sie, wie Sie Testfälle für den U-SQL- und den erweiterten C#-UDO-Code (User-Defined Operator, benutzerdefinierter Operator) erstellen.

Testen von U-SQL-Skripts

Das U-SQL-Skript wird für ausführbaren Code zur Ausführung in Azure oder auf dem lokalen Computer kompiliert und optimiert. Beim Kompilierungs- und Optimierungsprozess wird das gesamte U-SQL-Skript als Ganzes behandelt. Sie können keine herkömmlichen Komponententests für jede Anweisung durchführen. Mithilfe des U-SQL-Test-SDK und des SDK zur lokalen Ausführung können Sie jedoch Skriptebenentests durchführen.

Erstellen von Testfällen für ein U-SQL-Skript

In Azure Data Lake Tools für Visual Studio können Sie Testfälle für U-SQL-Skripts erstellen.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf ein U-SQL-Skript, und wählen Sie Create Unit Test (Komponententest erstellen) aus.

  2. Erstellen Sie ein neues Testprojekt, oder fügen Sie den Testfall in ein vorhandenes Testprojekt ein.

    Data Lake Tools for Visual Studio -- create a U-SQL test project configuration

Verwalten der Testdatenquelle

Beim Testen von U-SQL-Skripts werden Testeingabedateien benötigt. Zum Verwalten der Testdaten klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das U-SQL-Projekt, und wählen Sie Eigenschaften aus. Sie können eine Quelle in Testdatenquelle eingeben.

Data Lake Tools for Visual Studio -- configure project test data source

Wenn Sie die Initialize()-Schnittstelle im U-SQL-Test-SDK aufgerufen haben, wird unter dem Arbeitsverzeichnis des Testprojekts ein temporärer lokaler Datenstammordner erstellt. Bevor Sie die U-SQL-Skripttestfälle ausführen, werden alle Dateien und Unterordner im Ordner „Testdatenquelle“ in den temporären lokalen Datenstammordner kopiert. Sie können weitere Testdatenquellenordner hinzufügen, indem Sie den Testdatenordnerpfad durch Semikolons trennen.

Verwalten der Datenbankumgebung für Tests

Wenn bei den U-SQL-Skripts U-SQL-Datenbankobjekte verwendet oder abgefragt werden, müssen Sie die Datenbankumgebung vor dem Ausführen der U-SQL-Testfälle initialisieren. Diese Vorgehensweise kann beim Aufrufen gespeicherter Prozeduren erforderlich sein. Über die Initialize()-Schnittstelle im U-SQL-Test-SDK können Sie alle Datenbanken, auf die durch das U-SQL-Projekt verwiesen wird, im temporären lokalen Datenstammordner im Arbeitsverzeichnis des Testprojekts bereitstellen.

Weitere Informationen zum Verwalten von U-SQL-Datenbank-Projektverweisen für ein U-SQL-Projekt finden Sie unter Verweisen auf ein U-SQL-Datenbankprojekt.

Überprüfen der Testergebnisse

Die Run()-Schnittstelle gibt ein Ergebnis der Auftragsausführung zurück. 0 bedeutet Erfolg, und 1 bedeutet Fehler. Sie können zudem C#-Assert-Funktionen verwenden, um die Ausgaben zu überprüfen.

Ausführen von Testfällen in Visual Studio

Ein Testprojekt für das U-SQL-Skript basiert auf dem C#-Komponententest-Framework. Nachdem Sie das Projekt erstellt haben, wählen Sie Test>Windows>Test-Explorer aus. Testfälle können im Test-Explorer ausgeführt werden. Klicken Sie alternativ mit der rechten Maustaste auf die CS-Datei in Ihrem Komponententest, und wählen Sie Tests ausführen aus.

Testen von C#-UDOs

Erstellen von Testfällen für C#-UDOs

Sie können das C#-Komponententest-Framework verwenden, um Ihre C#-UDOs (User-Defined Operator, benutzerdefinierter Operator) zu testen. Beim Testen von UDOs müssen Sie die entsprechenden IRowset-Objekte als Eingabe vorbereiten.

Es gibt zwei Möglichkeiten zum Erstellen eines IRowset-Objekts:

  • Laden von Daten aus einer Datei zum Erstellen von IRowset:

    //Schema: "a:int, b:int"
    USqlColumn<int> col1 = new USqlColumn<int>("a");
    USqlColumn<int> col2 = new USqlColumn<int>("b");
    List<IColumn> columns = new List<IColumn> { col1, col2 };
    USqlSchema schema = new USqlSchema(columns);
    
    //Generate one row with default values
    IUpdatableRow output = new USqlRow(schema, null).AsUpdatable();
    
    //Get data from file
    IRowset rowset = UnitTestHelper.GetRowsetFromFile(@"processor.txt", schema, output.AsReadOnly(), discardAdditionalColumns: true, rowDelimiter: null, columnSeparator: '\t');
    
  • Verwenden von Daten aus einer Datensammlung zum Erstellen von IRowset:

    //Schema: "a:int, b:int"
    USqlSchema schema = new USqlSchema(
        new USqlColumn<int>("a"),
        new USqlColumn<int>("b")
    );
    
    IUpdatableRow output = new USqlRow(schema, null).AsUpdatable();
    
    //Generate Rowset with specified values
    List<object[]> values = new List<object[]>{
        new object[2] { 2, 3 },
        new object[2] { 10, 20 }
    };
    
    IEnumerable<IRow> rows = UnitTestHelper.CreateRowsFromValues(schema, values);
    IRowset rowset = UnitTestHelper.GetRowsetFromCollection(rows, output.AsReadOnly());
    

Überprüfen der Testergebnisse

Nach dem Aufrufen von UDO-Funktionen können Sie die Ergebnisse unter Verwendung von C#-Assert-Funktionen über die Überprüfung des Schemas und Rowset-Werts überprüfen. Sie können der Projektmappe ein U-SQL-C#-UDO-Komponententestprojekt hinzufügen. Dazu wählen Sie in Visual Studio Datei > Neu > Projekt aus.

Ausführen von Testfällen in Visual Studio

Nachdem Sie das Projekt erstellt haben, wählen Sie Test>Windows>Test-Explorer aus. Testfälle können im Test-Explorer ausgeführt werden. Klicken Sie alternativ mit der rechten Maustaste auf die CS-Datei in Ihrem Komponententest, und wählen Sie Tests ausführen aus.

Ausführen von Testfällen in Azure Pipelines

Die Testprojekte für das U-SQL-Skript sowie die C#-UDO-Testprojekte erben von den C#-Komponententestprojekten. Die Visual Studio-Testaufgabe in Azure Pipelines kann diese Testfälle ausführen.

Ausführen von U-SQL-Testfällen in Azure Pipelines

Stellen Sie für einen U-SQL-Test sicher, dass Sie CPPSDK auf dem Buildcomputer laden, und übergeben Sie dann den CPPSDK-Pfad an USqlScriptTestRunner(cppSdkFolderFullPath: @"").

Was ist CPPSDK?

CPPSDK ist ein Paket, das Microsoft Visual C++ 14 und Windows SDK 10.0.10240.0 enthält. Dieses Paket enthält die für die U-SQL-Runtime erforderliche Umgebung. Sie finden dieses Paket im Installationsordner von Azure Data Lake Tools für Visual Studio:

  • Für Visual Studio 2015 befindet es sich unter C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake Tools for Visual Studio 2015\X.X.XXXX.X\CppSDK
  • Für Visual Studio 2017 befindet es sich unter C:\Program Files (x86)\Microsoft Visual Studio\2017\<Visual Studio Edition>\SDK\ScopeCppSDK
  • Für Visual Studio 2019 befindet es sich unter C:\Program Files (x86)\Microsoft Visual Studio\2019\<Visual Studio Edition>\SDK\ScopeCppSDK

Vorbereiten von CPPSDK im Azure Pipelines-Build-Agent

Die gängigste Methode für die Vorbereitung dieser CPPSDK-Abhängigkeit in Azure Pipelines ist folgende:

  1. Zippen Sie den Ordner, der die CPPSDK-Bibliotheken enthält.

  2. Checken Sie die ZIP-Datei in das Quellcodeverwaltungssystem ein. Mit der ZIP-Datei wird sichergestellt, dass alle Bibliotheken im CPPSDK-Ordner eingecheckt und Dateien nicht aufgrund einer .gitignore-Datei ignoriert werden.

  3. Entzippen Sie die ZIP-Datei in die Buildpipeline.

  4. Verweisen Sie USqlScriptTestRunner auf diesen entzippten Ordner auf dem Buildcomputer.

Ausführen von C#-UDO-Testfällen in Azure Pipelines

Stellen Sie für den C#-UDO-Test sicher, dass Sie auf die folgenden Assemblys verweisen, die für UDOs erforderlich sind.

  • Microsoft.Analytics.Interfaces
  • Microsoft.Analytics.Types
  • Microsoft.Analytics.UnitTest

Wenn Sie über das Microsoft.Azure.DataLake.USQL.Interfaces-NuGet-Paket auf sie verweisen, stellen Sie sicher, dass Sie eine NuGet-Wiederherstellungsaufgabe in der Buildpipeline hinzufügen.

Nächste Schritte