in reply to prove: parallel multiple shells

WWW::Mechanize::Shell runs the same test suite with different Chrome versions. For that, I wrote another wrapper that runs the test suite using prove in parallel for each Chrome version.

When the tests are not run through that wrapper, each test runs its suite using all Chrome versions found. For that I wrote a helper module to run each test suite in a loop, which is likely not what you want:

use lib 't/'; use helper; # What instances of Chrome will we try? my @instances = t::helper::browser_instances(); if (my $err = t::helper::default_unavailable) { plan skip_all => "Couldn't connect to Chrome: $@"; exit } else { plan tests => 4*@instances; }; sub new_mech { t::helper::need_minimum_chrome_version( '62.0.0.0', @_ ); WWW::Mechanize::Chrome->new( autodie => 1, @_, ); }; t::helper::run_across_instances(\@instances, \&new_mech, 4, sub { my ($browser_instance, $mech) = @_; ... });

Replies are listed 'Best First'.
Re^2: prove: parallel multiple shells
by almr (Beadle) on Aug 18, 2021 at 17:23 UTC

    Hey, cool. To my shame I can't quite figure out were the parallelization takes place... I see a NestedLoops call in WWW-Mechanize-Chrome, so that's sequential. Is it in system("$Config{ make } test"), which presumably calls prove... which looks for .t files?

    Or is it in t::helper::run_across_instances call, in the snippet above?

      Sorry - no, I leave all the parallelization still to prove. It runs all test files in parallel (well, up to a limit). prove is called by make test, as you correctly surmised.

      The run_across_instances just loops (single-tasked) through the Chrome instances.

        I see. In that case I'm not sure how I could apply your setup to my problem (multiple .t files that should run with different shells)?