2010-07-28 18 views
6

So che esistono metodi per automatizzare i "test unitari" di SQL Server. Ma la mia domanda è leggermente diversa.Test dell'unità automatizzata SQL Server

Durante la convalida dei requisiti scriviamo una serie di script SQL che sostanzialmente non restituiscono nulla in caso di successo.

Quindi, in pratica il suo come

  1. Esegui query
  2. Esegui un'altra query
  3. Esegui pacchetto SSIS
  4. Esegui query.

E esempio con un po 'più di contesto

Requisito # 1 Descrizione: Mostra Quindi il mio problema

  1. query per verificare se la tabella di destinazione esiste ed è vuoto
  2. query per verificare se la sorgente esiste e contiene i dati
  3. Esegui pacchetto SSL ETL
  4. Query Verificare che i dati siano stati trasferiti correttamente
  5. Query di far valere le regole di business

Abbiamo trovato un modo per automatizzare questo processo scrivendo un programma personalizzato per analizzare attraverso l'esecuzione di query SQL, caricare i dati necessari, pacchetti SSIS correre, ecc e poi riferire se abbiamo un risultato (che mostra un fallimento del test).

Questa sembra una ruota che reinventa ... ma non sono riuscito a trovare nulla di simile. Soprattutto quello che si integra con SSIS.

EDIT:

Qualcuno ha suggerito SSISunit, e c'è poco da alcuna documentazione su di esso. Se dovessimo usare l'unità SSIS è più simile al processo di installazione asserire che le condizioni richieste esistono, passaggi 1 & 2 sopra? Ho sempre pensato che i processi di configurazione non fossero validi?

risposta

0

Dopo circa un mese di ricerche, non esiste un programma OTS che faccia ciò che questa domanda pone.

Stavamo cercando un set di strumenti che consenta di definire come convalidare un requisito. Nel nostro caso avevamo bisogno di una routine generica per eseguire script SQL, caricare dati ed eseguire pacchetti SSIS e l'unico modo per farlo attualmente è scrivere il tuo strumento di orchestrazione.

Abbiamo usato .NET per orchestrare ma @Sam ha fornito un modo utile per farlo con SSIS. Grazie al consiglio di @JasonHorner ora stiamo cercando di farlo sembrare più come SSISUnit ma a un livello più organizzato.

0

È possibile scrivere un pacchetto SSIS che esegua tutti questi passaggi.

Creare una variabile denominata myResult. Visualizza >> Altre finestre >> variabili. Assicurati di essere al livello del flusso di controllo del pacchetto e non di fare clic su qualche attività/passaggio. Vuoi questa variabile con scope al livello del pacchetto. Dagli il tipo di dati Int32 e imposta il valore predefinito come codice di errore.

Esegui attività SQL, impostare la proprietà dei risultati su "Riga singola". Metti il ​​risultato in una variabile con il riquadro Set di risultati. Imposta nome risultato = 0 e Nome variabile = Utente :: mioResult.

Verificare il risultato facendo doppio clic sulla linea tra queste due attività SQL.Impostare per valutare l'espressione e impostare espressioni come questa: @myResult == 0

Esegui prossimo SQL Task risultato messa in stessa variabile

Check Result come prima

Esegui pacchetto Task (eseguire il vostro SSIS)

Continuare, se necessario ...

È possibile eseguire pacchetti SSIS con il DTEXEC.exe runtime. I codici di ritorno sono elencati qui, quindi puoi eventualmente integrarli in un altro processo.


--Additional stuff--

Dal momento che si desidera che questo sia generico per molti casi, si potrebbe o scrivere del codice che tirare un banco di prova ed è singoli passi da una tabella o si può fare la stessa cosa in SSIS (forse!).

In SSIS è possibile creare un contenitore Ciclo Foreach che opererà su un set di risultati ADO memorizzato in una variabile. A seconda del "tipo di passaggio" - pacchetto SQLCMD o SSIS, è possibile eseguire una diramazione per eseguire un pacchetto o eseguire un'istruzione SQL utilizzando espressioni per modificare le informazioni rilevanti come il percorso del pacchetto o l'istruzione sql. Avresti bisogno di un campo per il server, sqlcmd e packagename per ogni passaggio per semplicità - l'attività SQL non ha bisogno del nome pacchetto e l'attività ssis non ha bisogno di sqlcmd.

+0

Immagino che cosa stessimo cercando di realizzare ci sia un insieme limitato di compiti, volevamo un modo per essere in grado di eseguire solo "script" relativi a un requisito. Nel tuo caso avremmo un pacchetto SSIS per requisito? Contro un sistema che analizza l'input e asserisce che i test sono passati. Ha senso? – Nix

+0

Oh sì, capisco cosa intendi. hmmm ... – Sam

+0

Suppongo che potresti scrivere del codice personalizzato per passare attraverso una tabella di passi ed eseguire il comando sql o il pacchetto ssis memorizzato in essi utilizzando DTEXEC e SQLCMD. – Sam

1

Il suo chiaro per me se la vostra domanda è di test di unità SSIS le regole di business all'interno di un pacchetto SSIS o se questo è solo un mezzo per un fine, forse questo è utile:

http://ssisunit.codeplex.com/

quadri maggior xUnit supporto configurazione e struttura di demolizione. Penso che quello che vorresti sia usare la parte di setup del test per eseguire il pacchetto ssis e il passo di rimozione per reimpostare lo stato del database.

Considererei questo come punto di partenza, poiché è incorporato nello studio visivo.

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

Quindi, per rispondere alla tua domanda, sì, penso che si stanno reinventando la ruota; ma forse la ruota esistente non si adatta bene al tuo problema;)