rainforest_ruby_runtime 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d12bd4da6f90002d9083b6b02f4a35fce42df209
4
- data.tar.gz: caabdbef344fb27cf6e0cede1b9209ce66db6579
3
+ metadata.gz: 1504bf22a8dea19e857d7b408594412e1151a9ab
4
+ data.tar.gz: cfabcb8af8b10d8588fa570e61c1f725ae8b64aa
5
5
  SHA512:
6
- metadata.gz: 90c4ddf50e7eba5665186c1eed38dcc1b950792e9e701a339deb78fa5824910c6567d5e3466372e2c1e5ce56f49d18e2a63f6228d6c5c567d23495e563ee4422
7
- data.tar.gz: 2d2fe0da4b72fe4ecde81800131b3cabb4270c3a9f126c067c1178625987655a7d3c84f1e97a9d343d96c5472d1995c6a206207890957c41b66952a692386ec0
6
+ metadata.gz: 645ff7563f78bbd339f732588e2507af95c2b14389d0ab88a143491aaf652e6200770ea92163526d4b7cac92ecb7f4169fa170e0f308ec77c9bb03dad4c588b2
7
+ data.tar.gz: f5ef4ce3ad10defe54167650b16b95616ee355a929d45b3dc5317215923da9b58943647b9e34a17609134886a25b0bb47cc12127408415e79a4c7fe5b7d13563
@@ -0,0 +1,35 @@
1
+ version: 2
2
+ jobs:
3
+ test:
4
+ docker:
5
+ - image: circleci/ruby:2.4.4
6
+ environment:
7
+ RUNTIME_ENV: test
8
+ steps:
9
+ - checkout
10
+ - run:
11
+ name: Install Ruby gems
12
+ command: |
13
+ bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
14
+ - run:
15
+ name: Set up test output directory
16
+ command: sudo install -o circleci -d ~/rspec
17
+ - run:
18
+ name: RSpec
19
+ command: |
20
+ bundle exec rspec \
21
+ --color \
22
+ --require spec_helper \
23
+ --format documentation \
24
+ --format RspecJunitFormatter \
25
+ --out ~/rspec/rspec.xml \
26
+ $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings --timings-type=filename)
27
+ - store_artifacts:
28
+ path: ~/rspec
29
+ - store_test_results:
30
+ path: ~/rspec
31
+ workflows:
32
+ version: 2
33
+ test_build:
34
+ jobs:
35
+ - test
data/.gitignore CHANGED
@@ -21,3 +21,4 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
  tags
24
+ vendor/sauce/sc
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.3
1
+ 2.4.4
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # 0.1.0 - 2018-04-13
2
+
3
+ - Support multiple browsers with `--browsers` param
4
+ - Change default browser to `chrome` (used to be `firefox`)
5
+ - Support running multiple scripts at once
6
+ - Use RSpec for running scripts and displaying results
7
+ - Remove support for BrowserStack and TestingBot
8
+ - Remove support for IE 8, 9, and 10 on SauceLabs
9
+ - Update browser versions on SauceLabs, add Microsoft Edge
10
+ - Add changelog
data/Gemfile CHANGED
@@ -1,10 +1,5 @@
1
1
  source 'https://rubygems.org'
2
- ruby '2.3.3'
2
+ ruby '2.4.4'
3
3
 
4
4
  # Specify your gem's dependencies in rainforest_ruby_runtime.gemspec
5
5
  gemspec
6
-
7
- gem 'pry'
8
- gem 'awesome_print'
9
- gem 'm', '~> 1.5.0'
10
- gem 'minitest', '~> 5.10.0'
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rainforest Ruby Runtime
2
2
 
3
- [![Build Status](https://travis-ci.org/rainforestapp/rainforest_ruby_runtime.svg)](https://travis-ci.org/rainforestapp/rainforest_ruby_runtime)
3
+ [![CircleCI](https://circleci.com/gh/rainforestapp/rainforest_ruby_runtime/tree/master.svg?style=svg)](https://circleci.com/gh/rainforestapp/rainforest_ruby_runtime/tree/master)
4
4
 
5
5
  Gem to run Rainforest Automated Tests locally or on Sauce Labs.
6
6
 
@@ -18,15 +18,155 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install rainforest_ruby_runtime
20
20
 
21
+ ### Installing from source
22
+
23
+ $ git clone git@github.com:rainforestapp/rainforest_ruby_runtime.git
24
+ $ gem build
25
+ $ gem install
26
+
21
27
  ## Usage
22
28
 
29
+ To run the tests on Sauce Labs, first run `rainforest_test --prepare-sauce`, and then set the following environment variables:
30
+
31
+ - `CAPYBARA_DRIVER=sauce`
32
+ - `SAUCE_USERNAME=<your username>`
33
+ - `SAUCE_ACCESS_KEY=<your access key>`
34
+
23
35
  You can then run the tests using the following command:
24
36
  ```
25
37
  bundle exec rainforest_test <test-file.rb>
26
38
  ```
27
39
 
28
- To run the tests on Sauce Labs you should set the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables.
40
+ Rainforest Ruby Runtime supports test runs on Sauce Labs against Chrome, Firefox, IE, Edge, and Safari.
41
+
42
+ By default, your tests will run against Chrome. You can run one or more test scripts against multiple browsers with the following configuration:
43
+
44
+ ```
45
+ bundle exec rainforest_test --browsers firefox,chrome,edge <test-file.rb>,<test-file1.rb>
46
+ ```
47
+ ## Validate failed test results on Rainforest
48
+
49
+ To run the associated Rainforest tests for any failed Selenium tests, follow these steps:
50
+
51
+ *Step 1:* Download your test scripts from Rainforest, then run your automated tests on Sauce labs per the instructions above
52
+
53
+ *Step 2:* Determine the number of results you need to return with the following calculation:
54
+
55
+ ```
56
+ limit = number of scripts run * number of browsers selected
57
+ ```
58
+
59
+ *Step 3:* Request the results from your last test run
60
+
61
+ You can find detailed instructions for making requests to Sauce Labs [here](https://wiki.saucelabs.com/display/DOCS/Job+Methods)
62
+
63
+ > NOTE: It's very important that no other users are executing tests concurrently. Your limit calculation may not include the proper results if other users are running tests at the same time.
64
+
65
+ Sample Response:
66
+
67
+ ```ruby
68
+ [
69
+ {
70
+ "browser_short_version"=>"35",
71
+ "video_url"=>"https://saucelabs.com/jobs/1234567890/video.flv",
72
+ "creation_time"=>12345678890,
73
+ "custom-data"=>nil,
74
+ "browser_version"=>"35.0.1916.114.",
75
+ "owner"=>"YOURUSERNAME",
76
+ "id"=>"12a34e56i78o90u",
77
+ "record_screenshots"=>true,
78
+ "record_video"=>true,
79
+ "build"=>nil,
80
+ "passed"=>false,
81
+ "public"=>"team",
82
+ "end_time"=>12345678900,
83
+ "status"=>"complete",
84
+ "log_url"=>"https://saucelabs.com/jobs/1234567890/selenium-server.log",
85
+ "start_time"=>1234567890,
86
+ "proxied"=>true,
87
+ "modification_time"=>12345678900,
88
+ "tags"=>[],
89
+ "name"=>"Rainforest [1]",
90
+ "commands_not_successful"=>1,
91
+ "consolidated_status"=>"failed",
92
+ "assigned_tunnel_id"=>"tunn1234567890ellll",
93
+ "error"=>nil,
94
+ "os"=>"Windows 2008",
95
+ "breakpointed"=>nil,
96
+ "browser"=>"googlechrome"
97
+ }
98
+ ]
99
+ ```
100
+
101
+ Filter your response array to include only failed results; `"passed" => false`.
102
+
103
+ *Step 4:* Extract required properties to re-run tests on Rainforest
104
+
105
+ The response for each result will include the browser, and the test ID, as the number within brackets in the `name` value.
106
+ Extract test information from the filtered results object:
107
+
108
+ Example results hash:
109
+ ```
110
+ {"123"=>["ie11_1440_900", "windows10_edge"]}
111
+ ```
112
+
113
+ *Step 5:* Run tests in Rainforest to verify the failed tests
114
+
115
+ Use Rainforest's CLI to Rainforest tests by ID against the failed broswers.
116
+
117
+ Example script to help you write yours:
29
118
 
119
+ ```ruby
120
+ # Run your Rainforest scripts against Sauce Labs
121
+ bundle exec rainforest_test <test-file.rb>,<test-file1.rb>,<test-file2.rb> --browsers firefox,chrome,edge
122
+
123
+ # Calculate results limit, set environment info
124
+ limit = <automation script count> * <browser count> # replace placeholders with values for each run
125
+ username = ENV['SAUCE_USERNAME']
126
+ access_key = ENV['SAUCE_ACCESS_KEY']
127
+
128
+ # Make request to sauce labs
129
+ uri = URI("https://saucelabs.com/rest/v1/#{username}/jobs?limit=#{limit}&full=true")
130
+ resp = Net::HTTP.start(uri.host, uri.port, :use_ssl => 'https') do |http|
131
+ req = Net::HTTP::Get.new uri
132
+ req.basic_auth username, access_key
133
+ http.request req
134
+ end
135
+
136
+ # Parse response
137
+ tests = JSON.parse(resp.body)
138
+ tests = example
139
+
140
+ # Filter for only failed tests
141
+ failed_tests = tests.select do |test|
142
+ test['passed'] == false
143
+ end
144
+
145
+ # Mapping from Sauce browser name to Rainforest browser name
146
+ rf_browsers = {
147
+ 'googlechrome' => 'chrome_1440_900',
148
+ 'firefox' => 'firefox_1440_900',
149
+ 'iexplore' => 'ie11_1440_900',
150
+ 'microsoftedge' => 'windows10_edge',
151
+ 'safari' => 'safari_1440_900',
152
+ }
153
+
154
+ # Find Rainforest test id from name in format "Some Name [1234]"
155
+ results = {}
156
+ failed_tests.each do |test|
157
+ name = test['name']
158
+ id = name[/^Rainforest \[(\d+)\]/]
159
+ next unless id
160
+
161
+ results[id] ||= []
162
+ results[id].push(rf_browsers[test['browser']])
163
+ end
164
+
165
+ # Execute rainforest cli once per test id
166
+ results.each do |test_id, browsers|
167
+ system("rainforest run #{test_id} --browsers #{browsers.join(',')}")
168
+ end
169
+ ```
30
170
  ## Contributing
31
171
 
32
172
  1. Fork it ( https://github.com/rainforestapp/rainforest_ruby_runtime/fork )
data/Rakefile CHANGED
@@ -1,9 +1,30 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'fileutils'
4
+ require 'open-uri'
2
5
 
3
- require 'rake/testtask'
6
+ GITHUB_REPO = 'https://raw.githubusercontent.com/rainforestapp/rainforest_ruby_runtime'
4
7
 
5
- Rake::TestTask.new do |t|
6
- t.pattern = "test/**/*_test.rb"
8
+ RSpec::Core::RakeTask.new(:spec) do |t|
9
+ ENV['CAPYBARA_DRIVER'] = 'selenium'
10
+ t.rspec_opts = '--color --format documentation'
7
11
  end
8
12
 
9
- task :default => [:test]
13
+ task :prepare_sauce do
14
+ sc =
15
+ case RUBY_PLATFORM
16
+ when /cygwin|mswin|mingw|bccwin|wince|emx/ then 'sc-windows.exe'
17
+ when /darwin/ then 'sc-osx'
18
+ else 'sc-linux'
19
+ end
20
+
21
+ FileUtils.mkdir_p('vendor/sauce')
22
+ url = "#{GITHUB_REPO}/v#{RainforestRubyRuntime::VERSION}/vendor/sauce/#{sc}"
23
+
24
+ File.open('vendor/sauce/sc', 'wb') do |file|
25
+ IO.copy_stream(open(url), file)
26
+ file.chmod(0755)
27
+ end
28
+ end
29
+
30
+ task :default => [:spec]
data/bin/rainforest_test CHANGED
@@ -3,6 +3,51 @@
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "../lib")
4
4
  require 'rainforest_ruby_runtime'
5
5
 
6
- RainforestRubyRuntime::Runner.new(browsers: %w(firefox)).run ARGF.read
6
+ def prepare_sauce
7
+ require 'rake'
7
8
 
8
- puts "Your test completed successfuly!"
9
+ gem_dir = __dir__
10
+ pwd = Dir.pwd
11
+
12
+ Dir.chdir(gem_dir)
13
+
14
+ Rake.application.init('rake', '-s')
15
+ Rake.application.load_rakefile
16
+ Rake.application[:prepare_sauce].invoke
17
+
18
+ Dir.chdir(pwd)
19
+ end
20
+
21
+ options = {browsers: %i(chrome)}
22
+ OptionParser.new do |opts|
23
+ opts.banner = "Usage: ruby rainforest_test [options] [file_paths]"
24
+
25
+ opts.on('--prepare-sauce', 'Sets up the Sauce Connect executable') do
26
+ prepare_sauce
27
+ puts 'Sauce Connect executable properly set up'
28
+ exit
29
+ end
30
+
31
+ opts.on('--browsers X,Y,Z', Array, 'Browsers') do |browsers|
32
+ invalid_browsers = browsers - RainforestRubyRuntime::Runner::BROWSERS
33
+ raise OptionParser::InvalidOption, "#{invalid_browsers.join(',')}" unless invalid_browsers.empty?
34
+ options[:browsers] = browsers.uniq.map(&:to_sym)
35
+ end
36
+ opts.on('-h', '--help', 'Displays Help') do
37
+ puts opts
38
+ exit
39
+ end
40
+ end.parse!
41
+
42
+ puts "Running against #{options[:browsers].join(',')}"
43
+
44
+ tests = []
45
+ while f = ARGF.file do
46
+ break if f.closed?
47
+ tests << ARGF.read(f.size)
48
+ ARGF.skip
49
+ end
50
+
51
+ RainforestRubyRuntime::Runner.new(browsers: options[:browsers]).run(tests)
52
+
53
+ puts "Your test completed successfully!"
@@ -1,7 +1,5 @@
1
1
  require "sauce"
2
2
  require "sauce/capybara"
3
- require "testingbot"
4
- require "testingbot/capybara"
5
3
  require "rspec/expectations"
6
4
  require "logger"
7
5
 
@@ -13,12 +11,13 @@ require "rainforest_ruby_runtime/nil_delegator"
13
11
  require "rainforest_ruby_runtime/dsl"
14
12
  require "rainforest_ruby_runtime/runner"
15
13
  require "rainforest_ruby_runtime/drivers/sauce"
16
- require "rainforest_ruby_runtime/drivers/browser_stack"
17
- require "rainforest_ruby_runtime/drivers/testing_bot"
18
14
  require "rainforest_ruby_runtime/drivers/selenium"
19
15
  require "rainforest_ruby_runtime/variables/value"
20
- require "rainforest_ruby_runtime/variables/registery"
16
+ require "rainforest_ruby_runtime/variables/registry"
21
17
  require "rainforest_ruby_runtime/variables/scope"
22
18
 
23
19
  module RainforestRubyRuntime
20
+ def self.root
21
+ File.dirname(__dir__)
22
+ end
24
23
  end
@@ -7,28 +7,39 @@ module RainforestRubyRuntime
7
7
  @options = options
8
8
  end
9
9
 
10
- def call
11
- ::Sauce.config do |c|
12
- c[:browsers] = browsers
10
+ def to_rspec(tests)
11
+ apply_config
12
+
13
+ RSpec.describe 'Rainforest', sauce: true, tests: tests do
14
+ metadata[:tests].each do |test|
15
+ it "[#{test.id}] #{test.title}" do
16
+ test.run
17
+ end
18
+ end
13
19
  end
14
20
  end
15
21
 
16
22
  private
17
23
 
24
+ def apply_config
25
+ ::Sauce.config do |c|
26
+ c[:browsers] = browsers
27
+ c[:sauce_connect_4_executable] = File.join(RainforestRubyRuntime.root, '/vendor/sauce/sc')
28
+ c[:start_local_application] = false
29
+ end
30
+ end
31
+
18
32
  def browsers
19
33
  Array(options[:browsers]).map do |browser|
20
34
  {
21
- 'ie8' => ["Windows 7", "Internet Explorer", "8"],
22
- 'ie9' => ["Windows 7", "Internet Explorer", "9"],
23
- 'ie10' => ["Windows 7", "Internet Explorer", "10"],
24
- 'ie11' => ["Windows 7", "Internet Explorer", "11"],
25
- 'chrome' => ["Windows 7", "Chrome", "35"],
26
- 'firefox' => ["Windows 7", "Firefox", "30"],
27
- 'safari' => ["Mavericks", "Safari", "7"],
35
+ chrome: ['Windows 7', 'Chrome', 'latest'],
36
+ firefox: ['Windows 7', 'Firefox', 'latest'],
37
+ ie: ['Windows 7', 'Internet Explorer', 'latest'],
38
+ edge: ['Windows 10', 'microsoftedge', 'latest'],
39
+ safari: ['Mac 10.11', 'Safari', 'latest'],
28
40
  }.fetch(browser)
29
41
  end
30
42
  end
31
43
  end
32
44
  end
33
45
  end
34
-
@@ -1,14 +1,44 @@
1
1
  module RainforestRubyRuntime
2
2
  module Drivers
3
3
  class Selenium
4
+ attr_reader :browsers
5
+
4
6
  def initialize(options)
5
- @options = options
7
+ @browsers = options[:browsers]
8
+ end
9
+
10
+ def to_rspec(tests)
11
+ RSpec.describe 'Rainforest', tests: tests, browsers: browsers do
12
+ metadata[:tests].each do |test|
13
+ describe "[#{test.id}] #{test.title}" do
14
+ metadata[:browsers].each do |browser|
15
+ let(:current_driver) { Capybara.current_session.driver }
16
+
17
+ after do
18
+ if current_driver.respond_to?(:finish!)
19
+ current_driver.finish!
20
+ elsif current_driver.respond_to?(:quit)
21
+ current_driver.quit
22
+ end
23
+ end
24
+
25
+ specify browser do
26
+ # for whatever reason, this line no longer works if put in a `before` block
27
+ current_driver.options[:browser] = browser
28
+
29
+ test.run
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
6
35
  end
7
36
 
8
- def call
9
- # No configuration
37
+ private
38
+
39
+ def current_driver
40
+ Capybara.current_session.driver
10
41
  end
11
42
  end
12
43
  end
13
44
  end
14
-