Sto lavorando a un progetto molto ampio con tonnellate di test consolidati che includono alcune configurazioni dell'ambiente ragionevolmente complicate e quali no. Recentemente mi sono imbattuto in una situazione che prova alcune condizioni alla fine vere e cose del genere in cui voglio la possibilità di eseguire un test specifico molte molte volte e capire il tempo di esecuzione approssimativo per aiutarmi a capire come dovrei configurare l'attesa volte su quei test prima di presumere il fallimento. Volevo farlo via ruby, così ho potuto facilmente scaricare i risultati di rspec in blocchi json per facilità di interpretazione e modifica, poiché molti test eseguono il dump di TON di testo nel flusso sysout e non voglio davvero analizzarli tutti solo per ottenere il bit alla fine che riporta i risultati. Alla fine voglio anche la possibilità di iniettare i flag nelle parti intermedie dei test per darmi informazioni più precise sulla durata dei grani su quanto a lungo, ad esempio, una parte specifica di un test specifico viene eseguita in media.
Finora il mio tentativo si presenta così.
#some setup code to get $runnerargs configs etc
until $i >= $repetitions do
$config = RSpec.configuration
$json_formatter = RSpec::Core::Formatters::JsonFormatter.new($config.output)
$reporter = RSpec::Core::Reporter.new($json_formatter)
$config.instance_variable_set(:@reporter, $reporter)
#some other stuff
RSpec::Core::Runner.run($runnerargs)
#get results in a json file and do cool things with them
end
Il problema che sto avendo è che sembra che Ruby non riesca ad aggiornare l'ambiente all'interno di uno script per impostazione predefinita durante l'esecuzione di rspecs. Per esempio, se faccio una cosa simile a questo test in uno script di shell, funziona bene, ma mi dà un risultato davvero brutto che non voglio lavorare con. ma eseguendo le cose in questo modo, il primo test funziona bene, ma il prossimo test si blocca perché le variabili d'ambiente utilizzate all'interno della specifica del test sono cambiate durante l'esecuzione del primo test e non vengono riavviate correttamente.
Non sono sicuro che l'errore sia ruby o rspec. Ad ogni modo, qualcun altro incontra qualcosa di simile? C'è un modo per forzare ruby o rspec a chiudere completamente il vecchio ambiente e crearne uno nuovo come fa lo script di shell?