[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7839":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":17,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},7839,"parallel_tests","grosser\u002Fparallel_tests","grosser","Ruby: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber","",null,"Ruby",3506,513,39,111,0,1,7,30.13,false,"master",true,[],"2026-06-12 02:01:45","# parallel_tests\n\n[![Gem Version](https:\u002F\u002Fbadge.fury.io\u002Frb\u002Fparallel_tests.svg)](https:\u002F\u002Frubygems.org\u002Fgems\u002Fparallel_tests)\n[![Build status](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fworkflows\u002Ftest\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Factions?query=workflow%3Atest&branch=master)\n\nSpeedup Minitest + RSpec + Turnip + Cucumber + Spinach by running parallel on multiple CPU cores.\u003Cbr\u002F>\nParallelTests splits tests into balanced groups (by number of lines or runtime) and runs each group in a process with its own database.\n\nSetup for Rails\n===============\n[RailsCasts episode #413 Fast Tests](http:\u002F\u002Frailscasts.com\u002Fepisodes\u002F413-fast-tests)\n\n### Install\n`Gemfile`:\n\n```ruby\ngem 'parallel_tests', group: [:development, :test]\n```\n\n### Add to `config\u002Fdatabase.yml`\n\nParallelTests uses 1 database per test-process.\n\u003Ctable>\n  \u003Ctr>\u003Ctd>Process number\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003C\u002Ftr>\n  \u003Ctr>\u003Ctd>ENV['TEST_ENV_NUMBER']\u003C\u002Ftd>\u003Ctd>''\u003C\u002Ftd>\u003Ctd>'2'\u003C\u002Ftd>\u003Ctd>'3'\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```yaml\ntest:\n  database: yourproject_test\u003C%= ENV['TEST_ENV_NUMBER'] %>\n```\n\n### Create additional test database(s)\n    rake parallel:create\n    rake parallel:create:\u003Cdatabase> # if using multi-db setup, \u003Cdatabase> would be `secondary` for example\n\n### Copy development schema into all test databases (repeat after migrations)\n    rake parallel:prepare\n\n### Run!\n    rake parallel:test              # Minitest\n    rake parallel:spec              # RSpec\n    rake parallel:features          # Cucumber\n    rake parallel:features-spinach  # Spinach\n\n    rake \"parallel:test[1]\" --> force 1 CPU --> 86 seconds\n    rake parallel:test      --> got 2 CPUs? --> 47 seconds\n    rake parallel:test      --> got 4 CPUs? --> 26 seconds\n    ...\n\nTest by pattern with Regex (e.g. use one integration server per subfolder \u002F see if you broke any 'user'-related tests)\n\n    rake \"parallel:test[^test\u002Funit]\" # every test file in test\u002Funit folder\n    rake \"parallel:test[user]\"  # run users_controller + user_helper + user tests\n    rake \"parallel:test['user|product']\"  # run user and product related tests\n    rake \"parallel:spec['spec\\\u002F(?!features)']\" # run RSpec tests except the tests in spec\u002Ffeatures\n\n\n### Example output\n\n    2 processes for 210 specs, ~ 105 specs per process\n    ... test output ...\n\n    843 examples, 0 failures, 1 pending\n\n    Took 29.925333 seconds\n\n### Run an arbitrary task in parallel\n```Bash\nRAILS_ENV=test parallel_test -e \"rake my:custom:task\"\n# or\nrake \"parallel:rake[my:custom:task]\"\n# limited parallelism\nrake \"parallel:rake[my:custom:task,2]\"\n```\n\n### Run migrations in all test databases (repeat after migrations)\n    rake parallel:migrate\n    rake parallel:migrate:\u003Cdatabase> # for multi-db setup\n\n### Setup environment from scratch (create db and loads schema, useful for CI)\n    rake parallel:setup\n\n### Drop all test databases\n    rake parallel:drop\n    rake parallel:drop:\u003Cdatabase> # for multi-db setup\n\n\nRunning setup or teardown once\n===================\n\n```Ruby\nrequire \"parallel_tests\"\n\n# preparation:\n# affected by race-condition: first process may boot slower than the second\n# the Process.ppid will be the pod of the process that started the parallel tests\n# when not using TEST_ENV_NUMBER we use a unique file per process because ppid would be the users shell\ndone = \"\u002Ftmp\u002Fparallel-setup-done-#{ENV['TEST_ENV_NUMBER'] ? Process.ppid : Process.pid}\"\nif ParallelTests.first_process?\n  do_something\n  File.write done, \"true\"\nelse\n  sleep 0.1 until File.exist?(done)\nend\n\n# cleanup:\n# could also use last_process? but that is just the last process to start, not the last to finish\nat_exit do\n  if ParallelTests.first_process?\n     File.unlink done\n     ParallelTests.wait_for_other_processes_to_finish\n     undo_something\n  end\nend\n```\n\nEven test group runtimes\n========================\n\nTest groups will often run for different times, making the full test run as slow as the slowest group.\n\n**Step 1**: Use these loggers (see below) to record test runtime\n\n**Step 2**: The next test run will use the recorded test runtimes (use `--runtime-log \u003Cfile>` if you wrote to a location different from default)\n\n**Step 3**: Automate upload\u002Fdownload of test runtime from your CI system [example](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_rails_example\u002Fblob\u002Fmaster\u002F.github\u002Fworkflows\u002Ftest.yml) (chunks need to be combined, an alternative is [amend](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Famend))\n\n### RSpec\n\nRspec: Add to your `.rspec_parallel` (or `.rspec`), but can also be used via `--test-options='--format x'`:\n\n    --format progress\n    --format ParallelTests::RSpec::RuntimeLogger --out tmp\u002Fparallel_runtime_rspec.log\n\n### Minitest\n\nAdd to your `test_helper.rb`:\n```ruby\n\nif ENV['RECORD_RUNTIME']\n   require 'minitest'\n   require 'parallel_tests\u002Ftest\u002Fruntime_logger'\n   # ParallelTests::Test::RuntimeLogger.logfile = \"tmp\u002Fparallel_runtime_test.log\" # where to write it\nend\n```\n\nresults will be logged when `RECORD_RUNTIME` is set, so it is not always required or overwritten.\n\nLoggers\n=======\n\nRSpec: SummaryLogger\n--------------------\n\nLog the test output without the different processes overwriting each other.\n\nAdd the following to your `.rspec_parallel` (or `.rspec`), but can also be used via `--test-options='--format x'`:\n\n    --format progress\n    --format ParallelTests::RSpec::SummaryLogger --out tmp\u002Fspec_summary.log\n\nRSpec: FailuresLogger\n-----------------------\n\nProduce pasteable command-line snippets for each failed example. For example:\n\n```bash\nrspec \u002Fpath\u002Fto\u002Fmy_spec.rb:123 # should do something\n```\n\nAdd the following to your `.rspec_parallel` (or `.rspec`), but can also be used via `--test-options='--format x'`:\n\n    --format progress\n    --format ParallelTests::RSpec::FailuresLogger --out tmp\u002Ffailing_specs.log\n\n(Not needed to retry failures, for that pass [--only-failures](https:\u002F\u002Frelishapp.com\u002Frspec\u002Frspec-core\u002Fdocs\u002Fcommand-line\u002Fonly-failures) to rspec)\n\n\nRSpec: VerboseLogger\n-----------------------\n\nPrints a single line for starting and finishing each example, to see what is currently running in each process.\n\n```\n# PID, parallel process number, spec status, example description\n[14403] [2] [STARTED] Foo foo\n[14402] [1] [STARTED] Bar bar\n[14402] [1] [PASSED] Bar bar\n```\n\nAdd the following to your `.rspec_parallel` (or `.rspec`), but can also be used via `--test-options='--format x'`:\n\n      --format ParallelTests::RSpec::VerboseLogger\n\n\nCucumber: FailuresLogger\n-----------------------\n\nLog failed cucumber scenarios to the specified file. The filename can be passed to cucumber, prefixed with '@' to rerun failures.\n\nUsage:\n\n    cucumber --format ParallelTests::Cucumber::FailuresLogger --out tmp\u002Fcucumber_failures.log\n\nOr add the formatter to the `parallel:` profile of your `cucumber.yml`:\n\n    parallel: --format progress --format ParallelTests::Cucumber::FailuresLogger --out tmp\u002Fcucumber_failures.log\n\nbut can also be used via `--test-options='--format x'`:\n\nNote if your `cucumber.yml` default profile uses `\u003C%= std_opts %>` you may need to insert this as follows `parallel: \u003C%= std_opts %> --format progress...`\n\nTo rerun failures:\n\n    cucumber @tmp\u002Fcucumber_failures.log\n\nSetup for non-rails\n===================\n\n    gem install parallel_tests\n    # go to your project dir\n    parallel_test\n    parallel_rspec\n    parallel_cucumber\n    parallel_spinach\n\n - use `ENV['TEST_ENV_NUMBER']` inside your tests to select separate db\u002Fmemcache\u002Fetc. (docker compose: expose it)\n\n - Only run a subset of files \u002F folders:\n\n    `parallel_test test\u002Fbar test\u002Fbaz\u002Ffoo_text.rb`\n\n - Pass test-options and files via `--`:\n\n    `parallel_rspec -- -t acceptance -f progress -- spec\u002Ffoo_spec.rb spec\u002Facceptance`\n\n - Pass in test options, by using the -o flag (wrap everything in quotes):\n\n    `parallel_cucumber -n 2 -o '-p foo_profile --tags @only_this_tag or @only_that_tag --format summary'`\n\nOptions are:\n\u003C!-- rake readme -->\n    -n PROCESSES                     How many processes to use, default: available CPUs\n    -p, --pattern PATTERN            run tests matching this regex pattern\n        --exclude-pattern PATTERN    exclude tests matching this regex pattern\n        --group-by TYPE              group tests by:\n                                     found - order of finding files\n                                     steps - number of cucumber\u002Fspinach steps\n                                     scenarios - individual cucumber scenarios\n                                     filesize - by size of the file\n                                     runtime - info from runtime log\n                                     default - runtime when runtime log is filled otherwise filesize\n    -m, --multiply-processes COUNT   use given number as a multiplier of processes to run\n    -s, --single PATTERN             Run all matching files in the same process\n    -i, --isolate                    Do not run any other tests in the group used by --single(-s)\n        --isolate-n PROCESSES        Use 'isolate'  singles with number of processes, default: 1\n        --highest-exit-status        Exit with the highest exit status provided by test run(s)\n        --failure-exit-code INT      Specify the exit code to use when tests fail\n        --specify-groups SPECS       Use 'specify-groups' if you want to specify multiple specs running in multiple\n                                     processes in a specific formation. Commas indicate specs in the same process,\n                                     pipes indicate specs in a new process. If SPECS is a '-' the value for this\n                                     option is read from STDIN instead. Cannot use with --single, --isolate, or\n                                     --isolate-n.  Ex.\n                                     $ parallel_tests -n 3 . --specify-groups '1_spec.rb,2_spec.rb|3_spec.rb'\n                                       Process 1 will contain 1_spec.rb and 2_spec.rb\n                                       Process 2 will contain 3_spec.rb\n                                       Process 3 will contain all other specs\n        --only-group GROUP_INDEX[,GROUP_INDEX]\n                                     Only run the given group numbers.\n                                     Changes `--group-by` default to 'filesize'.\n    -e, --exec COMMAND               execute COMMAND in parallel and with ENV['TEST_ENV_NUMBER']\n        --exec-args COMMAND          execute COMMAND in parallel with test files as arguments, for example:\n                                     $ parallel_tests --exec-args echo\n                                     > echo spec\u002Fa_spec.rb spec\u002Fb_spec.rb\n    -o, --test-options 'OPTIONS'     execute test commands with those options\n    -t, --type TYPE                  test(default) \u002F rspec \u002F cucumber \u002F spinach\n        --suffix PATTERN             override built in test file pattern (should match suffix):\n                                     '_spec.rb$' - matches rspec files\n                                     '_(test|spec).rb$' - matches test or spec files\n        --serialize-stdout           Serialize stdout output, nothing will be written until everything is done\n        --prefix-output-with-test-env-number\n                                     Prefixes test env number to the output when not using --serialize-stdout\n        --combine-stderr             Combine stderr into stdout, useful in conjunction with --serialize-stdout\n        --non-parallel               execute same commands but do not in parallel, needs --exec\n        --no-symlinks                Do not traverse symbolic links to find test files\n        --ignore-tags PATTERN        When counting steps ignore scenarios with tags that match this pattern\n        --nice                       execute test commands with low priority.\n        --runtime-log PATH           Location of previously recorded test runtimes\n        --allowed-missing COUNT      Allowed percentage of missing runtimes (default = 50)\n        --allow-duplicates           When detecting files to run, allow duplicates\n        --unknown-runtime SECONDS    Use given number as unknown runtime (otherwise use average time)\n        --first-is-1                 Use \"1\" as TEST_ENV_NUMBER to not reuse the default test environment\n        --fail-fast                  Stop all groups when one group fails (best used with --test-options '--fail-fast' if supported\n        --test-file-limit LIMIT      Limit to this number of files per test run by batching\n                                     (for windows set to ~100 to stay below 8192 max command limit, might have bugs from reusing test-env-number\n                                     and summarizing partial results)\n        --verbose                    Print debug output\n        --verbose-command            Combines options --verbose-process-command and --verbose-rerun-command\n        --verbose-process-command    Print the command that will be executed by each process before it begins\n        --verbose-rerun-command      After a process fails, print the command executed by that process\n        --quiet                      Print only tests output\n    -v, --version                    Show Version\n    -h, --help                       Show this.\n\u003C!-- rake readme -->\n\nYou can run any command in parallel with `-e` \u002F `--exec`\n\n```bash\nparallel_test -n 3 -e 'ruby -e \"puts %[hello from process #{ENV[:TEST_ENV_NUMBER.to_s].inspect}]\"'\nhello from process \"2\"\nhello from process \"\"\nhello from process \"3\"\n```\n\nand pass arguments to a command with `--exec-args`\n\n```bash\nparallel_test -n 3 --exec-args echo\nspec\u002Fa_spec.rb spec\u002Fb_spec.rb \nspec\u002Fc_spec.rb spec\u002Fd_spec.rb\nspec\u002Fe_spec.rb\n```\n\nand run multiple commands by using `sh` and `--exec-args`\n\n```bash\nparallel_test -n 3 --exec-args \"sh -c \\\"echo 'hello world' && rspec \\$@\\\" --\"\n```\n\nTIPS\n====\n\n### RSpec\n\n - Add a `.rspec_parallel` to use different options, e.g. **no --drb**\n - Remove `--loadby` from `.rspec`\n - Instantly see failures (instead of just a red F) with [rspec-instafail](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Frspec-instafail)\n - Use [rspec-retry](https:\u002F\u002Fgithub.com\u002FNoRedInk\u002Frspec-retry) (not rspec-rerun) to rerun failed tests.\n - [JUnit formatter configuration](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki#with-rspec_junit_formatter----by-jgarber)\n - Use [parallel_split_test](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_split_test) to run multiple scenarios in a single spec file, concurrently. (`parallel_tests` [works at the file-level and intends to stay that way](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fissues\u002F747#issuecomment-580216980))\n\n### Cucumber\n\n - Add a `parallel: foo` profile to your `config\u002Fcucumber.yml` and it will be used to run parallel tests\n - [ReportBuilder](https:\u002F\u002Fgithub.com\u002Frajatthareja\u002FReportBuilder) can help with combining parallel test results\n   - Supports Cucumber 2.0+ and is actively maintained\n   - Combines many JSON files into a single file\n   - Builds a HTML report from JSON with support for debug msgs & embedded Base64 images.\n\n### General\n - [ZSH] use quotes to use rake arguments `rake \"parallel:prepare[3]\"`\n - [Memcached] use different namespaces\u003Cbr\u002F>\n   e.g. `config.cache_store = ..., namespace: \"test_#{ENV['TEST_ENV_NUMBER']}\"`\n - Debug errors that only happen with multiple files using `--verbose` and [cleanser](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fcleanser)\n - `export PARALLEL_TEST_PROCESSORS=13` to override default processor count\n - `export PARALLEL_TEST_MULTIPLY_PROCESSES=.5` to override default processor multiplier\n - `export PARALLEL_RAILS_ENV=environment_name` to override the default `test` environment\n - Shell alias: `alias prspec='parallel_rspec -m 2 --'`\n - [Spring] Add the [spring-commands-parallel-tests](https:\u002F\u002Fgithub.com\u002FDocSpring\u002Fspring-commands-parallel-tests) gem to your `Gemfile` to get `parallel_tests` working with Spring.\n - `--first-is-1` will make the first environment be `1`, so you can test while running your full suite.\u003Cbr\u002F>\n   `export PARALLEL_TEST_FIRST_IS_1=true` will provide the same result\n - [email_spec and\u002For action_mailer_cache_delivery](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki)\n - [zeus-parallel_tests](https:\u002F\u002Fgithub.com\u002Fsevos\u002Fzeus-parallel_tests)\n - [Distributed Parallel Tests on CI systems)](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki\u002FDistributed-Parallel-Tests-on-CI-systems) learn how `parallel_tests` can run on distributed servers such as Travis and GitLab-CI. Also shows you how to use parallel_tests without adding `TEST_ENV_NUMBER`-backends\n - [Capybara setup](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki)\n - [Sphinx setup](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki)\n - [Capistrano setup](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki\u002FRemotely-with-capistrano) let your tests run on a big box instead of your laptop\n - Rails vs `ArgumentError: secret_key_base`: use `config.secret_key_base = Random.hex(64)`, see [rails issue](https:\u002F\u002Fgithub.com\u002Frails\u002Frails\u002Fissues\u002F53661)\n\nContribute your own gotchas to the [Wiki](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fwiki) or even better open a PR :)\n\nAuthors\n====\ninspired by [pivotal labs](https:\u002F\u002Fblog.pivotal.io\u002Flabs\u002Flabs\u002Fparallelize-your-rspec-suite)\n\n### [Contributors](https:\u002F\u002Fgithub.com\u002Fgrosser\u002Fparallel_tests\u002Fcontributors)\n - [Charles Finkel](http:\u002F\u002Fcharlesfinkel.com\u002F)\n - [Indrek Juhkam](http:\u002F\u002Furgas.eu)\n - [Jason Morrison](http:\u002F\u002Fjayunit.net)\n - [jinzhu](http:\u002F\u002Fgithub.com\u002Fjinzhu)\n - [Joakim Kolsjö](http:\u002F\u002Fwww.rubyblocks.se)\n - [Kevin Scaldeferri](http:\u002F\u002Fkevin.scaldeferri.com\u002Fblog\u002F)\n - [Kpumuk](http:\u002F\u002Fkpumuk.info\u002F)\n - [Maksim Horbul](http:\u002F\u002Fgithub.com\u002Fmhorbul)\n - [Pivotal Labs](http:\u002F\u002Fwww.pivotallabs.com)\n - [Rohan Deshpande](http:\u002F\u002Fgithub.com\u002Frdeshpande)\n - [Tchandy](http:\u002F\u002Fthiagopradi.net\u002F)\n - [Terence Lee](http:\u002F\u002Fhone.heroku.com\u002F)\n - [Will Bryant](http:\u002F\u002Fwillbryant.net\u002F)\n - [Fred Wu](http:\u002F\u002Ffredwu.me)\n - [xxx](https:\u002F\u002Fgithub.com\u002Fxxx)\n - [Levent Ali](http:\u002F\u002Fpurebreeze.com\u002F)\n - [Michael Kintzer](https:\u002F\u002Fgithub.com\u002Frockrep)\n - [nathansobo](https:\u002F\u002Fgithub.com\u002Fnathansobo)\n - [Joe Yates](http:\u002F\u002Ftitusd.co.uk)\n - [asmega](http:\u002F\u002Fwww.ph-lee.com)\n - [Doug Barth](https:\u002F\u002Fgithub.com\u002Fdougbarth)\n - [Geoffrey Hichborn](https:\u002F\u002Fgithub.com\u002Fphene)\n - [Trae Robrock](https:\u002F\u002Fgithub.com\u002Ftrobrock)\n - [Lawrence Wang](https:\u002F\u002Fgithub.com\u002Flevity)\n - [Sean Walbran](https:\u002F\u002Fgithub.com\u002Fseanwalbran)\n - [Lawrence Wang](https:\u002F\u002Fgithub.com\u002Flevity)\n - [Potapov Sergey](https:\u002F\u002Fgithub.com\u002Fgreyblake)\n - [Łukasz Tackowiak](https:\u002F\u002Fgithub.com\u002Flukasztackowiak)\n - [Pedro Carriço](https:\u002F\u002Fgithub.com\u002Fpedrocarrico)\n - [Pablo Manrubia Díez](https:\u002F\u002Fgithub.com\u002Fpmanrubia)\n - [Slawomir Smiechura](https:\u002F\u002Fgithub.com\u002Fssmiech)\n - [Georg Friedrich](https:\u002F\u002Fgithub.com\u002Fgeorg)\n - [R. Tyler Croy](https:\u002F\u002Fgithub.com\u002Frtyler)\n - [Ulrich Berkmüller](https:\u002F\u002Fgithub.com\u002Fulrich-berkmueller)\n - [Grzegorz Derebecki](https:\u002F\u002Fgithub.com\u002Fmadmax)\n - [Florian Motlik](https:\u002F\u002Fgithub.com\u002Fflomotlik)\n - [Artem Kuzko](https:\u002F\u002Fgithub.com\u002Fakuzko)\n - [Zeke Fast](https:\u002F\u002Fgithub.com\u002Fzekefast)\n - [Joseph Shraibman](https:\u002F\u002Fgithub.com\u002Fjshraibman-mdsol)\n - [David Davis](https:\u002F\u002Fgithub.com\u002Fdaviddavis)\n - [Ari Pollak](https:\u002F\u002Fgithub.com\u002Faripollak)\n - [Aaron Jensen](https:\u002F\u002Fgithub.com\u002Faaronjensen)\n - [Artur Roszczyk](https:\u002F\u002Fgithub.com\u002Fsevos)\n - [Caleb Tomlinson](https:\u002F\u002Fgithub.com\u002FcalebTomlinson)\n - [Jawwad Ahmad](https:\u002F\u002Fgithub.com\u002Fjawwad)\n - [Iain Beeston](https:\u002F\u002Fgithub.com\u002Fiainbeeston)\n - [Alejandro Pulver](https:\u002F\u002Fgithub.com\u002Falepulver)\n - [Felix Clack](https:\u002F\u002Fgithub.com\u002Ffelixclack)\n - [Izaak Alpert](https:\u002F\u002Fgithub.com\u002Fkarlhungus)\n - [Micah Geisel](https:\u002F\u002Fgithub.com\u002Fbotandrose)\n - [Exoth](https:\u002F\u002Fgithub.com\u002FExoth)\n - [sidfarkus](https:\u002F\u002Fgithub.com\u002Fsidfarkus)\n - [Colin Harris](https:\u002F\u002Fgithub.com\u002Faberant)\n - [Wataru MIYAGUNI](https:\u002F\u002Fgithub.com\u002Fgongo)\n - [Brandon Turner](https:\u002F\u002Fgithub.com\u002Fblt04)\n - [Matt Hodgson](https:\u002F\u002Fgithub.com\u002Fmhodgson)\n - [bicarbon8](https:\u002F\u002Fgithub.com\u002Fbicarbon8)\n - [seichner](https:\u002F\u002Fgithub.com\u002Fseichner)\n - [Matt Southerden](https:\u002F\u002Fgithub.com\u002Fmattsoutherden)\n - [Stanislaw Wozniak](https:\u002F\u002Fgithub.com\u002Fsponte)\n - [Dmitry Polushkin](https:\u002F\u002Fgithub.com\u002Fdmitry)\n - [Samer Masry](https:\u002F\u002Fgithub.com\u002Fsmasry)\n - [Volodymyr Mykhailyk](https:\u002Fgithub.com\u002Fvolodymyr-mykhailyk)\n - [Mike Mueller](https:\u002F\u002Fgithub.com\u002Fmmueller)\n - [Aaron Jensen](https:\u002F\u002Fgithub.com\u002Faaronjensen)\n - [Ed Slocomb](https:\u002F\u002Fgithub.com\u002Fedslocomb)\n - [Cezary Baginski](https:\u002F\u002Fgithub.com\u002Fe2)\n - [Marius Ioana](https:\u002F\u002Fgithub.com\u002Fmariusioana)\n - [Lukas Oberhuber](https:\u002F\u002Fgithub.com\u002Flukaso)\n - [Ryan Zhang](https:\u002F\u002Fgithub.com\u002Fryanus)\n - [Rhett Sutphin](https:\u002F\u002Fgithub.com\u002Frsutphin)\n - [Doc Ritezel](https:\u002F\u002Fgithub.com\u002Fohrite)\n - [Alexandre Wilhelm](https:\u002F\u002Fgithub.com\u002Fdogild)\n - [Jerry](https:\u002F\u002Fgithub.com\u002Fboblington)\n - [Aleksei Gusev](https:\u002F\u002Fgithub.com\u002Fhron)\n - [Scott Olsen](https:\u002F\u002Fgithub.com\u002Fscottolsen)\n - [Andrei Botalov](https:\u002F\u002Fgithub.com\u002Fabotalov)\n - [Zachary Attas](https:\u002F\u002Fgithub.com\u002Fsnackattas)\n - [David Rodríguez](https:\u002F\u002Fgithub.com\u002Fdeivid-rodriguez)\n - [Justin Doody](https:\u002F\u002Fgithub.com\u002Fjustindoody)\n - [Sandeep Singh](https:\u002F\u002Fgithub.com\u002Fsandeepnagra)\n - [Calaway](https:\u002F\u002Fgithub.com\u002Fcalaway)\n - [alboyadjian](https:\u002F\u002Fgithub.com\u002Falboyadjian)\n - [Nathan Broadbent](https:\u002F\u002Fgithub.com\u002Fndbroadbent)\n - [Vikram B Kumar](https:\u002F\u002Fgithub.com\u002Fv-kumar)\n - [Joshua Pinter](https:\u002F\u002Fgithub.com\u002Fjoshuapinter)\n - [Zach Dennis](https:\u002F\u002Fgithub.com\u002Fzdennis)\n - [Jon Dufresne](https:\u002F\u002Fgithub.com\u002Fjdufresne)\n - [Eric Kessler](https:\u002F\u002Fgithub.com\u002Fenkessler)\n - [Adis Osmonov](https:\u002F\u002Fgithub.com\u002Fadis-io)\n - [Josh Westbrook](https:\u002F\u002Fgithub.com\u002Fjoshwestbrook)\n - [Jay Dorsey](https:\u002F\u002Fgithub.com\u002Fjaydorsey)\n - [hatsu](https:\u002F\u002Fgithub.com\u002Fhatsu38)\n - [Mark Huk](https:\u002F\u002Fgithub.com\u002Fvimutter)\n - [Johannes Vetter](https:\u002F\u002Fgithub.com\u002Fjohvet)\n - [Michel Filipe](https:\u002F\u002Fgithub.com\u002Fmfilipe)\n\n[Michael Grosser](http:\u002F\u002Fgrosser.it)\u003Cbr\u002F>\nmichael@grosser.it\u003Cbr\u002F>\nLicense: MIT\n","grosser\u002Fparallel_tests 是一个用于加速 Ruby 测试的工具，通过并行运行测试用例来提高 RSpec、Test::Unit 和 Cucumber 等测试框架的速度。其核心功能在于能够将测试任务分割成多个平衡的组，并在不同的 CPU 核心上并行执行这些测试组，每组测试使用独立的数据库以避免冲突。此外，它还支持根据测试文件的大小或运行时间自动分组，从而优化整体测试效率。适用于需要快速迭代开发且对测试速度有较高要求的场景，如持续集成环境中的自动化测试流程。",2,"2026-06-11 03:14:41","top_language"]