Test dell'interazione con un grande database CRM

1

Nella nostra azienda disponiamo di due grandi sistemi, in pratica punteggio e CRM. Entrambi hanno grandi database SQL Server in esecuzione su server Windows sulla intranet. Questi due database sono gestiti da un altro dipartimento, con il quale abbiamo un contatto diretto.

Nessuno di questi sistemi ha API esterne tranne alcune stored procedure (di seguito "SP"), che utilizziamo per inserire tutti i dati dal nostro team (web-dev team), che sono un sito Web pubblico e un CRM basato sul Web.

Ci sono problemi che rendono questo tipo di integrazione un incubo:

  1. Non ci sono copie appropriate dei database da testare. Ci sono alcune copie occasionali che possono o non possono essere aggiornate e sincronizzate manualmente, il che le rende praticamente inutili in "situazioni ASAP" (sempre).

  2. Tutti i tipi di modifiche nel codice delle stored procedure vengono eseguite direttamente nei database di produzione (!!!), che ovviamente ci causano molti problemi.

  3. Il codice delle stored procedure non è documentato, mal commentato e per lo più non ben scritto. Solo per dire che ho passato gli ultimi due giorni a "decifrare" due SP, uno dei quali è ~ 2400 SLOC lungo e ha molti numeri magici e vars come @str1 .

Per semplificare e rendere più sicuro :

  1. Abbiamo creato una sorta di "server-API", che è fondamentalmente un server SOAP che fa interrogazioni agli SP e restituisce qualsiasi query restituita insieme ad alcuni messaggi di stato. Questo ci aiuta a sganciare le nostre app dal caos, ma semplifica a malapena il nostro compito quando si tratta di scrivere e testare nuove funzionalità.

  2. Archiviamo alcuni ID e altre costanti da questi database nei nostri database per evitare l'utilizzo di numeri magici nel nostro codice ogni volta che è possibile, ma dobbiamo comunque raccogliere e compilare tutti i dati manualmente con sqlcmd (che è molto scomodo a causa della disabilità di cmd di Windows per gestire la copia, l'incollatura e la visualizzazione del testo).

Desidero che potremmo avere un adeguato processo di test dell'interazione con quei database, ma quello che abbiamo oggi è solo un'altra copia del database CRM che dobbiamo sincronizzare manualmente in qualche modo.

Le mie domande sono :

  1. Come possiamo applicare automaticamente tutte le modifiche apportate ai database di produzione nelle copie di prova? Posso pensare a qualcosa come .bat -script, ma forse ci sono strumenti migliori. Dubito (a causa dell'esperienza precedente) possiamo chiedere ad altri reparti di fare qualche replica, quindi sto chiedendo qualcosa che possiamo fare da soli e convincere l'altro dipartimento da usare.

  2. Come possiamo sincronizzare facilmente alcuni dati senza copiare tutti i dati? Ad esempio, abbiamo bisogno di avere una copia aggiornata di tutti i dizionari / tassonomie, ma non i dati sui client (che sono molti dati e richiederà molto tempo per essere copiati). Ancora una volta, sto pensando ad alcuni script, ma potrebbe esserci qualcosa con solo un gruppo di checkbox da selezionare.

  3. Qual è l'approccio migliore per testare le interazioni tramite il nostro "server API"? Voglio dire, supponiamo di aver fatto una richiesta tramite SOAP con alcuni dati falsi e che non si siano verificati errori - come posso essere sicuro che i dati ci siano in quel DB esterno ed è coerente? È una sorta di test in nero / grigio e non so come gestirlo.

posta scriptin 26.02.2013 - 19:08
fonte

1 risposta

1

How can we make all the changes made on production databases automatically propagate into testing copies? I can think of something like .bat-script, but maybe there are better tools. I doubt (because of previous experience) we can ask other department to do some replication, so I'm asking for something we can make ourselves and convince that other department to use.

Utilizza i meccanismi di backup / ripristino standard forniti dal tuo fornitore di database. Se l'altro reparto effettua un backup giornaliero del database di produzione (automaticamente), è sicuramente possibile effettuare un backup giornaliero a scopo di test utilizzando lo stesso meccanismo. Vedi qui

link

per informazioni sulle opzioni di backup di un MS SQL Server.

How can we easily sync some data without copying all the data?

Bene, il modo ottimale dipende molto dal modello di dati, dal numero di record e dalla complessità dello schema. La copia di una parte dei record può richiedere un programma progettato specificatamente che trasferisca i dati nell'ordine corretto, senza violare i vincoli. Forse è più semplice eseguire prima un backup / ripristino completo, quindi eliminare tutto ciò che non è necessario nella copia e conservare il resto per ulteriori elaborazioni. Potrebbe essere troppo lento nel tuo caso, o probabilmente abbastanza veloce, impossibile da sapere senza ulteriori dettagli. Un'altra idea è quella di utilizzare backup differenziali, vedere qui per ulteriori dettagli.

but still we have to collect and fill in all the data manually with sqlcmd (which is very uncomfortable because of the Windows cmd disability to handle copying, pasting and displaying text)

Se cmd non è abbastanza potente, perché non usi qualcosa di più potente come Powershell?

suppose I made a request via SOAP with some fake data and no errors occured - how can I be sure the data is there in that external DB and it is consistent

Semplice: cerca i dati, tramite l'API SOAP o aggiungendo qualche SP al database di test appositamente progettato per scopi di test. Ovviamente, la re-aggiunta del codice SP al DB dovrebbe essere riproducibile, quindi è possibile aggiungerlo automaticamente alla propria copia di prova del database ogni volta che si crea una copia del DB di produzione.

    
risposta data 26.02.2013 - 19:47
fonte

Leggi altre domande sui tag