App::Y...ojects(3pm)
β¨ App::Yath::Command::projects β¨
okay bestie, so this is a page from the User Contributed Perl Documentation collection, and the module living here is App::Yath::Command::projects. Pull up a chair, grab a strawberry π, we're doing this.
π NAME π
App::Yath::Command::projects β Run tests for multiple projects
πΈ DESCRIPTION πΈ
This command runs all the tests for each project inside a parent directory. Like, every project. All of them. No cap. π«Ά
π USAGE π
$ yath [YATH OPTIONS] projects [COMMAND OPTIONS]
π YATH OPTIONS π
π Developer π
--dev-lib,--dev-lib=lib,-D,-D=lib,-Dlib,--no-dev-libβ this one adds paths to@INCbefore literally anything gets loaded. It's giving main character energy for people developing yath itself, or yath plugins, who need the yath script to find their local code instead of the installed versions of the same code. You can hand it an argument (-Dfoo) for a custom path, or just use-Dwith no arg and it addslib,blib/libandblib/arch. π
Can be specified multiple times.
π± Environment π±
--persist-dir ARG,--persist-dir=ARG,--no-persist-dirβ where to find persistence files.--persist-file ARG,--persist-file=ARG,--pfile ARG,--pfile=ARG,--no-persist-fileβ where to find the persistence file. The default is/{system-tempdir}/project-yath-persist.json. If no project is specified then it falls back to the current directory. And if the current directory isn't writable it defaults to/tmp/yath-persist.json, which lowkey limits you to one persistent runner on your whole system. π«--project ARG,--project=ARG,--project-name ARG,--project-name=ARG,--no-projectβ lets you slap a label on your current project/codebase. Best used in a.yath.rcfile, and it is necessary for a persistent runner. periodt.
π Finder Options π
--finder MyFinder,--finder +Test2::Harness::Finder::MyFinder,--no-finderβ pick which Finder subclass gets used when searching for files and processing the file list. Use the+prefix to give a fully qualified namespace, otherwise theTest2::Harness::Finder::XXXnamespace is assumed. β¨
π Help and Debugging π
--show-opts,--no-show-optsβ exit after showing what yath thinks your options mean. (spoiler: it's usually right, it's just messy)--version,-V,--no-versionβ exit after showing a helpful usage message.
π§ Plugins π§
--no-scan-plugins,--no-no-scan-pluginsβ normally yath scans for and loads all theApp::Yath::Plugin::*modules so it can bring in whatever command-line options they provide. This flag turns that off. It's the move when you've got a naughty plugin loading other modules when it absolutely should not be. π--plugins PLUGIN,--plugins +App::Yath::Plugin::PLUGIN,--plugins PLUGIN=arg1,arg2,...,--plugin PLUGIN,--plugin +App::Yath::Plugin::PLUGIN,--plugin PLUGIN=arg1,arg2,...,-pPLUGIN,--no-pluginsβ load a yath plugin. π
Can be specified multiple times.
π COMMAND OPTIONS π
π§Ί Collector Options π§Ί
--max-open-jobs 18,--no-max-open-jobsβ the maximum number of jobs a collector can process at one time. If more jobs are pending, their output gets delayed until the earlier jobs have been processed. (Default: double the-jvalue)--max-poll-events 1000,--no-max-poll-eventsβ the maximum number of events to poll from a job before jumping to the next job. (Default: 1000)
π¨ Cover Options π¨
--cover-aggregator ByTest,--cover-aggregator ByRun,--cover-aggregator +Custom::Aggregator,--cover-agg ByTest,--cover-agg ByRun,--cover-agg +Custom::Aggregator,--no-cover-aggregatorβ choose a custom aggregator subclass.--cover-class ARG,--cover-class=ARG,--no-cover-classβ choose aTest2::Plugin::Coversubclass.--cover-dirs ARG,--cover-dirs=ARG,--cover-dir ARG,--cover-dir=ARG,--no-cover-dirsβ NO DESCRIPTION - FIX ME
Can be specified multiple times.
--cover-exclude-private,--no-cover-exclude-private,--cover-files,--no-cover-filesβ useTest2::Plugin::Coverto collect coverage data for what files are touched by what tests. UnlikeDevel::Coverthis has very little performance impact (About 4% difference). slay. π₯--cover-from path/to/log.jsonl,--cover-from http://example.com/coverage,--cover-from path/to/coverage.jsonl,--no-cover-fromβ this can be a test log, a coverage dump (old style json or new jsonl format), or a url to any of the previous. Tests will not be run if the file/url is invalid. π--cover-from-type json,--cover-from-type jsonl,--cover-from-type log,--no-cover-from-typeβ file type for the coverage source. Usually it can be detected, but when it can't you should specify."json"is old style single-blob coverage data,"jsonl"is the new by-test style,"log"is a logfile from a previous run.--cover-maybe-from path/to/log.jsonl,--cover-maybe-from http://example.com/coverage,--cover-maybe-from path/to/coverage.jsonl,--no-cover-maybe-fromβ this can be a test log, a coverage dump (old style json or new jsonl format), or a url to any of the previous. Tests will continue even if the coverage file/url is invalid. (the chill version of the one above π«Ά)--cover-maybe-from-type json,--cover-maybe-from-type jsonl,--cover-maybe-from-type log,--no-cover-maybe-from-typeβ same as"from_type"but for"maybe_from". Defaults to"from_type"if that's specified, otherwise auto-detect.--cover-metrics,--no-cover-metrics,--cover-types ARG,--cover-types=ARG,--cover-type ARG,--cover-type=ARG,--no-cover-typesβ NO DESCRIPTION - FIX ME
Can be specified multiple times.
--cover-write,--cover-write=coverage.jsonl,--cover-write=coverage.json,--no-cover-writeβ create a json or jsonl file of all coverage data seen during the run (This implies--cover-files). π
π¦ Display Options π¦
--color,--no-colorβ turn color on. Default is true if STDOUT is a TTY. (rainbow terminal, we love to see it π)--hide-runner-output,--no-hide-runner-outputβ hide output from the runner, showing only test output. (See Alsotruncate_runner_output)--no-final-table,--no-no-final-tableβ when printing final results, don't use table-style display.--no-wrap,--no-no-wrapβ do not do fancy text-wrapping, let the terminal handle it.--progress,--no-progressβ toggle progress indicators. On by default if STDOUT is a TTY. You can use--no-progressto disable the 'events seen' counter and buffered event pre-display. β³--quiet,-q,--no-quietβ be very quiet. π€«
Can be specified multiple times.
--renderers +My::Renderer,--renderers Renderer=arg1,arg2,...,--renderer +My::Renderer,--renderer Renderer=arg1,arg2,...,--no-renderersβ specify renderers, (Default:"Formatter=Test2"). Use"+"to give a fully qualified module name. Without"+","Test2::Harness::Renderer::"gets prepended to your argument.
Can be specified multiple times. If the same key is listed multiple times the value lists will be appended together.
--show-times,-T,--no-show-timesβ show the timing data for each job.--term-width 80,--term-width 200,--term-size 80,--term-size 200,--no-term-widthβ alternative to setting$TABLE_TERM_SIZE. Setting this overrides the terminal width detection to the number of characters specified.--truncate-runner-output,--no-truncate-runner-outputβ only show runner output that was generated after the current command. This is only useful with a persistent runner.--verbose,-v,--no-verboseβ be more verbose. π£
Can be specified multiple times.
π Finder Options π
--default-at-search ARG,--default-at-search=ARG,--no-default-at-searchβ specify the default file/dir search when'AUTHOR_TESTING'is set. Defaults to'./xt'. The default AT search is only used if no files were specified at the command line.
Can be specified multiple times.
--default-search ARG,--default-search=ARG,--no-default-searchβ specify the default file/dir search. Defaults to'./t','./t2', and'test.pl'. The default search is only used if no files were specified at the command line.
Can be specified multiple times.
--durations file.json,--durations http://example.com/durations.json,--no-durationsβ point at a json file or url which has a hash of relative test filenames as keys, and'SHORT','MEDIUM', or'LONG'as values. This overrides durations listed in the file headers. An exception will be thrown if the durations file or url does not work. π--durations-threshold ARG,--durations-threshold=ARG,--Dt ARG,--Dt=ARG,--no-durations-thresholdβ only fetch duration data if running at least this number of tests. Default (-jvalue + 1).--exclude-file t/nope.t,--no-exclude-fileβ exclude a file from testing.
Can be specified multiple times.
--exclude-list file.txt,--exclude-list http://example.com/exclusions.txt,--no-exclude-listβ point at a file or url which has a new line separated list of test file names to exclude from testing. Starting a line with a'#'will comment it out (for compatibility withTest2::Aggregatelist files).
Can be specified multiple times.
--exclude-pattern t/nope.t,--no-exclude-patternβ exclude a pattern from testing, matched usingm/$PATTERN/.
Can be specified multiple times.
--extension ARG,--extension=ARG,--ext ARG,--ext=ARG,--no-extensionβ specify valid test filename extensions, default:tandt2.
Can be specified multiple times.
--maybe-durations file.json,--maybe-durations http://example.com/durations.json,--no-maybe-durationsβ point at a json file or url which has a hash of relative test filenames as keys, and'SHORT','MEDIUM', or'LONG'as values. This overrides durations listed in the file headers. An exception will be thrown if the durations file or url does not work.--no-long,--no-no-longβ do not run tests that have their duration flag set to'LONG'.--only-long,--no-only-longβ only run tests that have their duration flag set to'LONG'.--rerun,--rerun=path/to/log.jsonl,--rerun=plugin_specific_string,--no-rerunβ re-run tests from a previous run from a log file (or last log file). Plugins can intercept this, such asYathUIDBwhich will grab a run UUID and derive tests to re-run from that. π--rerun-all,--rerun-all=path/to/log.jsonl,--rerun-all=plugin_specific_string,--no-rerun-allβ bestie, this one re-runs literally ALL the tests from a previous run, pulled from a log file (or the last log file if you don't hand it one). And the plugins can slide in and intercept it β likeYathUIDB, which will grab a run UUID and derive which tests to re-run from that. so extra β¨--rerun-failed,--rerun-failed=path/to/log.jsonl,--rerun-failed=plugin_specific_string,--no-rerun-failedβ same energy, but this time it only re-runs the failed tests from a previous run, from a log file (or the last log file). Plugins can intercept βYathUIDBwill grab a run UUID and derive the tests to re-run from it.--rerun-missed,--rerun-missed=path/to/log.jsonl,--rerun-missed=plugin_specific_string,--no-rerun-missedβ runs the missed tests from a previously aborted/stopped run, from a log file (or the last log file). Again, plugins can intercept, e.g.YathUIDBgrabbing a run UUID to derive what to re-run.--rerun-modes failed,missed,...,--rerun-modes all,--rerun-modes failed,--rerun-modes missed,--rerun-modes passed,--rerun-modes retried,--rerun-mode failed,missed,...,--rerun-mode all,--rerun-mode failed,--rerun-mode missed,--rerun-mode passed,--rerun-mode retried,--no-rerun-modesβ pick which test categories to run π
Can be specified multiple times
--rerun-passed,--rerun-passed=path/to/log.jsonl,--rerun-passed=plugin_specific_string,--no-rerun-passedβ re-runs the passed tests from a previous run, from a log file (or the last log file). Plugins can intercept βYathUIDBgrabs a run UUID and derives tests to re-run from that.--rerun-plugin Foo,--rerun-plugin +App::Yath::Plugin::Foo,--no-rerun-pluginβ which plugin(s) should be used for rerun. It will fall back to other plugins if the ones you listed decline the value, so this is basically just setting an order of priority π«Ά
Can be specified multiple times
--rerun-retried,--rerun-retried=path/to/log.jsonl,--rerun-retried=plugin_specific_string,--no-rerun-retriedβ re-runs the retried tests from a previous run, from a log file (or the last log file). You already know the vibe: plugins can intercept, andYathUIDBwill grab a run UUID and derive tests to re-run from that.--search ARG,--search=ARG,--no-searchβ a list of tests and test directories to use instead of the default search paths. tbh you can usually just list these straight up as command line arguments without the--searchprefix β¨
Can be specified multiple times
π Formatter Options π
--formatter ARG,--formatter=ARG,--no-formatterβ NO DESCRIPTION - FIX ME π like ok so the docs literally never got written for this one. iconic of them, honestly.--qvf,--no-qvfβ [Q]uiet, but [V]erbose on [F]ailure. When tests pass, all their output is hidden β you just get told they passed. But the second a test fails, ALL of that test's output gets verbosely dumped out. no crumbs withheld π--show-job-end,--no-show-job-endβ show output when a job ends. (Default: on)--show-job-info,--no-show-job-infoβ show the job configuration when a job starts. (Default: off, unless-vv)--show-job-launch,--no-show-job-launchβ show output for the start of a job. (Default: off unless-v)--show-run-info,--no-show-run-infoβ show the run configuration when a run starts. (Default: off, unless-vv)
πΈ Git Options πΈ
--git-change-base master,--git-change-base HEAD^,--git-change-base df22abe4,--no-git-change-baseβ find the files changed by all commits in the current branch, starting from the most recent and stopping the moment it hits a commit that's also present in the history of the branch/commit you gave as the change base π
π Help and Debugging π
--dummy,-d,--no-dummyβ dummy run, do not actually execute anything π
Can also be set with the following environment variables: T2_HARNESS_DUMMY
--help,-h,--no-helpβ exit after showing help information--interactive,-i,--no-interactiveβ use interactive mode, one test at a time, with stdin forwarded to it π«Ά--keep-dirs,--keep_dir,-k,--no-keep-dirsβ do not delete directories when done. super useful when you wanna inspect the directories used for various commands π--procname-prefix ARG,--procname-prefix=ARG,--no-procname-prefixβ add a prefix to all proc names (as seen byps).--summary,--summary=/path/to/summary.json,--no-summaryβ write out a summary json file. If you don't give a path,summary.jsongets used. The.jsonextension is added automatically if you omit it β¨
π¦ Logging Options π¦
--bzip2,--bz2,--bzip2_log,-B,--no-bzip2β usebzip2compression when writing the log. This option implies-L. The.bz2prefix is added to the log file name for you π--gzip,--gz,--gzip_log,-G,--no-gzipβ usegzipcompression when writing the log. This option implies-L. The.gzprefix is added to the log file name for you π--log,-L,--no-logβ turn on logging--log-dir ARG,--log-dir=ARG,--no-log-dirβ specify a log directory. Will fall back to the system temp dir.--log-file ARG,--log-file=ARG,-F ARG,-F=ARG,--no-log-fileβ specify the name of the log file. This option implies-L.--log-file-format ARG,--log-file-format=ARG,--lff ARG,--lff=ARG,--no-log-file-formatβ specify the format for automatically-generated log files. It gets overridden by--log-file, if that one's given. This option implies-L(Default:\$YATH_LOG_FILE_FORMAT, if that is set, or else"%!P%Y-%m-%d~%H:%M:%S~%!U~%!p.jsonl"). This is a string in which percent-escape sequences will be replaced as perPOSIX::strftime. The following special escape sequences are also replaced: (%!P: Project name followed by a~, if a project is defined, otherwise empty string) (%!U: the unique test run ID) (%!p: the process ID) (%!S: the number of seconds since local midnight UTC)
Can also be set with the following environment variables: YATH_LOG_FILE_FORMAT, TEST2_HARNESS_LOG_FORMAT
π Notification Options π
--notify-email foo@example.com,--no-notify-emailβ email the test results to the specified email address(es) π§
Can be specified multiple times
--notify-email-fail foo@example.com,--no-notify-email-failβ email the failing results to the specified email address(es)
Can be specified multiple times
--notify-email-from foo@example.com,--no-notify-email-fromβ if any email is sent, this is who it will be from--notify-email-owner,--no-notify-email-ownerβ email the owner of broken test files upon failure. Add# HARNESS-META-OWNER foo@example.comto the top of a test file to give it an owner π--notify-no-batch-email,--no-notify-no-batch-emailβ usually owner failures are sent as a single batch at the end of testing. Toggle this to send failures as they happen.--notify-no-batch-slack,--no-notify-no-batch-slackβ usually owner failures are sent as a single batch at the end of testing. Toggle this to send failures as they happen.--notify-slack '#foo',--notify-slack '@bar',--no-notify-slackβ send results to a slack channel and/or user
Can be specified multiple times
--notify-slack-fail '#foo',--notify-slack-fail '@bar',--no-notify-slack-failβ send failing results to a slack channel and/or user
Can be specified multiple times
--notify-slack-owner,--no-notify-slack-ownerβ send slack notifications to the slack channels/users listed in test meta-data when tests fail.--notify-slack-url https://hooks.slack.com/...,--no-notify-slack-urlβ specify an API endpoint for slack webhook integrations--notify-text ARG,--notify-text=ARG,--message ARG,--message=ARG,--msg ARG,--msg=ARG,--no-notify-textβ add a custom text snippet to email/slack notifications βοΈ--notify-text-module ARG,--notify-text-module=ARG,--message_module ARG,--message_module=ARG,--no-notify-text-moduleβ use the specified module to generate messages for emails and/or slack.
π₯ Run Options π₯
--author-testing,-A,--no-author-testingβ this will set theAUTHOR_TESTINGenvironment to true--dbi-profiling,--no-dbi-profilingβ useTest2::Plugin::DBIProfileto collect database profiling data--env-var VAR=VAL,-EVAR=VAL,-E VAR=VAL,--no-env-varβ set environment variables to set when each test is run.
Can be specified multiple times
--event-uuids,--uuids,--no-event-uuidsβ useTest2::Plugin::UUIDinside tests (default: on)--fields name:details,--fields JSON_STRING,-f name:details,-f JSON_STRING,--no-fieldsβ add custom data to the harness run
Can be specified multiple times
--input ARG,--input=ARG,--no-inputβ input string to be used as standard input for ALL tests. See also:--input-file--input-file ARG,--input-file=ARG,--no-input-fileβ use the specified file as standard input to ALL tests--io-events,--no-io-eventsβ useTest2::Plugin::IOEventsinside tests to turn all prints into test2 events (default: off)--link 'https://travis.work/builds/42',--link 'https://jenkins.work/job/42',--link 'https://buildbot.work/builders/foo/builds/42',--no-linkβ provide one or more links people can follow to see more about this run π
Can be specified multiple times
--load ARG,--load=ARG,--load-module ARG,--load-module=ARG,-m ARG,-m=ARG,--no-loadβ load a module in each test (after fork). The"import"method is not called.
Can be specified multiple times
--load-import Module,--load-import Module=import_arg1,arg2,...,--loadim Module,--loadim Module=import_arg1,arg2,...,-M Module,-M Module=import_arg1,arg2,...,--no-load-importβ load a module in each test (after fork). Import is called β¨
Can be specified multiple times. If the same key is listed multiple times the value lists will be appended together.
--mem-usage,--no-mem-usageβ useTest2::Plugin::MemUsageinside tests (default: on)--retry ARG,--retry=ARG,-r ARG,-r=ARG,--no-retryβ run any jobs that failed a second time. NOTE:--retry=1means failing tests will be attempted twice! π like read that again bestie.
okay we are not done yet, there's still more coming π
--retry-isolated,--retry-iso,--no-retry-isolatedβ bestie if this is true, every job retry happens in isolation, like someone secretly set-j1for it π--run-id,--id,--no-run-idβ set a specific run-id. (Default: a UUID, v mysterious of it honestly)--test-args ARG,--test-args=ARG,--no-test-argsβ the arguments you wanna pass in as@ARGVfor all the tests that get run. Pro tip: these are way easier to hand over using the::argument separator π
Can be specified multiple times
--stream,--no-streamβ use the stream formatter (default is on, slay)--tap,--TAP,----no-stream,--no-tapβ okay so the TAP format is lossy and clunky π Test2::Harness normally uses a newer streaming format to receive test results. But there are old/legacy tests where that causes problems, and if you're stuck in that situations, setting--TAPor--no-streamcan help. π«Ά
π Runner Options π
--abort-on-bail,--no-abort-on-bailβ abort all testing if a bail-out is encountered (default: on)--blib,-b,--no-blibβ (Default: include if it exists) includeblib/libandblib/archin your module path β¨--cover,--cover=-silent,1,+ignore,^t/,+ignore,^t2/,+ignore,^xt,+ignore,^test.pl,--no-coverβ use Devel::Cover to calculate test coverage. Heads up: this disables forking. If you don't specify any args, it uses these:
-silent,1,+ignore,^t/,+ignore,^t2/,+ignore,^xt,+ignore,^test.pl
--dump-depmap,--no-dump-depmapβ when you're using staged preload, dump the depmap for each stage as json files π--event-timeout SECONDS,--et SECONDS,--no-event-timeoutβ kill the test if no output arrives within the timeout period. (Default: 60 seconds). Add the# HARNESS-NO-TIMEOUTcomment to the top of a test file to disable timeouts on a per-test basis. This is the thing that stops a hung test from running forever, iconic behaviour honestly π--fail-on-resource-skip,--no-fail-on-resource-skipβ treat resource-skipped tests as failures instead of skips. When it's on, tests that would've been skipped because a resource wasn't available get marked as failing instead π¬--include ARG,--include=ARG,-I ARG,-I=ARG,--no-includeβ add a directory to your include paths
Can be specified multiple times
--job-count 4,--job-count 8:2,--jobs 4,--jobs 8:2,-j4,-j8:2,--no-job-countβ set how many concurrent jobs to run. Add a:#if you also wanna designate multiple slots per test. Like8:2means 8 slots, but each test takes 2 slots, so 4 tests run concurrently. Tests can find their concurrency assignment in theT2_HARNESS_MY_JOB_CONCURRENCYenvironment variable π§
Can also be set with the following environment variables: "YATH_JOB_COUNT", "T2_HARNESS_JOB_COUNT", "HARNESS_JOB_COUNT"
--lib,-l,--no-libβ (Default: include if it exists) includelibin your module path π--nytprof,--no-nytprofβ use Devel::NYTProf on tests. This setsaddpid=1for you, so generous of it. Works with or without fork β¨--post-exit-timeout SECONDS,--pet SECONDS,--no-post-exit-timeoutβ stop waiting post-exit after the timeout period. (Default: 15 seconds). Some tests fork and let the parent exit before writing all their output, and if Test2::Harness detects an incomplete plan after the test exits, it keeps monitoring for more events until the timeout period. Add the# HARNESS-NO-TIMEOUTcomment to the top of a test file to disable timeouts on a per-test basis π°οΈ--preload-threshold ARG,--preload-threshold=ARG,--Pt ARG,--Pt=ARG,-W ARG,-W=ARG,--no-preload-thresholdβ only do preload if at least N tests are actually gonna run. Sometimes a full preload takes longer than just running the tests, so this lets you set a minimum number of test jobs that must be run for preload to happen at all. No effect for a persistent runner. The default is 0, and that means always preload π«--preloads ARG,--preloads=ARG,--preload ARG,--preload=ARG,-P ARG,-P=ARG,--no-preloadsβ preload a module before running tests
Can be specified multiple times
--resource-timeout SECONDS,--rt SECONDS,--no-resource-timeoutβ abort the whole test run if no tests have been able to start for SECONDS seconds while there are pending tests and none running. Super useful when a resource class is broken and keeps claiming a resource will become available, which would stop yath from ever finishing π (Default: 0, meaning no timeout)--resource Port,--resource +Test2::Harness::Runner::Resource::Port,-R Port,--no-resourceβ use a resource module to assign resource assignments to individual tests
Can be specified multiple times
--runner-id ARG,--runner-id=ARG,--no-runner-idβ runner ID (usually a generated uuid)--shared-jobs-config .sharedjobslots.yml,--shared-jobs-config relative/path/.sharedjobslots.yml,--shared-jobs-config /absolute/path/.sharedjobslots.yml,--no-shared-jobs-configβ where to look for a shared slot config file. If you hand it a filename with no path, yath searches the current directory and all the parent directories for that name π--slots-per-job 2,-x2,--no-slots-per-jobβ sets how many slots each job will use (default 1). Normally this is set by the:#in-j#:#π
Can also be set with the following environment variables: "T2_HARNESS_JOB_CONCURRENCY"
--switch ARG,--switch=ARG,-S ARG,-S=ARG,--no-switchβ pass the specified switch to perl for each test. π¨ This is not compatible with preload.
Can be specified multiple times
--tlib,--no-tlibβ (Default: off) includet/libin your module path--unsafe-inc,--no-unsafe-incβ perl is removing.from@INCas a security concern, and this option keeps things from breaking for now π
Can also be set with the following environment variables: "PERL_USE_UNSAFE_INC"
--use-fork,--fork,--no-use-forkβ (default: on, except on windows) Normally tests are run by forking, which is what allows features like preloading. Turning this off globally also kills preloading compatibility, and it's slower β it's genuinely better to tag the misbehaving tests with the# HARNESS-NO-PRELOADcomment in their header so forking is only disabled for those tests π
Can also be set with the following environment variables: "!T2_NO_FORK", "T2_HARNESS_FORK", "!T2_HARNESS_NO_FORK", "YATH_FORK", "!YATH_NO_FORK"
--use-timeout,--timeout,--no-use-timeoutβ (default: on) enable/disable timeouts β³
ποΈ Workspace Options ποΈ
--clear,-C,--no-clearβ clear the work directory if it isn't already empty π§Ή--tmp-dir ARG,--tmp-dir=ARG,--tmpdir ARG,--tmpdir=ARG,-t ARG,-t=ARG,--no-tmp-dirβ use a specific temp directory (Default: use the system temp dir)
Can also be set with the following environment variables: "T2_HARNESS_TEMP_DIR", "YATH_TEMP_DIR", "TMPDIR", "TEMPDIR", "TMP_DIR", "TEMP_DIR"
--workdir ARG,--workdir=ARG,-w ARG,-w=ARG,--no-workdirβ set the work directory (Default: a new temp directory)
Can also be set with the following environment variables: "T2_WORKDIR", "YATH_WORKDIR"
π YathUI Options π
--yathui-api-key ARG,--yathui-api-key=ARG,--no-yathui-api-keyβ your Yath-UI API key. Not necessary if your Yath-UI instance is set to single-user π--yathui-coverage,--no-yathui-coverageβ poll coverage data from Yath-UI to figure out which tests should be run for changed files--yathui-durations,--no-yathui-durationsβ poll duration data from Yath-UI to help order tests efficiently β±οΈ--yathui-grace,--no-yathui-graceβ if yath can't connect to yath-ui it normally throws an error, and this makes it fail gracefully instead. You get a warning, but things keep going π«Ά--yathui-long-duration 10,--no-yathui-long-durationβ minimum duration length (in seconds) before a test goes from MEDIUM to LONG π--yathui-medium-duration 5,--no-yathui-medium-durationβ minimum duration length (in seconds) before a test goes from SHORT to MEDIUM π--yathui-mode summary,--yathui-mode qvf,--yathui-mode qvfd,--yathui-mode complete,--no-yathui-modeβ set the upload mode (default'qvfd') β¨--yathui-project ARG,--yathui-project=ARG,--no-yathui-projectβ the Yath-UI project your test results belong to π--yathui-retry,--no-yathui-retryβ how many times to try an operation before giving up
Can be specified multiple times
--yathui-upload,--no-yathui-uploadβ upload the log to Yath-UI βοΈ--yathui-url http://my-yath-ui.com/...,--uri http://my-yath-ui.com/...,--no-yathui-urlβ Yath-UI url π
π¦ SOURCE π¦
The source code repository for Test2-Harness can be found at http://github.com/Test-More/Test2-Harness/. Go star it bestie β
π MAINTAINERS π
Chad Granum <exodist@cpan.org>
π AUTHORS π
Chad Granum <exodist@cpan.org>
π COPYRIGHT π
Copyright 2026 Chad Granum <exodist7@gmail.com>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/
aaaand that's the whole page bestie, we made it π this was perl v5.40.1, dated 2026-05-10, from the App::Y...ojects(3pm) page in the User Contributed Perl Documentation. now go run some tests, you've got this π
β¨π¦
π¦ where this page comes from
- ubuntu stonking: libtest2-harness-perl 1.000172-1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms