Skip to main content

test run

ExĂ©cute des tests unitaires pour les requĂȘtes QL.

Qui peut utiliser cette fonctionnalité ?

CodeQL est disponible pour les types de rĂ©fĂ©rentiels suivants :

Remarque

Ce contenu dĂ©crit la version la plus rĂ©cente de CodeQL CLI. Pour plus d’informations sur cette version, consultez https://github.com/github/codeql-cli-binaries/releases.

Pour voir les dĂ©tails des options disponibles pour cette commande dans une version antĂ©rieure, exĂ©cutez la commande avec l’option --help dans votre terminal.

Synopsis

Shell
codeql test run [--threads=<num>] [--ram=<MB>] <options>... -- <test|dir>...

Description

ExĂ©cute des tests unitaires pour les requĂȘtes QL.

Options

Options principales

<test|dir>...

Chaque argument est l’un des Ă©lĂ©ments suivants :

  • Fichier .ql ou .qlref qui dĂ©finit un test Ă  exĂ©cuter.
  • RĂ©pertoire dans lequel les tests Ă  exĂ©cuter sont recherchĂ©s de façon rĂ©cursive.

--failing-exitcode=<code>

[AvancĂ©] DĂ©finit le code de sortie Ă  produire en cas d’échec. GĂ©nĂ©ralement 1, mais les outils qui analysent la sortie peuvent trouver utile de la dĂ©finir sur 0.

--format=<fmt>

SĂ©lectionne le format de sortie. Choix possibles :

text (par dĂ©faut)  : Rendu textuel lisible par les ĂȘtres humains.

json : tableau JSON des objets de rĂ©sultat de test diffusĂ© en continu.

betterjson : tableau JSON des objets d’évĂ©nements diffusĂ© en continu.

jsonz : flux d’objets de rĂ©sultat de test JSON se terminant par zĂ©ro.

betterjsonz : flux d’objets d’évĂ©nements JSON se terminant par zĂ©ro.

Pour les formats betterjson et betterjsonz, chaque Ă©vĂ©nement a une propriĂ©tĂ© type spĂ©cifiant le type de l’évĂ©nement. De nouveaux types d’évĂ©nements peuvent ĂȘtre ajoutĂ©s Ă  l’avenir. Les consommateurs doivent donc ignorer tout Ă©vĂ©nement avec une propriĂ©tĂ© kind non reconnue.

--[no-]keep-databases

[AvancĂ©] Conserve les bases de donnĂ©es extraites pour exĂ©cuter les requĂȘtes de test, mĂȘme si tous les tests d’un rĂ©pertoire rĂ©ussissent. (La base de donnĂ©es reste toujours prĂ©sente quand des tests Ă©chouent.)

--[no-]fast-compilation

[DĂ©prĂ©ciĂ©] [AvancĂ©] Omet les Ă©tapes d’optimisation particuliĂšrement lentes lors de la compilation des requĂȘtes de test.

--[no-]learn

[AvancĂ©] Lorsqu’un test produit une sortie inattendue, au lieu de le mettre en Ă©chec, met Ă  jour son fichier .expected pour le faire correspondre Ă  la sortie actuelle et ainsi le faire rĂ©ussir. Les tests peuvent quand mĂȘme Ă©chouer dans ce mode, par exemple si la crĂ©ation d’une base de donnĂ©es de test Ă  interroger ne rĂ©ussit pas.

--consistency-queries=<dir>

[AvancĂ©] RĂ©pertoire avec des requĂȘtes de cohĂ©rence qui seront exĂ©cutĂ©es pour chaque base de donnĂ©es de test. Ces requĂȘtes ne doivent pas produire de sortie (sauf lorsqu’elles rencontrent un problĂšme), sauf si le rĂ©pertoire de test inclut un sous-rĂ©pertoire CONSISTENCY avec un fichier .expected. Cette option est principalement utile pour tester les extracteurs.

--[no-]check-databases

[AvancĂ©] ExĂ©cute codeql dataset check sur chaque base de donnĂ©es de test créée et signale un Ă©chec si elle dĂ©tecte des incohĂ©rences. Cette option est utile lors du test des extracteurs. Si la vĂ©rification est (temporairement !) censĂ©e Ă©chouer pour une base de donnĂ©es en particulier, placez un fichier DB-CHECK.expected dans le rĂ©pertoire de test.

--[no-]show-extractor-output

[AvancĂ©] Affiche la sortie des scripts d’extracteur qui crĂ©ent les bases de donnĂ©es de test. Peut ĂȘtre utile lors du dĂ©veloppement ou de la modification de cas de test. Attention, cela peut gĂ©nĂ©rer une sortie dupliquĂ©e ou incorrecte si vous l’utilisez avec plusieurs threads !

-M, --ram=<MB>

DĂ©finit la quantitĂ© totale de RAM que l’exĂ©cuteur de test doit ĂȘtre autorisĂ© Ă  utiliser.

--slice=<N/M>

[AvancĂ©] Divisez les cas de test en M tranches de taille Ă  peu prĂšs Ă©gale et ne traitez que le Nth d’entre elles. Cela peut ĂȘtre utilisĂ© pour la parallĂ©lisation manuelle du processus de test.

--[no-]strict-test-discovery

[AvancĂ©] Utilise uniquement des requĂȘtes qui peuvent ĂȘtre fortement identifiĂ©es en tant que tests. Ce mode tente de faire la distinction entre les fichiers .ql qui dĂ©finissent des tests unitaires et les fichiers .ql destinĂ©s Ă  ĂȘtre des requĂȘtes utiles. Cette option est utilisĂ©e par les outils, tels que les IDE, qui doivent identifier tous les tests unitaires dans une arborescence de rĂ©pertoires sans avoir besoin de savoir au prĂ©alable comment les fichiers y sont organisĂ©s.

Dans un pack QL dont qlpack.yml dĂ©clare un rĂ©pertoire tests, tous les fichiers de ce rĂ©pertoire sont considĂ©rĂ©s comme des tests, et les fichiers .ql et .ql en dehors de celui-ci sont ignorĂ©s. Dans un pack QL qui ne dĂ©clare pas de rĂ©pertoire tests, un fichier .ql est identifiĂ© comme test uniquement s’il a un fichier .expected correspondant.

À des fins de cohĂ©rence, les fichiers .qlref sont limitĂ©s par les mĂȘmes rĂšgles que les fichiers .ql, mĂȘme si un fichier .qlref ne peut pas vraiment ĂȘtre un non-test.

Options pour rechercher les bibliothÚques et les extracteurs utilisés par les tests

--search-path=<dir>[:<dir>...]

Liste des rĂ©pertoires sous lesquels les packs QL peuvent ĂȘtre trouvĂ©s. Chaque rĂ©pertoire peut ĂȘtre un pack QL (ou un bundle de packs contenant un fichier .codeqlmanifest.json Ă  la racine) ou le parent immĂ©diat d’un ou plusieurs de ces rĂ©pertoires.

Si le chemin contient plusieurs rĂ©pertoires, leur ordre dĂ©finit la prioritĂ© entre eux : quand un nom de pack qui doit ĂȘtre rĂ©solu est mis en correspondance dans plusieurs arborescences de rĂ©pertoires, celle donnĂ©e en premier gagne.

Le pointage de ce chemin vers une extraction du dĂ©pĂŽt CodeQL open source devrait fonctionner lors de l’interrogation d’un des langages qui y rĂ©sident.

Si vous avez extrait le dĂ©pĂŽt CodeQL en tant que frĂšre de la chaĂźne d’outils CodeQL dĂ©compressĂ©e, vous n’avez pas besoin de donner cette option ; ces rĂ©pertoires frĂšres sont toujours recherchĂ©s pour les packs QL qui ne peuvent pas ĂȘtre trouvĂ©s autrement. (Si cette valeur par dĂ©faut ne fonctionne pas, il est fortement recommandĂ© de configurer --search-path une fois pour toutes dans un fichier de configuration par utilisateur).

(Remarque : Sur Windows, le sĂ©parateur de chemin est ;.)

--additional-packs=<dir>[:<dir>...]

Si cette liste de rĂ©pertoires est donnĂ©e, des packs y sont recherchĂ©s avant ceux indiquĂ©s dans --search-path. L’ordre entre eux n’a pas d’importance ; il s’agit d’une erreur si un nom de pack est trouvĂ© dans deux rĂ©pertoires diffĂ©rents de cette liste.

Cette option est utile si vous dĂ©veloppez temporairement une nouvelle version d’un pack qui apparaĂźt aussi dans le chemin par dĂ©faut. En revanche, il n’est pas recommandĂ© de remplacer cette option dans un fichier de configuration ; certaines actions internes ajoutent cette option Ă  la volĂ©e, remplaçant toute valeur configurĂ©e.

(Remarque : Sur Windows, le sĂ©parateur de chemin est ;.)

--library-path=<dir>[:<dir>...]

[AvancĂ©] Liste facultative des rĂ©pertoires qui sont ajoutĂ©s au chemin de recherche d’importation brut pour les bibliothĂšques QL. Doit ĂȘtre utilisĂ© seulement si vous utilisez des bibliothĂšques QL qui n’ont pas Ă©tĂ© empaquetĂ©es en tant que packs QL.

(Remarque : Sur Windows, le sĂ©parateur de chemin est ;.)

--dbscheme=<file>

[AvancĂ©] DĂ©finit explicitement les requĂȘtes de schĂ©ma de base de donnĂ©es Ă  compiler. Ne doit ĂȘtre donnĂ© que par les appelants qui sont extrĂȘmement sĂ»rs de ce qu’ils font.

--compilation-cache=<dir>

[Avancé] Spécifie un répertoire supplémentaire à utiliser comme cache de compilation.

--no-default-compilation-cache

[AvancĂ©] N’utilise pas de caches de compilation dans des emplacements standard, comme dans le pack QL contenant la requĂȘte ou dans le rĂ©pertoire de la chaĂźne d’outils CodeQL.

Options pour configurer le gestionnaire de package CodeQL

--registries-auth-stdin

Permet de vous authentifier auprÚs des registres de conteneurs GitHub Enterprise Server en passant une liste de paires <registry_url>=<token> séparées par des virgules.

Par exemple, vous pouvez passer https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 pour vous authentifier auprĂšs de deux instances GitHub Enterprise Server.

Cela remplace les variables d’environnement CODEQL_REGISTRIES_AUTH et GITHUB_TOKEN. Si vous avez seulement besoin de vous authentifier auprùs du registre de conteneurs github.com, vous pouvez vous authentifier en utilisant l’option plus simple --github-auth-stdin.

--github-auth-stdin

Permet de vous authentifier auprĂšs du registre de conteneurs github.com en passant un jeton github.com GitHub Apps ou un jeton d’accĂšs personnel via une entrĂ©e standard.

Pour vous authentifier auprùs des registres de conteneurs GitHub Enterprise Server, passez --registries-auth-stdin ou utilisez la variable d’environnement CODEQL_REGISTRIES_AUTH.

Cela remplace la variable d’environnement GITHUB_TOKEN.

Options pour contrĂŽler la compilation de requĂȘte

--no-release-compatibility

[Avancé] Utilise les fonctionnalités les plus récentes du compilateur, au détriment de la portabilité.

Parfois, les nouvelles fonctionnalitĂ©s du langage QL et les optimisations de l’évaluateur sont prises en charge par l’évaluateur QL quelques versions avant qu’elles ne soient activĂ©es par dĂ©faut dans le compilateur QL. Cela permet de garantir que les performances dont vous bĂ©nĂ©ficiez lors du dĂ©veloppement de requĂȘtes dans la derniĂšre version de CodeQL peuvent ĂȘtre atteintes par des versions lĂ©gĂšrement plus anciennes qui peuvent encore ĂȘtre utilisĂ©es pour l’Analyse du code ou les intĂ©grations CI.

Si la compatibilitĂ© de vos requĂȘtes avec d’autres versions (antĂ©rieures ou ultĂ©rieures) de CodeQL n’est pas un souci pour vous, vous pouvez parfois atteindre des performances un peu meilleures en utilisant cet indicateur pour activer les amĂ©liorations rĂ©centes du compilateur dĂšs le dĂ©but.

Dans les versions pour lesquelles il n’y a pas d’amĂ©liorations rĂ©centes Ă  activer, cette option ne fait rien. Par consĂ©quent, vous pouvez sans problĂšme la dĂ©finir une fois pour toutes dans votre fichier de configuration CodeQL global.

Disponible depuis v2.11.1.

Options qui contrĂŽlent l’évaluation des requĂȘtes de test

--[no-]tuple-counting

[AvancĂ©] Affiche le nombre de tuples pour chaque Ă©tape d’évaluation dans les journaux de l’évaluateur de requĂȘtes. Si l’option --evaluator-log est fournie, les nombres de tuples sont inclus dans les journaux JSON textuels et structurĂ©s gĂ©nĂ©rĂ©s par la commande. (Cela peut ĂȘtre utile pour l’optimisation des performances du code QL complexe.)

--timeout=<seconds>

[AvancĂ©] DĂ©finit la durĂ©e du dĂ©lai d’expiration pour l’évaluation de la requĂȘte, en secondes.

La fonctionnalitĂ© de dĂ©lai d’expiration est destinĂ©e Ă  intercepter les cas oĂč l’évaluation d’une requĂȘte complexe durerait « indĂ©finiment Â». Il ne s’agit pas d’un moyen efficace de limiter la durĂ©e totale de l’évaluation de la requĂȘte. L’évaluation est autorisĂ©e Ă  se poursuivre tant que chaque partie du calcul se termine dans le dĂ©lai d’expiration qui lui a Ă©tĂ© imparti sĂ©parĂ©ment. Pour l’instant, ces parties sont des « couches RA Â» de la requĂȘte optimisĂ©e, mais cela peut changer.

Si aucun dĂ©lai d’expiration n’est spĂ©cifiĂ© ou que 0 est fourni, aucun dĂ©lai n’est dĂ©fini (sauf pour codeql test run, oĂč le dĂ©lai d’expiration par dĂ©faut est de 5 minutes).

-j, --threads=<num>

Utilise le nombre de threads spĂ©cifiĂ© pour Ă©valuer les requĂȘtes.

La valeur par dĂ©faut est de 1. Vous pouvez passer 0 pour utiliser un thread par cƓur sur la machine ou -N pour laisser N cƓurs inutilisĂ©s (sauf si au moins un thread est toujours utilisĂ©).

Options pour contrĂŽler la sortie des journaux structurĂ©s de l’évaluateur

--evaluator-log=<file>

[AvancĂ©] GĂ©nĂšre des journaux structurĂ©s sur les performances de l’évaluateur dans le fichier donnĂ©. Le format de ce fichier journal est susceptible d’ĂȘtre modifiĂ© sans prĂ©avis, mais il s’agit d’un flux d’objets JSON sĂ©parĂ©s par deux caractĂšres de nouvelle ligne (par dĂ©faut) ou un seul si l’option --evaluator-log-minify est transmise. Utilisez codeql generate log-summary <file> pour produire un rĂ©sumĂ© plus stable de ce fichier et Ă©vitez d’analyser le fichier directement. Le fichier est remplacĂ©, s’il existe dĂ©jĂ .

--evaluator-log-minify

[AvancĂ©] Si l’option --evaluator-log est transmise, le passage de cette option rĂ©duit Ă©galement la taille du journal JSON produit, mais celui-ci devient beaucoup moins lisible par les ĂȘtres humains en contrepartie.

Options pour vérifier les fichiers TRAP importés

--[no-]check-undefined-labels

[Avancé] Signale les erreurs pour les étiquettes non définies.

--[no-]check-unused-labels

[Avancé] Signale les erreurs pour les étiquettes non utilisées.

--[no-]check-repeated-labels

[Avancé] Signale les erreurs pour les étiquettes répétées.

--[no-]check-redefined-labels

[Avancé] Signale les erreurs pour les étiquettes redéfinies.

--[no-]check-use-before-definition

[Avancé] Signale les erreurs pour les étiquettes utilisées avant leur définition.

--[no-]fail-on-trap-errors

[AvancĂ©] Sort une valeur non nulle si une erreur se produit lors de l’importation d’un fichier TRAP.

--[no-]include-location-in-star

[AvancĂ©] Construit des ID d’entitĂ© qui encodent l’emplacement dans le fichier TRAP dont ils proviennent. Peut ĂȘtre utile pour le dĂ©bogage des gĂ©nĂ©rateurs TRAP, mais prend beaucoup d’espace dans le jeu de donnĂ©es.

--[no-]linkage-aware-import

[AvancĂ©] ContrĂŽle si l’importation de jeu de donnĂ©es codeql prend en compte les liaisons (par dĂ©faut) ou non. Sur les projets dans lesquels cette partie de la crĂ©ation de base de donnĂ©es consomme trop de mĂ©moire, la dĂ©sactivation de cette option peut les aider Ă  progresser au dĂ©triment de la complĂ©tion de la base de donnĂ©es.

Disponible depuis v2.15.3.

Options courantes

-h, --help

Affiche ce texte d’aide.

-J=<opt>

[AvancĂ©] Donne une option Ă  l’environnement JVM exĂ©cutant la commande.

(Attention, les options contenant des espaces ne sont pas gérées correctement.)

-v, --verbose

Augmente de façon incrémentielle le nombre de messages de progression affichés.

-q, --quiet

Diminue de façon incrémentielle le nombre de messages de progression affichés.

--verbosity=<level>

[Avancé] Définit explicitement le niveau de détail sur errors, warnings, progress, progress+, progress++ ou progress+++. Remplace -v et -q.

--logdir=<dir>

[AvancĂ©] Écrit des journaux dĂ©taillĂ©s dans un ou plusieurs fichiers du rĂ©pertoire donnĂ©, avec des noms gĂ©nĂ©rĂ©s qui incluent des horodatages et le nom de la sous-commande en cours d’exĂ©cution.

(Pour écrire un fichier journal avec un nom sur lequel vous avez un contrÎle total, donnez plutÎt --log-to-stderr et redirigez stderr comme vous le souhaitez.)

--common-caches=<dir>

[AvancĂ©] ContrĂŽle l’emplacement des donnĂ©es en cache sur le disque qui persisteront entre plusieurs exĂ©cutions de l’interface CLI, telles que les packs QL tĂ©lĂ©chargĂ©s et les plans de requĂȘte compilĂ©s. S’il n’est pas dĂ©fini explicitement, il s’agit par dĂ©faut d’un rĂ©pertoire nommĂ© .codeql dans le rĂ©pertoire de base de l’utilisateur. S’il n’existe pas dĂ©jĂ , il est créé.

Disponible depuis v2.15.2.