suite = nelson.unittest.discover(targets)
suite = nelson.unittest.select(suite, Name, Value)
plan = nelson.unittest.plan(suite, Name, Value)
results = nelson.unittest.run(targets, Name, Value)
results = nelson.unittest.run(plan, Name, Value)
proposal = nelson.unittest.tuneWeights(results, Name, Value)
proposal = nelson.unittest.tuneReuse(targets, Name, Value)
status = nelson.unittest.report(results, Name, Value)
nelson.unittest.assume(condition, reason)
| Paramètre | Description |
|---|---|
| targets | un nom de module, un nom de fichier, un dossier ou un tableau de cellules de cibles. |
| Name, Value | options de selection, planification, execution et reporting. |
| Paramètre | Description |
|---|---|
| suite | structure TestSuite contenant les entrees TestCase decouvertes. |
| plan | structure TestPlan contenant les tests selectionnes, le shard, les workers et les groupes de ressources. |
| results | structure TestRunResult contenant le resume, les cas normalises, la registry et les donnees brutes de compatibilite. |
Le namespace nelson.unittest fournit l'API moderne du runner de tests.
Le runner separe la decouverte, la selection, la planification, l'execution et le reporting tout en conservant les wrappers de compatibilite test_run, test_makeref et skip_testsuite.
test_run, test_makeref et skip_testsuite sont des points d'entree de compatibilite implementes au dessus de ce namespace.
Les details internes du runner sont prives et ne font pas partie de l'API utilisateur.
Chaque test et chaque bench est execute dans un processus enfant supervise par le runner. Il n'existe pas de mode d'execution in-process pour les tests ou les benches.
Le superviseur natif capture les sorties, applique les timeouts et retourne des diagnostics comme commande, pid, timeout, raison et job id.
Les cas normalises exposent ces details natifs dans results.cases(k).diagnostics. La structure diagnostics contient kind, index, metadata, job_id, pid, timeout, reason, executable et process_arguments.
Les options de selection incluent Name, Module, File, Kind, Tags, ExcludeTags, Match et Exclude.
Kind accepte test, bug, bench, all_tests et all.
Les options d'execution incluent Workers, Timeout, StopOnFail, Retry, RetryOnlyOn, Shuffle, Seed, ShardIndex et ShardCount.
La reutilisation de processus est explicite. Les fichiers de test et de bench sans tag <--REUSE PROCESS--> sont executes dans des processus enfants separes. Les fichiers tagues peuvent reutiliser le meme processus enfant quand leur mode et leurs ressources le permettent.
Le superviseur natif planifie les fichiers avec une file dynamique ponderee. Utilisez <--WEIGHT N--> pour definir un poids de planification positif.
nelson.unittest.tuneWeights peut calculer puis appliquer explicitement ces poids versionnes dans les sources depuis un TestRunResult. Cette fonction n'utilise pas de cache de durees et simule les changements par defaut.
nelson.unittest.tuneReuse peut auditer les tags de reutilisation existants ou proposer explicitement des ajouts. La fonction utilise des campagnes natives isolees et reutilisees avec des ordres deterministes, ne consulte aucun cache et simule les changements par defaut.
Si un worker reutilisable tague crashe ou ne retourne aucun resultat, le runner relance une fois le fichier avec le chemin isole. Les timeouts sont rapportes directement.
La decouverte relit toujours les metadonnees et les tags courants. Les resultats sont affiches progressivement dans un ordre stable avec un temps d'execution sur chaque ligne.
LogDir ecrit un fichier log JSON par cas de test normalise quand il est demande.
Les formats de rapport supportes sont console, json, junit, tap et html. JUnit produit du XML, TAP suit TAP13 et HTML produit un rapport autonome dans un fichier unique.
Les rapports HTML incluent les cas les plus lents, un resume par module, des tables de cas triables, des filtres rapides, des commandes de reproduction, les donnees JSON embarquees et un sidecar JSON a cote du fichier HTML.
suite = nelson.unittest.discover('string', 'Kind', 'all_tests');
suite = nelson.unittest.select(suite, 'Match', 'strfind');
plan = nelson.unittest.plan(suite, 'Workers', 1);
results = nelson.unittest.run(plan, 'Format', 'json', 'OutputFile', [tempdir(), 'tests.json']);
proposal = nelson.unittest.tuneWeights(results);
reuseProposal = nelson.unittest.tuneReuse('string');
nelson.unittest.report(results, 'Format', 'tap', 'OutputFile', [tempdir(), 'tests.tap']);
nelson.unittest.report(results, 'Format', 'html', 'OutputFile', [tempdir(), 'tests.html']);