2010-07-28 8 views
6

Ich weiß, es gibt Möglichkeiten, SQL Server "Komponententests" zu automatisieren. Aber meine Frage ist etwas anders.Automatisierte SQL Server Unit Testing

Bei der Validierung von Anforderungen schreiben wir eine Reihe von SQL-Skripten, die im Erfolgsfall nichts zurückliefern.

Also im Grunde wie seine

  1. Abfrage ausführen
  2. eine weitere Abfrage ausführen
  3. Run SSIS Paket
  4. Abfrage ausführen.

Und Beispiel mit einem wenig mehr Kontext

Anforderung # 1 Beschreibung: Show SO mein Problem

  1. Abfrage zu überprüfen, ob Zieltabelle vorhanden und leer
  2. Abfrage ist, wenn die Quelle überprüfen Tabelle existiert und hat Daten
  3. Führen Sie ETL SSIS-Paket
  4. Abfrage Überprüfen Sie, dass die Daten korrekt übertragen
  5. Abfrage Geschäftsregeln

Wir haben einen Weg gefunden zu behaupten gefunden, diesen Prozess zu automatisieren, indem ein benutzerdefiniertes Programm zu analysieren, durch Ausführen von SQL-Abfragen, Last notwendige Daten, führten SSIS-Pakete zu schreiben, usw. und dann berichten, wenn wir ein Ergebnis (das einen Testfehler anzeigt).

Das scheint wie ein Rad neu zu erfinden ... aber ich konnte nichts dergleichen finden. Besonders eines, das in SSIS integriert ist.

EDIT:

Jemand schlug vor, SSISunit, und es gibt zu keiner Dokumentation es wenig. Wenn wir SSIS-Einheit verwenden, ist es eher wie der Setup-Prozess Assert, dass die erforderlichen Bedingungen bestehen, Schritte 1 & 2 oben? Ich habe immer gedacht, dass Setup-Prozesse keine Validierung durchführen?

Antwort

0

Nach etwa einem Monat der Forschung gibt es kein OTS-Programm da draußen, das tut, worum diese Frage geht.

Wir suchten nach einem Tool-Set, mit dem Sie definieren können, wie eine Anforderung validiert wird. In unserem Fall benötigten wir eine generische Routine, um SQL-Skripte, Daten laden und SSIS-Pakete ausführen zu können. Die einzige Möglichkeit, dies zu tun, ist derzeit, ein eigenes Orchestrierungswerkzeug zu schreiben.

Wir verwendeten .NET, um zu orchestrieren, aber @Sam bot eine nützliche Möglichkeit, dies mit SSIS zu tun. Dank des @JasonHorner-Gutachtens möchten wir nun sehen, dass es eher wie SSISUnit aussieht und sich anfühlt, aber auf einer besser organisierten Ebene.

0

Sie könnten ein SSIS-Paket schreiben, das alle diese Schritte ausführt.

Erstellen Sie eine Variable namens myResult. Ansicht >> Andere Fenster >> Variablen. Stellen Sie sicher, dass Sie sich auf der Steuerungsebene des Pakets befinden und nicht auf eine Aufgabe/einen Schritt geklickt haben. Sie möchten, dass diese Variable auf die Paketebene beschränkt ist. Geben Sie den Int32-Datentyp ein und legen Sie den Standardwert als Ihren Fehlercode fest.

SQL-Task ausführen, Setzen Sie die Eigenschaft resultset auf 'Single Row'. Setzen Sie das Ergebnis in eine Variable mit dem Bereich Ergebnismenge. Legen Sie den Ergebnisnamen = 0 und den Variablennamen = User :: myResult fest.

Überprüfen Sie das Ergebnis durch Doppelklick auf die Linie zwischen diesen beiden SQL-Aufgaben.Auf einen Ausdruck auswerten und setzen Ausdrücke wie folgt aus: @myResult == 0

nächste Task SQL ausführen Ergebnis in gleiche Variable

Prüfergebnis setzen nach wie vor

Package Task ausführen (execute Ihre SSIS)

Weiter nach Bedarf ...

Sie können mit dem DTEXEC.exe runtime SSIS-Pakete auszuführen. Die Rückkehrcodes sind dort aufgeführt, sodass Sie sich möglicherweise in einen anderen Prozess integrieren können.


--Additional stuff--

Da Sie dies für viele Fälle generisch sein wollen, können Sie entweder einen Code schreiben, die einen Testfall ziehen würde und es einzelne Schritte aus einer Tabelle oder Sie könnten mach dasselbe in SSIS (vielleicht!).

In SSIS können Sie einen Foreach-Loop-Container erstellen, der mit einem ADO-Ergebnissatz arbeitet, der in einer Variablen gespeichert ist. Je nach 'Schritttyp' - SQLCMD- oder SSIS-Paket können Sie verzweigen, um ein Paket auszuführen oder eine SQL-Anweisung auszuführen, indem Sie Ausdrücke verwenden, um die relevanten Informationen wie den Paketpfad oder die SQL-Anweisung zu ändern. Sie würden der Einfachheit halber ein Feld für den Server, sqlcmd und Paketname für jeden Schritt benötigen - SQL-Task benötigt den Paketnamen nicht, und die ssis-Task benötigt sqlcmd nicht.

+0

Ich denke, was wir versuchten zu erreichen ist, gibt es eine endliche Reihe von Aufgaben, wir wollten eine Möglichkeit, nur "Skripte" ausführen, die sich auf eine Anforderung beziehen. In Ihrem Fall hätten wir ein SSIS-Paket pro Anforderung? Versus ein System, das Eingaben analysiert und bestätigt, dass die Tests bestanden haben. Ist das sinnvoll? – Nix

+0

Oh ja, ich verstehe was du meinst. Hmmm... – Sam

+0

Ich nehme an, Sie könnten einen benutzerdefinierten Code schreiben, um eine Tabelle von Schritten zu durchlaufen und das darin enthaltene sql-Kommando oder ssis-Paket mit DTEXEC und SQLCMD auszuführen. – Sam

1

Sein mir unklar, ob Ihre Frage über Unit-Tests ssis die Geschäftsregeln innerhalb eines SSIS-Paket oder wenn das nur ein Mittel zum Zweck ist vielleicht dies ist nützlich:

http://ssisunit.codeplex.com/

meisten xUnit Frameworks Support-Setup und Teardown-Struktur. Ich denke, was Sie wollen, ist, den Setup-Teil des Tests zu verwenden, um das SSIS-Paket und den Teardown-Schritt zum Zurücksetzen des Datenbankstatus auszuführen.

Ich würde dies als Ausgangspunkt betrachten, da es in Visual Studio integriert ist.

http://msdn.microsoft.com/en-us/library/bb381703(VS.80).aspx

So Ihre Frage mit Ja zu beantworten, ich glaube, Sie das Rad neu erfinden; aber vielleicht ist das vorhandene Rad nicht gut für Ihr Problem;)