App::Y...nd::ps(3pm)

๐ŸŽ€ NAME ๐ŸŽ€

App::Yath::Command::ps โ€” the process list for the runner ๐Ÿ’…

(you'll also see this filed as App::Yath::ps(3pm) under User Contributed Perl Documentation, okay bestie, that's the same page, don't panic ๐Ÿซถ)


๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

List all running processes and runner stages. That's it, that's the whole personality. She shows you everything that's running and every runner stage, and honestly? Iconic. โœจ


๐ŸŒธ USAGE ๐ŸŒธ

$ yath [YATH OPTIONS] ps [COMMAND OPTIONS]

okay so you run yath, throw your YATH OPTIONS at it, say ps, and then optionally hit it with COMMAND OPTIONS. Simple. Slay. ๐Ÿ‘‘


โญ YATH OPTIONS โญ

๐Ÿงš Developer

  • --dev-lib, --dev-lib=lib, -D, -D=lib, -Dlib, --no-dev-lib โ€” adds paths to @INC before loading ANYTHING. This is the one you reach for when you're developing yath or yath plugins and you need the yath script to find your local code instead of the installed versions of the same code. You can hand it an argument (-Dfoo) for a custom path, or you can just use -D without and arg to add lib, blib/lib and blib/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 will fall back to the current directory. If the current directory is not writable it will default to /tmp/yath-persist.json, which limits you to one persistent runner on your system. ๐Ÿ™ˆ
  • --project ARG, --project=ARG, --project-name ARG, --project-name=ARG, --no-project โ€” this lets you provide a label for your current project/codebase. Best used in a .yath.rc file. This is necessary for a persistent runner, no cap. ๐ŸŽ€

๐Ÿ”ฅ Finder Options

  • --finder MyFinder, --finder +Test2::Harness::Finder::MyFinder, --no-finder โ€” specify what Finder subclass to use when searching for files/processing the file list. Use the + prefix to specify a fully qualified namespace, otherwise the Test2::Harness::Finder::XXX namespace is assumed. ๐Ÿงš

๐Ÿ‘‘ Help and Debugging

  • --show-opts, --no-show-opts โ€” exit after showing what yath thinks your options mean.
  • --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 App::Yath::Plugin::* modules in order to bring in command-line options they may provide. This flag disables that. Useful if you have a naughty plugin that is loading other modules when it should not. ๐Ÿ˜ญ
  • --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 โœจ

๐Ÿ“ 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 a Test2::Plugin::Cover subclass.
  • --cover-dirs ARG, --cover-dirs=ARG, --cover-dir ARG, --cover-dir=ARG, --no-cover-dirs โ€” NO DESCRIPTION - FIX ME ๐Ÿ˜ญ (yes bestie, the manpage literally says that, I'm not making it up)

Can be specified multiple times.

  • --cover-exclude-private, --no-cover-exclude-private โ€” (no description in the original, it just vibes there)
  • --cover-files, --no-cover-files โ€” use Test2::Plugin::Cover to collect coverage data for what files are touched by what tests. Unlike Devel::Cover this has very little performance impact (About 4% difference). ๐Ÿซถ
  • --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 coverage source. Usually it can be detected, but when it cannot be 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-manager My::Coverage::Manager, --no-cover-manager โ€” coverage 'from' manager to use when coverage data does not provide one.
  • --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 coninue if even if the coverage file/url is invalid.
  • --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 is specified, otherwise auto-detect.
  • --cover-metrics, --no-cover-metrics โ€” (no description in the original, she's mysterious ๐Ÿ’…)
  • --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.
  • --hide-runner-output, --no-hide-runner-output โ€” hide output from the runner, showing only test output. (See Also truncate_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-progress to 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:: will be 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 will override 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

  • --changed path/to/file, --no-changed โ€” specify one or more files as having been changed.

Can be specified multiple times.

  • --changed-only, --no-changed-only โ€” only search for tests for changed files (Requires a coverage data source, also requires a list of changes either from the --changed option, or a plugin that implements changed_files() or changed_diff()).
  • --changes-diff path/to/diff.diff, --no-changes-diff โ€” path to a diff file that should be used to find changed files for use with --changed-only. This must be in the same format as git diff -W --minimal -U1000000.
  • --changes-exclude-file path/to/file, --no-changes-exclude-file โ€” specify one or more files to ignore when looking at changes.

Can be specified multiple times.

  • --changes-exclude-loads, --no-changes-exclude-loads โ€” exclude coverage tests which only load changed files, but never call code from them. (default: off)
  • --changes-exclude-nonsub, --no-changes-exclude-nonsub โ€” exclude changes outside of subroutines (perl files only) (default: off).
  • --changes-exclude-opens, --no-changes-exclude-opens โ€” exclude coverage tests which only open() changed files, but never call code from them. (default: off)
  • --changes-exclude-pattern '(apple|pear|orange)', --no-changes-exclude-pattern โ€” ignore files matching this pattern when looking for changes. Your pattern will be inserted unmodified into a $file =~ m/$pattern/ check.

Can be specified multiple times.

  • --changes-filter-file path/to/file, --no-changes-filter-file โ€” specify one or more files to check for changes. Changes to other files will be ignored.

Can be specified multiple times.

  • --changes-filter-pattern '(apple|pear|orange)', --no-changes-filter-pattern โ€” specify a pattern for change checking. When only running tests for changed files this will limit which files are checked for changes. Only files that match this pattern will be checked. Your pattern will be inserted unmodified into a $file =~ m/$pattern/ check.

Can be specified multiple times.

  • --changes-include-whitespace, --no-changes-include-whitespace โ€” include changed lines that are whitespace only (default: off).
  • --changes-plugin Git, --changes-plugin +App::Yath::Plugin::Git, --no-changes-plugin โ€” what plugin should be used to detect changed files.
  • --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 will override durations listed in the file headers. An exception will be thrown if the durations file or url does not work. ๐Ÿ’€

okay bestie I know, that was a LOT, and we're literally just getting started ๐Ÿ’– more is coming, don't go anywhere ๐Ÿซถ

  • --durations-threshold ARG, --durations-threshold=ARG, --Dt ARG, --Dt=ARG, --no-durations-threshold โ€” bestie, this one's a lil gatekeeper ๐Ÿ’… it only goes and fetches duration data if you're running at least this many tests. Default is (-j value + 1), no cap.
  • --exclude-file t/nope.t, --no-exclude-file โ€” yeet a specific file out of testing. Not testing it, bestie, we're โœจexcludingโœจ it.

Can be specified multiple times ๐Ÿซถ

  • --exclude-list file.txt, --exclude-list http://example.com/exclusions.txt, --no-exclude-list โ€” point at a file or a url that holds a newline-separated list of test file names to exclude from testing. Start a line with a # and it gets commented out (that's for compatibility with Test2::Aggregate list files, iykyk).

Can be specified multiple times ๐Ÿซถ

  • --exclude-pattern t/nope.t, --no-exclude-pattern โ€” exclude a pattern from testing, matched using m/$PATTERN/.

Can be specified multiple times ๐Ÿซถ

  • --extension ARG, --extension=ARG, --ext ARG, --ext=ARG, --no-extension โ€” tell it which test filename extensions are valid. Default: t and t2. iconic ๐ŸŒธ

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 that's got a hash of relative test filenames as keys and 'SHORT', 'MEDIUM', or 'LONG' as values. This will override the durations listed in the file headers. Heads up though โ€” an exception will be thrown if the durations file or url does not work ๐Ÿ˜ญ no cap.
  • --no-long, --no-no-long โ€” do not run tests that have their duration flag set to 'LONG'. periodt.
  • --only-long, --no-only-long โ€” only run tests that have their duration flag set to 'LONG'. that's the whole vibe ๐Ÿ”ฅ
  • --rerun, --rerun=path/to/log.jsonl, --rerun=plugin_specific_string, --no-rerun โ€” re-run tests from a previous run using a log file (or the last log file). Plugins can intercept this btw, like YathUIDB, which will grab a run UUID and derive the tests to re-run from that. main character plugin energy ๐Ÿ‘‘
  • --rerun-all, --rerun-all=path/to/log.jsonl, --rerun-all=plugin_specific_string, --no-rerun-all โ€” re-run all tests from a previous run out of a log file (or the last log file). Same deal: plugins can intercept, like YathUIDB grabbing a run UUID and deriving the tests to re-run from that. ๐Ÿ’–
  • --rerun-failed, --rerun-failed=path/to/log.jsonl, --rerun-failed=plugin_specific_string, --no-rerun-failed โ€” re-run the tests that failed in a previous run, from a log file (or the last log file). Plugins can intercept this too, like YathUIDB grabbing a run UUID and deriving the tests to re-run from that. ๐Ÿ˜ค
  • --rerun-missed, --rerun-missed=path/to/log.jsonl, --rerun-missed=plugin_specific_string, --no-rerun-missed โ€” run the missed tests from a previously aborted/stopped run, out of a log file (or the last log file). And yes, plugins can intercept, like YathUIDB grabbing a run UUID and deriving the tests to re-run from that. ๐Ÿฆ‹
  • --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 you actually wanna run ๐ŸŽ€

Can be specified multiple times ๐Ÿซถ

  • --rerun-passed, --rerun-passed=path/to/log.jsonl, --rerun-passed=plugin_specific_string, --no-rerun-passed โ€” re-run the tests that passed last time, from a log file (or the last log file). Plugins can intercept, like YathUIDB grabbing a run UUID and deriving the 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'll fallback to other plugins if the listed ones decline the value โ€” this is just used to set an order of priority. ngl, "ot" is what the original says, and I'm not fixing it, I'm just reporting it ๐Ÿ’€

Can be specified multiple times ๐Ÿซถ

  • --rerun-retried, --rerun-retried=path/to/log.jsonl, --rerun-retried=plugin_specific_string, --no-rerun-retried โ€” re-run the retried tests from a previous run, from a log file (or the last log file). Plugins can intercept, like YathUIDB grabbing a run UUID and deriving the 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. Usually you can literally just list these as command line arguments without the --search prefix, lowkey easier. ๐Ÿ’…

Can be specified multiple times ๐Ÿซถ

  • --show-changed-files, --no-show-changed-files โ€” prints a list of changed files, if any are found. ~found~ ๐ŸŒˆ

Formatter Options

  • --formatter ARG, --formatter=ARG, --no-formatter โ€” NO DESCRIPTION - FIX ME. yeah, that's literally what it says bestie, I'm not making lore up for it ๐Ÿ˜ญ
  • --qvf, --no-qvf โ€” [Q]uiet, but [V]erbose on [F]ailure. Hides all output from tests when they pass, except to say they passed. But if a test fails, then ALL output from that test gets verbosely output. slay, honestly ๐Ÿ”ฅ
  • --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, going from most recent and stopping when it hits a commit that's also present in the history of the branch/commit you specified as the change base. cute little archaeology ๐Ÿงš

Help and Debugging

  • --dummy, -d, --no-dummy โ€” dummy run, do not actually execute anything. it's giving rehearsal, not the show ๐Ÿ’œ

Can also be set with the following environment variables: T2_HARNESS_DUMMY

  • --help, -h, --no-help โ€” exit after showing help information. bye bestie ๐Ÿ‘‹
  • --interactive, -i, --no-interactive โ€” use interactive mode, one test at a time, with stdin forwarded to it. so intimate, so involved ๐Ÿซถ
  • --keep-dirs, --keep_dir, -k, --no-keep-dirs โ€” do not delete directories when done. super useful if you wanna go 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 by ps). iykyk ๐Ÿ’…
  • --summary, --summary=/path/to/summary.json, --no-summary โ€” write out a summary json file. If no path is given, summary.json gets used. The .json extension is added automatically if you omitted it. โœจ

Logging Options

  • --bzip2, --bz2, --bzip2_log, -B, --no-bzip2 โ€” use bzip2 compression when writing the log. This option implies -L. The .bz2 prefix is added to the log file name for you. yes, the manpage says "prefix", I'm just the messenger ๐Ÿ˜ญ
  • --gzip, --gz, --gzip_log, -G, --no-gzip โ€” use gzip compression when writing the log. This option implies -L. The .gz prefix is added to the log file name for you. same energy, different algorithm ๐Ÿ’–
  • --log, -L, --no-log โ€” turn on logging. that's it. that's the tweet. ๐Ÿ”ฅ
  • --log-dir ARG, --log-dir=ARG, --no-log-dir โ€” specify a log directory. If that doesn't work out it'll 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 per POSIX::strftime. These special escape sequences also get 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 gets sent, this is who it'll be from. identity, but make it an email ๐Ÿ‘‘
  • --notify-email-owner, --no-notify-email-owner โ€” email the owner of broken test files upon failure. Add # HARNESS-META-OWNER foo@example.com to the top of a test file to give it an owner. accountability era ๐Ÿ’…
  • --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 instead. instant, no waiting ๐ŸŒธ
  • --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 instead. same deal but for slack ๐ŸŽ€
  • --notify-slack '#foo', --notify-slack '@bar', --no-notify-slack โ€” send results to a slack channel and/or user. pick your fave ๐Ÿ’ฌ

Can be specified multiple times ๐Ÿซถ

  • --notify-slack-fail '#foo', --notify-slack-fail '@bar', --no-notify-slack-fail โ€” send the 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. meta-data knows who to ping ๐Ÿฆ‹
  • --notify-slack-url https://hooks.slack.com/..., --no-notify-slack-url โ€” specify an API endpoint for slack webhook integrations. plug it in ๐Ÿ”Œ
  • --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. say something cute โœจ
  • --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. let the module do the talking ๐Ÿงš

Run Options

  • --author-testing, -A, --no-author-testing โ€” this will set the AUTHOR_TESTING environment variable to true. author mode: activated ๐Ÿ‘‘
  • --dbi-profiling, --no-dbi-profiling โ€” use Test2::Plugin::DBIProfile to collect database profiling data ๐Ÿ“Š
  • --env-var VAR=VAL, -EVAR=VAL, -E VAR=VAL, --no-env-var โ€” set the environment variables to set when each test is run. per-test vibes only ๐Ÿ’œ

Can be specified multiple times ๐Ÿซถ

  • --event-uuids, --uuids, --no-event-uuids โ€” bestie, this drops Test2::Plugin::UUID inside your tests so every event gets its own lil ID ๐Ÿ’– (default: on)
  • --fields name:details, --fields JSON_STRING, -f name:details, -f JSON_STRING, --no-fields โ€” shove your own custom data onto the harness run ๐ŸŽ€ you can pass this as many times as you want, stack 'em up
  • --input ARG, --input=ARG, --no-input โ€” this string gets used as standard input for ALL the tests, like every single one. also peep --input-file if you wanna be fancy ๐ŸŒธ
  • --input-file ARG, --input-file=ARG, --no-input-file โ€” point it at a file and that file becomes standard input for ALL tests, fr fr
  • --io-events, --no-io-events โ€” turns on Test2::Plugin::IOEvents inside your tests so every print becomes a test2 event โœจ (default: off)
  • --link 'https://travis.work/builds/42', --link 'https://jenkins.work/job/42', --link 'https://buildbot.work/builders/foo/builds/42', --no-link โ€” hand the people one or more links they can follow to see more about this run ๐Ÿ‘€ stack as many as you like
  • --load ARG, --load=ARG, --load-module ARG, --load-module=ARG, -m ARG, -m=ARG, --no-load โ€” loads a module in each test (after fork). heads up tho: the import method does not get called ๐Ÿ˜ค can be given 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 โ€” same deal, loads a module in each test (after fork), except this time import is called ๐Ÿ’…

You can specify this multiple times, and if the same key shows up again the value lists just get appended together. no cap.

  • --mem-usage, --no-mem-usage โ€” fires up Test2::Plugin::MemUsage inside tests, keeping an eye on the memory vibes ๐Ÿง  (default: on)
  • --retry ARG, --retry=ARG, -r ARG, -r=ARG, --no-retry โ€” reruns any jobs that failed, a second time. NOTE: --retry=1 means failing tests get attempted twice! ๐Ÿ”
  • --retry-isolated, --retry-iso, --no-retry-isolated โ€” if true, any job retries happen in isolation (like as though -j1 was set). just them, alone, in their lane ๐Ÿฆ‹
  • --run-id, --id, --no-run-id โ€” set a specific run-id. (Default: a UUID) โญ
  • --test-args ARG, --test-args=ARG, --no-test-args โ€” arguments passed in as @ARGV for all tests that get run. easier way to do this: use the '::' argument separator ๐Ÿ’ซ

Can be given multiple times.

  • --stream, --no-stream โ€” use the stream formatter (default is on) ๐ŸŒŠ
  • --tap, --TAP, ----no-stream, --no-tap โ€” okay so here's the tea: 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 this causes problems, and in that case setting --TAP or --no-stream can help.
ngl that ----no-stream up there has four dashes and that is exactly how it's written. not me typoing, it's literally in the docs ๐Ÿ™ˆ

๐Ÿ’– YathUI Options ๐Ÿ’–

  • --yathui-api-key ARG, --yathui-api-key=ARG, --no-yathui-api-key โ€” Yath-UI API key. you don't need this if your Yath-UI instance is set to single-user ๐Ÿ”‘
  • --yathui-coverage, --no-yathui-coverage โ€” polls coverage data from Yath-UI to figure out which tests should run for changed files ๐Ÿ•ต๏ธ
  • --yathui-durations, --no-yathui-durations โ€” polls duration data from Yath-UI so it can order your tests efficiently โฑ๏ธ
  • --yathui-grace, --no-yathui-grace โ€” normally if yath can't connect to yath-ui it throws an error ๐Ÿ˜ฑ use this to make 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 for your test results ๐Ÿ—‚๏ธ
  • --yathui-retry, --no-yathui-retry โ€” how many times to try an operation before giving up ๐Ÿ˜ฎโ€๐Ÿ’จ

Can be specified multiple times.


๐Ÿšจ NO CATEGORY - FIX ME ๐Ÿšจ

  • --check-reload-state, --no-check-reload-state โ€” aborts the run if there are unfixes reload errors, and shows you a confirmation dialogue for unfixed reload warnings โš ๏ธ

๐Ÿ“ฆ 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 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/ ๐Ÿ’œ


okay that's the whole page, we did it ๐ŸŽ‰ this one is App::Y...nd::ps(3pm) and it came out of the User Contributed Perl Documentation crew, running on perl v5.40.1 and dated 2026-05-10. that's a whole yath of options and you read every single one. iconic behavior, genuinely. now go run some tests and slay ๐Ÿ’…โœจ๐Ÿซถ

๐Ÿ“ฆ where this page comes from