require 'rubygems' require 'cucumber' require 'cucumber/rake/task' require 'parallel' require 'json' require 'yard' require 'fileutils' task :cleanup do puts ' ========Deleting old reports and logs=========' FileUtils.rm_rf('reports') File.delete('cucumber_failures.log') if File.exist?('cucumber_failures.log') File.new('cucumber_failures.log', 'w') Dir.mkdir('reports') end task :parallel_run do puts '===== Executing Tests in parallel' system 'bundle exec parallel_cucumber features/ -o "-p android" -n 1' puts ' ====== Parallel execution finished and cucumber_failure.log created =========' end task :rerun do if File.size('cucumber_failures.log') == 0 puts '==== No failures. Everything Passed =========' else puts ' =========Re-running Failed Scenarios=============' system 'bundle exec cucumber @cucumber_failures.log -f pretty' end end task parallel_cucumber: [:cleanup, :parallel_run, :rerun] YARD::Rake::YardocTask.new(:yard) do |t| t.files = ['features/**/*.feature', 'features/**/*.rb, lib/**/*.rb'] end Cucumber::Rake::Task.new(:sauce) do |t| t.cucumber_opts = 'features -p sauce --format pretty --profile html' end Cucumber::Rake::Task.new(:ios) do |t| t.cucumber_opts = 'features OS=ios features -t @ios' end Cucumber::Rake::Task.new(:android) do |t| t.cucumber_opts = 'features OS=android features -t @android' end task :cuke_sniffer do system('bundle exec cuke_sniffer --out html reports/cuke_sniffer.html') end task :rubocop do system('bundle exec rubocop') end def run_android_tests system('bundle exec cucumber OS=android features -t @android') end def run_android_tests_tc system('bundle exec cucumber OS=android features -t @android -f TeamCityFormatter::Formatter -f html -o reports/report.html') end def run_ios_tests system('bundle exec cucumber OS=ios features -t @ios') end def run_ios_tests_tc system('bundle exec cucumber OS=ios FF=tablet features -t @ios -f TeamCityFormatter::Formatter -f html -o reports/report.html') end task :Nexus_9_Device do run_android_tests_tc end task :iPad_mini_Device do run_ios_tests_tc end multitask test_android: [:Nexus_9_Device] do puts 'Running Android devices automation' end multitask test_ios: [:iPad_mini_Device] do puts 'Running iOS devices automation' end