2013-03-19 19 views
5

Immaginate di avere un'architettura orientata ai servizi piuttosto complessa fatta da componenti diversi. I componenti sono scritti in diverse lingue (Java, PHP, Ruby) e comunicano tra loro in modi diversi (ad esempio UI, API REST, in alcuni casi condividono alcune tabelle DB, ecc.).Quadro di test di integrazione multi-lingua

Sto provando a progettare un framework di test di integrazione per alcuni test end-to-end. Abbiamo già test di unità/integrazione per i singoli componenti, ma vorremmo costruire qualcosa che collauda completamente il nostro sistema distribuito (in un ambiente reale) end-to-end per assicurarci le funzionalità (in termini di comportamenti attesi del singoli componenti) sono forniti correttamente e anche l'architettura è configurata correttamente.

I primi problemi che sto affrontando è che la maggior parte della nostra UI è scritta in PHP e test di integrazione dell'interfaccia utente sono già stati scritti per questo con Cucumber e un paio di plugin in cima. Il framework di test che sto scrivendo (in Java) dovrebbe attivare questi test di funzionalità e successivamente verificare che il comportamento dei componenti correlati sia come previsto.

Ovviamente, potrei riscrivere i test dell'interfaccia utente utilizzando un componente compatibile con Java come Selenium, ma non ha senso duplicare lo sforzo.

Un'altra soluzione è eseguire i test esistenti con una chiamata exec() all'interno di Java, attendere che vengano restituiti, eventualmente analizzare l'output e procedere con le altre azioni/verifiche da eseguire.

L'incorporamento del codice PHP esistente in Java non sembra una soluzione valida dato il modo in cui i progetti sono stati scritti.

Nessuna delle soluzioni descritte mi sembra convincente. Idealmente, sarebbe bello avere una sorta di framework di integrazione multi-lingua (e multi-tecnologia) che può essere inserito all'interno degli stessi test di test suite scritti in lingue diverse e per ambienti/componenti diversi.

Qualcuno conosce qualche strumento o framework che va in questa direzione? In caso contrario, quale può essere un buon approccio a questo tipo di problemi?

risposta

0

Avete considerato il test di stack completo con qualcosa come Jmeter?

Puoi costruito prove che corrono contro il vostro software completamente implementato

  • creare un utente
  • conferma che l'utente successo screeen creare è mostrato
  • conferma che l'utente è nel database come previsto
  • cancellare utente
  • conferma utente eliminato

In questo modo stai provando il tuo interfaccia utente, la tua logica aziendale e il tuo archivio dati tutto in una volta. Può anche essere usato per eseguire test di carico.

Jmeter

+0

Grazie per l'idea, ma l'adozione di JMeter sarebbe (con il supporto di breakpoint!) significa riscrivere i test esistenti da zero. Inoltre, JMeter non interpreta Javascript e questo pone un grosso limite ai test dell'interfaccia utente. – kappolo

+0

Io sono un po 'confuso, immagino, vuoi creare una struttura di test suite che chiami i tuoi test unitari esistenti? Questo ti fornirà informazioni al di sopra e al di là dei tuoi test esistenti? – mconlin

+0

Scusa se non sono stato chiaro. Poiché voglio creare un test di integrazione completo (cioè, integrando tutti i componenti del mio sistema), voglio riutilizzare parte dei test di integrazione già esistenti e combinarli/integrarli con nuovi test. – kappolo

1

Non so se questo può aiutare, ma forse dare un'occhiata a https://github.com/nablex/glue. È un linguaggio di scripting che ho sviluppato con particolare attenzione ai test (di integrazione).

Supporta script di selenio fuori dalla scatola se si collega https://github.com/nablex/glue-selenese ed è molto estendibile.

Attualmente sto usando in un secondo cliente con alcune estensioni personalizzate per eseguire script precedenti scritti in volpe pro (io in realtà reimplementato metodi pro volpe ... brivido) e una modalità legacy in modo che siano abilitati solo per la script legacy, non nuovi. Ho anche collegato servizi web personalizzati basati su SOAP, uno dei quali può essere utilizzato per effettuare chiamate al database su un sistema remoto, offrendomi una vasta gamma di strumenti per i test a livello di integrazione.

Mentre il linguaggio di scripting è completamente funzionante, sto ancora elaborando il compendio dei metodi disponibili per impostazione predefinita e ancora cercando di posizionarlo come strumento di test di integrazione. Fammi sapere se aiuta o, se no, perché non soddisfa le tue esigenze, sempre contento del feedback! :)

PS: La classe "principale" è un buon punto di partenza per ottenere installato e funzionante in quanto contiene un client CLI che lavora