From 3496b57942281e35ba41ac121485b3a1453c86e6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 13 Oct 2022 16:28:09 +1100 Subject: [PATCH] Add convencience script to test flaky specs --- script/rspec-slow-repeat | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 script/rspec-slow-repeat diff --git a/script/rspec-slow-repeat b/script/rspec-slow-repeat new file mode 100755 index 0000000000..797ca46126 --- /dev/null +++ b/script/rspec-slow-repeat @@ -0,0 +1,39 @@ +#!/bin/bash +# +# If you suspect that a spec becomes flaky on slow machines: +# +# ./script/rspec-slow-repeat 10 spec/system/some_flaky_spec.rb +# +# You can use the resulting pass rate to asses if your code changes fixed it +# or not. In the end I would run a spec 100 times to be sure it's stable. + +if [ "$#" -lt 1 ]; then + echo "Usage: $0 [rspec params]" + echo "Example: $0 30 spec/system/admin/order_cycles/simple_spec.rb:202" + exit 1 +fi + +n="$1" +passed=0 +processors="`cat /proc/cpuinfo | grep -c processor`" + +for i in `seq $processors`; do + yes > /dev/null & +done + +export RUBY_DEBUG_ENABLE=0 +export SPRING_QUIET=true + +for i in `seq "$n"`; do + if ./bin/rspec "${@:2}" >> tmp/rspec.log; then + echo "Pass." + (( passed++ )) + else + echo " !!! Fail !!!" + fi +done + +killall yes + +pass_rate="$(( passed * 100 / n))" +echo "$passed of $n passed ($pass_rate%)"