Ho molti test eseguibili; come li gestisco?

3

Dove lavoro, stiamo gradualmente rafforzando le nostre capacità e copertura di test automatizzati.

Siamo al punto in cui abbiamo una vasta gamma di test e una configurazione di "ciò che deve essere eseguito" non è più sufficiente. Vogliamo eseguire una serie di test al momento del check in del nuovo codice; un set più grande per build notturne; un set che viene eseguito prima di un rilascio; un set che viene eseguito con hardware specifico collegato ...

Tutti i nostri test sono sotto forma di eseguibili (o, ad esempio, script python che chiamano eseguibili).

  • Supponiamo, per semplicità, che ogni eseguibile restituisca 0 in caso di successo e diverso da zero in caso di fallimento.
  • Alcuni test potrebbero avere un output aggiuntivo (es. un test di unità test avrà più test ed essere in grado di esportare i risultati in un file di output, un test di ambito più alto potrebbe avere registri che voglio salvare, ecc.).
  • Gli eseguibili non provengono tutti da un singolo tipo o framework.
  • Alcuni eseguibili di test potrebbero richiedere argomenti per definire come deve essere eseguito il test; Potrei definire più test, come chiamate allo stesso eseguibile con parametri diversi.

Quello che sto cercando quando dico "test management" è uno strumento che può fare cose come:

  • Semplifica l'aggiunta di un nuovo comando di test a una configurazione di prova.
  • Elenca quali test sono inclusi in una determinata configurazione.
  • Bello da avere: semplificare lo spostamento o la duplicazione di un comando di test da una configurazione all'altra.
  • Esegui test, compresa la gestione aggraziata dei test che si bloccano o scadono.
  • Genera un rapporto superato / non superato da una determinata esecuzione di prova.
  • Bello da avere: conserva la cronologia pass / fail per i singoli comandi di test.

So che gli strumenti per gestire i nostri test devono esistere. Ma ho avuto difficoltà a trovare gli strumenti giusti - e anche più di questo, ho avuto difficoltà a trovare la terminologia giusta. Potrei essere solo io, ma la maggior parte delle risorse I ' Abbiamo letto sui test che sembrano sorvolare sul "far funzionare l'infrastruttura in funzione". Quindi: spero ci sia una terminologia solida che mi manca o risorse per la configurazione dell'infrastruttura.

TL; DR: Quello che sto cercando sono le linee guida e la terminologia per questa parte dell'infrastruttura di test. Ho un sacco di test eseguibili, ho un sistema CI (o potremmo passare a uno nuovo, se necessario); quali sono i passaggi che devo seguire (e su cosa ho bisogno di leggere) affinché i corretti set di test possano essere eseguiti al momento giusto?

    
posta Standback 28.06.2017 - 13:19
fonte

2 risposte

3

I miei due centesimi. Tu dici:

We want one set of tests to run when new code is checked in; a larger set for nightly builds; a set that runs before a release; a set that runs with specific hardware attached

Ciascuno di questi casi è diverso. Li minaccia in modo diverso. Consiglierei di dare un'occhiata a Jenkins (o uno strumento simile). Puoi avere un server che esegue jenkins, che potrebbe:

  • Avvia una sceneggiatura ogni notte.
  • Avvia uno script quando si esegue il commit nel repository.

Anche se penso che l'ultimo sia possibile fare in teoria, non ho potuto farlo quando ho provato. Quindi un'alternativa potrebbe essere quella di aggiungere lo script al repository e, prima di spingere al master, tutti i membri del team devono eseguire lo script. Se qualcuno non riesce a farlo e rompe la build, la prenderai a mezzanotte. Alternativamente questo script potrebbe essere eseguito più volte al giorno, quindi lo prendi più rapidamente.

  • Per le altre due opzioni (hardware o versione speciale), è possibile aggiungere tali script anche al repository ed eseguirli manualmente.

Se hai già degli script Python che fanno ciò che dici, tutto ciò che ti manca è mettere un po 'di ordine in casa.

Il formato JUnit XML è riconosciuto da jenkins e altri strumenti. Se riesci a scrivere l'output dei tuoi script Python in questo formato, ti aiuterà molto nel lungo periodo. Non sono sicuro che tu possa usare Jenkins se non lo fai.

Ancora una volta, non cercare "una sola risposta per risolverli tutti". Questi casi di test sono diversi, cerca strumenti per ogni caso.

    
risposta data 28.06.2017 - 15:31
fonte
2

In primo luogo, il tuo post si legge un po 'come una domanda per una raccomandazione sugli strumenti sotto mentite spoglie (ma sono certo che sai che questo sarebbe fuori tema per questo sito). Se cerchi google per "test management system", trovi molti link (come questo: 15 migliori strumenti di gestione dei test del 2017 ).

La parte principale di ciò che stai cercando di ottenere può essere implementata usando (forse "abusando") un tipico strumento di test delle unità come NUnit o JUnit (o il modulo "unittest" per Python). Ad esempio, nel mio team di sviluppo, stiamo utilizzando NUnit con la sua interfaccia utente - non solo per i test unitari, ma anche per qualsiasi tipo di test automatizzato, compresi quelli in cui sono inclusi gli eseguibili arbitrari. NUnit ci offre le seguenti funzionalità:

  • puoi facilmente raggruppare e categorizzare i test ed eseguire (o escludere) i test per categoria
  • l'interfaccia utente offre una panoramica di tutti i test esistenti e puoi selezionare singoli o sottoinsiemi ed eseguirli in modo interattivo
  • è possibile eseguire i test tramite GUI o riga di comando (in modo da poterli integrare facilmente in qualsiasi sistema CI)
  • ottieni un rapporto superato / non superato dopo ogni esecuzione

Ovviamente, i test che eseguono eseguibili arbitrari, in particolare con una gestione aggraziata in caso di arresto anomalo o timeout, non sono nulla che si ottiene "out of the box", per questa parte abbiamo implementato un po 'di infrastruttura da soli.

Se decidi di seguire un percorso simile, aggiungere nuovi test a una configurazione o spostare test da una configurazione all'altra diventerà facile nel tempo. Sviluppa alcune convenzioni per il tuo team, scrivi alcuni brevi documenti e fornisci alcuni esempi.

Come già notato da solo, aiuta a standardizzare i test, ad esempio, rendendo ogni test un programma a riga di comando con parametri e comportamento standard simili, utilizzando convenzioni di denominazione coerenti per test e cartelle e mettendo i file di output di singoli test sempre in una cartella specifica (ad esempio, in una sottocartella sotto la cartella in cui si trova l'eseguibile o una cartella temporanea con un nome corrispondente). Ma questo non è niente che uno strumento di gestione dei test farà per te, questa parte dovrai allenarti per te.

    
risposta data 29.06.2017 - 08:15
fonte