Pārlūkot izejas kodu

Add random_suite_order option to eunit command

Option takes either 'true' or a numeric seed value. If true is passed, a
random seed is generated and used. The numeric seed value is for
repeatability.

The idea here is to root out test suites that are order dependant, or
that fail in the presence of certain orderings.
pull/3/head
Andrew Thompson pirms 11 gadiem
vecāks
revīzija
03da5e0be0
1 mainītis faili ar 28 papildinājumiem un 1 dzēšanām
  1. +28
    -1
      src/rebar_eunit.erl

+ 28
- 1
src/rebar_eunit.erl Parādīt failu

@ -150,7 +150,7 @@ run_eunit(Config, CodePath, SrcErls) ->
AllBeamFiles),
OtherBeamFiles = TestBeamFiles --
[filename:rootname(N) ++ "_tests.beam" || N <- AllBeamFiles],
ModuleBeamFiles = BeamFiles ++ OtherBeamFiles,
ModuleBeamFiles = randomize_suites(Config, BeamFiles ++ OtherBeamFiles),
%% Get modules to be run in eunit
AllModules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- AllBeamFiles],
@ -233,6 +233,33 @@ get_suites(Config) ->
Suites
end.
%%
%% == randomize suites ==
%%
randomize_suites(Config, Modules) ->
case rebar_config:get_global(Config, random_suite_order, undefined) of
undefined ->
Modules;
"true" ->
Seed = crypto:rand_uniform(1, 65535),
randomize_suites1(Modules, Seed);
String ->
try list_to_integer(String) of
Seed ->
randomize_suites1(Modules, Seed)
catch
error:badarg ->
?ERROR("Bad random seed provided: ~p~n", [String]),
?FAIL
end
end.
randomize_suites1(Modules, Seed) ->
random:seed(35, Seed, 1337),
?CONSOLE("Randomizing suite order with seed ~b~n", [Seed]),
[X||{_,X} <- lists:sort([{random:uniform(), M} || M <- Modules])].
%%
%% == get matching tests ==
%%

Notiek ielāde…
Atcelt
Saglabāt