Test Management Tool
Sommario
Lo strumento tmt mira a fornire un modo efficiente e confortevole per creare, eseguire, effettuare il debug e abilitare i test nella Continuous Integration (Integrazione Continua).
Implementa la [https://tmt.readthedocs.io/en/stable/spec.html](Test Metadata Specification (Specifica dei Metadati di Test) che consente di memorizzare tutti i dati necessari per l’esecuzione dei test direttamente all’interno di un repository git. La stessa configurazione può essere utilizzata per abilitare i test in Fedora CI, RHEL CI e [https://packit.dev/](Packit. I test possono essere facilmente eseguiti nell’ambiente preferito, ad esempio in una macchina virtuale, in un container o direttamente sull’host locale.
Primi Passi
Installa
Installa tmt sul tuo laptop:
sudo dnf install -y tmt # basic features, executing tests on localhost sudo dnf install -y tmt+all # install all available tmt subpackages including all dependencies
È anche possibile installare solo plugin di provisioning specifici:
sudo dnf install -y tmt+provision-container # additional dependencies for executing tests in containers sudo dnf install -y tmt+provision-virtual # support for running tests in a virtual machine using testcloud
Vedere la sezione install di tmt per ulteriori opzioni di installazione.
Repository Git
Esegui il checkout del ramo dist-git desiderato utilizzando fedpkg:
fedpkg clone -a bash cd bash git checkout f32
Oppure clona il repository del tuo progetto GitHub:
git clone https://github.com/teemtee/tmt/ cd tmt git checkout -b enable-tests
Test del Fumo
Abilitiamo un semplice smoke test utilizzando il modello di piano minimale:
$ tmt init --template mini Tree '/tmp/bash' initialized. Applying template 'mini'. Directory '/tmp/bash/plans' created. Plan '/tmp/bash/plans/example.fmf' created.
Modifica il piano appena creato secondo le tue esigenze, ad esempio in questo modo:
summary:
Basic smoke test for bash
execute:
script: bash --version
Esegui i test
Esegui i test
Esegui in sicurezza tutti i test disponibili in una macchina virtuale:
tmt run
Esegui solo i test che corrispondono al nome dato o che si trovano nella directory corrente:
tmt run test --name smoke tmt run test --name .
Mostra i risultati dettagliati dei test dell’ultima esecuzione di tmt effettuata dall’utente corrente:
tmt run --last report -fvvv
Seleziona le fasi
Scegli esplicitamente quali fasi devono essere eseguite:
tmt run discover
Questo fornirà una panoramica dei test che verrebbero eseguiti. Per elencare i singoli test, abilita la modalità dettagliata (verbose):
tmt run discover --verbose tmt run discover -v
Opzioni di provisioning
Scegli local come metodo di provisioning ma esegui tutte le fasi (--all):
tmt run --all provision --how local
Esegui all’interno di un contenitore o di una macchina virtuale:
tmt run --all provision --how container --image fedora tmt run --all provision --how virtual --image fedora-32
Controlla tutti i plugin di provisioning disponibili:
tmt run provision --help
Opzioni stampante
Installa pacchetti aggiuntivi sul guest:
tmt run --all prepare --how install --package httpd
Scarica l’ultimo pacchetto dal repository Copr fornito:
tmt run --all prepare --how install --copr @teemtee/tmt --package tmt
Utilizza l’rpm locale appena compilato o tutti gli rpm della directory locale fornita:
tmt run --all prepare --how install --package tmp/RPMS/noarch/tmt-0.20-1.fc32.noarch.rpm tmt run --all prepare --how install --directory tmp/RPMS/noarch
Controlla tutte le opzioni di preparazione disponibili:
tmt run prepare --help
Creazione di timer
Per creare test più complessi, utilizziamo il modello di piano base plan template:
tmt plan create /plans/basic --template base tmt plan create /plans/basic -t base
Aggiorna il sommario (summary) secondo le necessità, mantieni il metodo di rilevamento (discover) su fmf e scegli se i test debbano essere eseguiti come script shell (controllando solo il codice di uscita) o come test beakerlib (esaminando il journal per i risultati del test):
summary:
Check basic bash features
discover:
how: fmf
execute:
how: tmt
Test Shell
Per creare lo scheletro di un semplice test shell, utilizza il modello shell template:
$ tmt test create /tests/smoke Template (shell or beakerlib): shell Directory '/tmp/bash/tests/smoke' created. Test metadata '/tmp/bash/tests/smoke/main.fmf' created. Test script '/tmp/bash/tests/smoke/test.sh' created.
Aggiorna il file dei metadati:
summary: Check bash version contact: Petr Šplíchal <psplicha@redhat.com> test: ./test.sh
Modifica lo script di test come desiderato:
#!/bin/sh -eux tmp=$(mktemp) bash --version > $tmp grep 'GNU bash' $tmp grep 'Free Software Foundation' $tmp rm $tmp
Utilizza tmt run per verificare che il test funzioni come previsto.
Test BeakerLib
Utilizza il template beakerlib per creare un nuovo test beakerlib:
$ tmt test create /tests/smoke -t beakerlib Directory '/tmp/bash/tests/smoke' created. Test metadata '/tmp/bash/tests/smoke/main.fmf' created. Test script '/tmp/bash/tests/smoke/test.sh' created.
Aggiorna i metadati del test e il codice secondo necessità, utilizza tmt run per verificare che tutto funzioni correttamente.
Pull Requests
Quando crei la pull request, assicurati di aggiungere tutti i file creati, inclusa la directory speciale .fmf.
git add . git commit
Fedora
Per testare le tue modifiche nella Fedora CI non è necessaria alcuna configurazione aggiuntiva. Assicurati di effettuare il push delle modifiche nel tuo repository forkato, poiché il namespace fedora rpms/tests non consente il force-push o la rimozione dei branch.
git remote add fork ssh://psss@pkgs.fedoraproject.org/forks/psss/rpms/bash.git git checkout -b tests
GitHub
Per testare una pull request su GitHub, abilita l’integrazione Packit-as-a-Service e aggiungi un file di configurazione .packit.yaml:
jobs:
- job: tests
trigger: pull_request
metadata:
targets:
- fedora-all
Per maggiori dettagli consulta la documentazione di Testing Farm. Una volta abilitata l’integrazione, esegui il push del branch, crea una nuova pull request come di consueto e attendi i risultati:
git push origin -u enable-tests
Modelli
Quando crei una pull request per abilitare i test in un repository che non ha una configurazione tmt, includi un paio di suggerimenti e collegamenti per chi non ha familiarità con il nuovo strumento:
Questa pull request abilita i test nel Fedora CI utilizzando `tmt`,
il che consente anche di eseguire e sottoporre a debug i test facilmente dal proprio laptop:
Esegui i test direttamente sul tuo localhost:
sudo dnf install -y tmt
tmt run --all provision --how local
Esegui i test in una macchina virtuale:
sudo dnf install -y tmt+provision-virtual
tmt run
Controlla la documentazione per saperne di più sullo strumento:
https://docs.fedoraproject.org/en-US/ci/tmt/
Gestisci i test
Esplora i test disponibili, converti i vecchi metadati, condividi il codice dei test.
Esplora i test
Per vedere quali test sono disponibili:
tmt test ls
Per mostrare maggiori dettagli sui singoli test:
tmt test show
Per vedere una panoramica di tutti i metadati:
tmt
Explore all available options and commands using --help.
Condividi i test
Il codice dei test non deve necessariamente risiedere nello stesso repository git (ad es. lo spazio dei nomi rpm in dist-git). È possibile memorizzare i test in un repository dedicato e condividerli tra diversi componenti o versioni del prodotto. È sufficiente fare riferimento al repository nella fase di discover. Usa il modello di piano completo (full plan template) per iniziare rapidamente:
tmt plan create /plans/upstream -t full
Aggiorna l’url del repository per fare in modo che punti alla posizione corretta:
summary:
Essential command line features
discover:
how: fmf
url: https://github.com/teemtee/tmt
execute:
how: tmt
Ora sarai in grado di eseguire i test dal repository remoto. Vedi la documentazione della fase di discover per ulteriori dettagli.
Suggerimenti vari
Comandi multipli
È possibile fornire più comandi shell anche sotto l’attributo script:
summary:
Basic smoke test for bash
execute:
script:
- bash --version
- bash -c 'echo $((1+1+1))' | grep 3
See the script method documentation for details.
Installazione dipendenze
I pacchetti richiesti possono essere installati utilizzando l’attributo prepare:
summary: Basic smoke test for python3-m2crypto
prepare:
how: install
package:
- python3-setuptools
- python3-m2crypto
execute:
script: python3 -c "import M2Crypto"
Vedi la documentazione della fase di prepare per ulteriori dettagli.
Repository multipli
Nella fase di discover è possibile fare riferimento anche a più repository. In questo modo è possibile, ad esempio, eseguire facilmente sia i test upstream che quelli di Fedora all’interno di un unico piano:
discover:
- name: fedora
how: fmf
url: https://src.fedoraproject.org/tests/selinux.git
- name: upstream
how: fmf
url: https://github.com/SELinuxProject/selinux-testsuite
Vedi anche l’esempio multiple config nel repository di tmt per farti un’idea migliore.
Utilizzando Piani Multipli
È possibile utilizzare più piani per raggruppare i test rilevanti o per poter eseguire facilmente un sottoinsieme di test. Ad esempio, creiamo un piano /plans/features che copra tutti i test di funzionalità del repository git locale:
discover:
how: fmf
execute:
how: tmt
E un piano /plans/integration separato per abilitare i test di integrazione con un altro componente:
discover:
how: fmf
url: https://src.fedoraproject.org/tests/shell
execute:
how: tmt
Eseguire tutti i test da un determinato piano è quindi molto semplice:
tmt run plan --name /plans/features
Quando eseguiti nella CI, i risultati di tali piani vengono segnalati come un singolo testcase di resultsdb e vengono mostrati nelle pull request come un singolo flag. Per abilitare un risultato separato per ogni piano, crea un file ci.fmf nella radice del repository git con il seguente contenuto:
resultsdb-testcase: separate
Una volta abilitata la segnalazione separata, è possibile attivare il gating solo per i piani selezionati. Il nome del piano diventa parte del nome del testcase di resultsdb utilizzato nella configurazione gating.yaml. Vedi la documentazione del gating su Using Multiple Plans per ulteriori dettagli.
Percorso minimo
Ecco un esempio di percorso minimo per la creazione di un test:
dnf install -y tmt+all git clone https://src.fedoraproject.org/rpms/bash cd bash tmt init -t mini vim plans/example.fmf tmt run
Un esempio leggermente esteso con un modello personalizzato di test e di piano, ed esecuzione del test direttamente sull’host locale:
dnf install -y tmt+all git clone https://src.fedoraproject.org/rpms/bash cd bash tmt init tmt plan create --template base plans/smoke tmt test create --template beakerlib tests/smoke vim plans/smoke.fmf tests/smoke/* tmt run --all provision -h local git add . git commit -m "Enable basic tests" git push
Strumenti di virtualizzazione
Per eseguire in sicurezza i test all’interno di una macchina virtuale avviata sul proprio laptop, è sufficiente installare il pacchetto tmt+provision-virtual. Di default viene utilizzata la connessione di sessione, quindi non dovrebbero essere necessari altri passaggi: basta eseguire i test usando il comando tmt run. Per ulteriori opzioni, consulta i Consigli sulla Virtualizzazione della documentazione upstream.
Ulteriori informazioni
Domande
- Il tool sostituisce/depreca lo STI?
-
No, attualmente non è previsto lo smantellamento di STI. Entrambi gli approcci alla configurazione della CI,
tmtesti, possono essere utilizzati in parallelo. - Sì, questi test sono supportati in Fedora CI?
-
Sì, il supporto a Fedora CI è abilitato per tutti i branch attivi e anche per il namespace dei test.
- Quali distribuzioni Linux supporta il tool?
-
Come sistema sotto test (su cui vengono eseguiti i test) possono essere utilizzate tutte le versioni di Fedora supportate, CentOS 6+ e Red Hat Enterprise Linux 6+. Per il test runner (dove viene eseguito il comando tmt) sono richieste tutte le versioni di Fedora supportate, CentOS 8+ o Red Hat Enterprise Linux 8+.
Want to help? Learn how to contribute to Fedora Docs ›