2013-05-16 16 views
53

Abbiamo un ambiente di test distribuito con il robotremoteserver che avvia una serie di altre applicazioni e che collabora con loro come parte del test. Il test che sto cercando di eseguire mi impone di eseguire oltre un milione di test in una singola suite. Il problema qui è quando lo pybo t inizia a funzionare blocca fino a 8 giga di RAM e si traduce in prestazioni lente. Dopo un po 'si blocca.Esecuzione di una suite di test con oltre un milione di test

Per risolvere questo problema, stavo progettando di creare suite separate con meno di 100 casi ciascuna. Ma in questo caso non sono in grado di utilizzare le parole chiave degli altri server remoti avviati da altre suite. L'unico modo in cui posso usarlo è disconnettersi dal remoteserver e ricollegarlo in ogni suite, il che vanificherebbe lo scopo del test.

Non sono sicuro che qualcuno abbia trovato questo scenario. Apprezzerei se qualcuno potesse pensare a una soluzione a questo problema.

Ulteriori informazioni Un'altra cosa che aiuta a risolvere questo è se è possibile chiamare una parola chiave da una libreria (con lo stato) che viene avviato da un'altra suite?

Posso usare ottenere l'istanza di libreria quando si utilizza RIDE? Sto importando la libreria in una suite, quindi provo a ottenere l'istanza della libreria in un'altra suite. È possibile?

Continuo a ricevere il seguente errore:

AttributeError: Remote instance has no attribute 'replace'

In Suite 1 questo è quello che sto facendo:

Import Library Remote ${verifix_xmlrpc_url} WITH NAME Verifix 
${lib}= BuiltIn.Get Library Instance Verifix 
Set Global Variable ${lib} 

In Suite 2:

${lib}.remove messages ${VenueNSDQ} 
+11

Hi Amol, hai avuto qualche successo finora? Ad essere sinceri, sembra piuttosto stupido avere molti test case collegati sotto una suite di test, non riesco a immaginare che sia possibile capire la suite come unità. Penso che consiglierei di dividere la suite di test come si è fatto in unità logiche per evitare problemi. Hai provato a fare lo stesso con i tag? Un ulteriore suggerimento sarebbe quello di utilizzare pabot una volta che hai diviso alcune suite di test. Stai attento se hai bisogno di risorse condivise per qualsiasi esecuzione di test – shicky

+0

Un milione, sul serio? I casi di test sono generati automaticamente? Qual è la dimensione della dimensione del file del test case? Hai successo con i suggerimenti sopra riportati? – Rao

+5

@shicky nessun motivo per chiamare qualcuno stupido ... – Monkpit

risposta

0

Ok. Per prima cosa, non programma in python e non ho nemmeno idea di che tipo di computer stai usando o quanta memoria ha il computer o qualcos'altro sulla tua situazione con i tuoi computer. Quindi questa è solo una informazione generale ricavata dalla scrittura di programmi di sistema e dal lavoro su più computer.

Detto questo: se si stanno eseguendo enormi set di dati o un numero enorme di programmi, sarà necessario suddividere in partizioni ciò che si vuole fare in modo che si adatti ai sistemi che si stanno utilizzando. Questa è la prima parte. La seconda parte è che se si desidera parlare con programmi ad altri programmi o sistemi, è necessario impostare un tipo di utilizzo della memoria comune. So che PHP ha una cosa del genere, quindi devo supporre che anche Python abbia una cosa del genere. Si imposta l'area di memoria comune e quindi si invia l'informazione avanti e indietro tra i vari programmi. Solitamente usando una qualche forma di token per identificare ogni programma e/o sistema. In questo modo, è possibile impostare le cose in modo che una volta completata una suite di test, possa dire al prossimo set di iniziare e quindi non prendere il controllo o impantanarsi il sistema.

Se sei veramente bravo, potresti anche creare una sorta di programma di controllo che avvia un test, lo guarda fino a quando il test termina/esce, quindi avvia il test successivo. (Quindi, invece di un modo a catena per farlo, si ha un modo master/slave di farlo proprio come una relazione client/server.)

Se si utilizza una scatola di windows/os suggerirei di guardare AutoIt. AutoIt può facilmente gestire la visione di un programma eseguito e l'avvio di una nuova attività al termine di una vecchia attività. Ti consente inoltre di avere il pieno controllo sia del tuo sistema che del sistema remoto ed è stato sviluppato per aiutare ad automatizzare attività come quella che stai cercando di fare.Ho trovato (sperimentando) che AutoIt può essere utilizzato anche con box Unix/Linux come Mac e altri. Sebbene tu abbia solo i comandi che invii anziché accedere alle funzionalità di Windows.

Se si è più esperti di Python, è possibile eseguire le operazioni sopra descritte, quindi maggiore potenza. Anche se sono passati due anni da quando hai chiesto questo - spero che questo ti aiuti nei tuoi sforzi. :-)

2

Non conosco informazioni specifiche su Python, ma ciò che si potrebbe voler provare è far ruotare ogni caso di test come processo separato. Ciò ti consentirà di recuperare la memoria da ogni processo al suo completamento e potrebbe consentirti di eseguire i tuoi milioni di casi di test in sicurezza su un'unica macchina.

In genere, quando un programma richiede più memoria dal sistema operativo, lo accetta, ma non può restituirlo fino alla sua uscita. Questo è probabilmente il motivo per cui il tuo processo cade.

I processi rapidi che è possibile attivare e quindi uccidere, allevieranno questo problema di memoria .... e quindi è un passo piuttosto breve da lì a eseguire ciascuno di questi casi di test tramite rsh su un computer diverso interamente.

Spero che questo aiuti un po '.

Problemi correlati