browserstack-cucumber 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzBmOTZkZGU2Njk0NWZjMGE4YWQ2NTYzMTJkMGU0ODYyNjZlYmFkMg==
4
+ M2QyOWE3ZTY1YThhZTViNDg1ZjhhZDYxYzk4ZDU4ZmZlMmY4YzU4Nw==
5
5
  data.tar.gz: !binary |-
6
- ZTdkYmVlYWIwMjNhMjhjZGI0ZDZhMjVmODUwZjI1YzQ4NGMxMWM0ZA==
6
+ ZGZkYmE5ZTc1MmMzNmYyMzE1YmQzYjYxNTZkYjM3Mjc5NWI5Zjg3NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MDI4ZGQ4OTYyZGVkYWFjYTNlM2ZiMmJmZWM0MDlkY2M4YjU3NjExNDE3ZWNl
10
- Y2I2MTdhMWVlN2VkOTAwZWUzZWFlZjlmYWQ5NDBjMTdlODU2OGIzY2EyNjhj
11
- Y2I1YWQ5MWVlODAyM2IxNzJmYjFhM2ZlNjdhZGJjMTc2ZTgxY2I=
9
+ ZWQ1NDQyZGYxM2MwZTA2NzRkMjU2MjY5ODQ0NDcyYWZhOTdmZmFlZDg2ZmY2
10
+ YzRhNzJjN2JlNDNkMzcyZGQ2MzZkN2NjYWViOWZhMDg2OTIzMzIwNWZmZjQ3
11
+ OTUxM2Y1MzdlZDU3MGUwYzYwOGFjYzhiMWE3ZTBiNzM1Yzc2OTg=
12
12
  data.tar.gz: !binary |-
13
- N2YzOGY2MTIyMjc0ZmZiN2UyMjg5MjY5MDE4OGFiZDM3MDNlYjVmMWQ3Y2Ey
14
- ODMwZTgzNTM1YWY3OWI1YWQ5NmQ1ZjIwOTI1OGQzMDVmNWVlNWU5NzM2YjU0
15
- NzU2MzQyNDNmOTVhMWZhNjUwYmNlNmViYzg2ODkzMGE3NTY4MGQ=
13
+ Y2M5Yjg1M2IyZDJjOTMwNjJmYjlmMjUxNDViN2E4OWM1ZTUzY2RiNzlhNDEw
14
+ YTQ3ZGQxNjA5OGEwNDEyZDk3NjIzZDUzYmFlZWViNTYzM2NlNzA1MzExZTRi
15
+ YTM1ODlhYjY0MjY0ZmVlODRmNTU2ZWJiMGI1ODBlMjVhMTU0ZjY=
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  A Ruby helper for running tests in BrowserStack Automate browser testing cloud service.
4
4
 
5
+ Marks BrowserStack Automate sessions as failed when cucumber scenario fails.
6
+
7
+ This GEM includes custom Cucumber formatter to generate Junit report files accepted by Jenkins. These Junit reports includes BrowserStack session URL for failed scenarios.
8
+
5
9
  ## Installation
6
10
 
7
11
  Add this line to your application's Gemfile:
@@ -7,9 +7,9 @@ require 'browserstack/jenkins_formatter'
7
7
  # formatter can be used with --format browserstack_jenkins
8
8
  require 'cucumber/cli/main'
9
9
 
10
- Cucumber::Cli::Options::BUILTIN_FORMATS["browserstack_jenkins"] = [
11
- "BrowserStackCucumber::JenkinsFormatter",
12
- "BrowserStack Jenkins JUnit report formatter"
10
+ Cucumber::Cli::Options::BUILTIN_FORMATS['browserstack_jenkins'] = [
11
+ 'BrowserStackCucumber::JenkinsFormatter',
12
+ 'BrowserStack Jenkins JUnit report formatter'
13
13
  ]
14
14
 
15
15
 
@@ -86,6 +86,7 @@ module BrowserStackCucumber
86
86
  capabilities['project'] = ENV['JOB_NAME']
87
87
  capabilities
88
88
  end
89
+
89
90
  def self.url
90
91
  'http://hub.browserstack.com/wd/hub'
91
92
  end
@@ -111,7 +112,7 @@ module BrowserStackCucumber
111
112
  @browser.get @test_url
112
113
  raise "Network connection issue. Failed to open #{@test_url} and find '#{@test_substring}' substring" if !@browser.page_source.downcase.include? @test_substring
113
114
  @browser
114
- rescue =>e
115
+ rescue => e
115
116
  if e.message.include? 'sessions are currently being used. Please upgrade to add more parallel sessions'
116
117
  puts "Run out of sessions: '#{e.message}'"
117
118
  else
@@ -145,7 +146,7 @@ module BrowserStackCucumber
145
146
  def self.session_url
146
147
  @session_url = get_session_info(@browser.session_id)
147
148
  @session_url['automation_session']['browser_url']
148
- rescue =>e
149
+ rescue => e
149
150
  return "failed to obtain session url #{e}"
150
151
  end
151
152
 
@@ -155,7 +156,7 @@ module BrowserStackCucumber
155
156
  puts "no free BrowserStack session available now#{parsed_r}" if (parsed_r['sessions_limit']==parsed_r['running_sessions'])
156
157
  parsed_r['sessions_limit']-parsed_r['running_sessions']>0
157
158
  end
158
- rescue RestClient::Unauthorized=>e
159
+ rescue RestClient::Unauthorized => e
159
160
  puts "Error: Failed to access BrowserStack account, please check username and api key: #{e}"
160
161
  raise
161
162
  end
@@ -163,19 +164,33 @@ module BrowserStackCucumber
163
164
  def self.get_session_limits
164
165
  url = "https://#{selenium_username}:#{selenium_apikey}@api.browserstack.com/3/status"
165
166
  r = RestClient.get(url)
166
- parsed_r = JSON.parse(r.body)
167
+ JSON.parse(r.body)
167
168
  end
168
169
 
169
170
  def self.call_api(url_part)
170
171
  url = "https://#{selenium_username}:#{selenium_apikey}@www.browserstack.com/automate/#{url_part}"
171
172
  r = RestClient.get(url)
172
- parsed_r = JSON.parse(r.body)
173
+ JSON.parse(r.body)
174
+ end
175
+
176
+ def self.put_api(url_part, payload)
177
+ url = "https://#{selenium_username}:#{selenium_apikey}@www.browserstack.com/automate/#{url_part}"
178
+ r = RestClient.put(url, payload.to_json, :content_type => :json)
179
+ JSON.parse(r.body)
173
180
  end
174
181
 
182
+
175
183
  def self.get_session_info(session_id)
176
184
  call_api("sessions/#{session_id}.json")
177
185
  end
178
186
 
187
+ def self.update_session_status(success)
188
+ unless success
189
+ put_api("sessions/#{@last_session_id}.json", {'status' => 'error'})
190
+ end
191
+ rescue => e
192
+ puts e
193
+ end
179
194
 
180
195
  def self.browser
181
196
  @browser
@@ -199,6 +214,7 @@ module BrowserStackCucumber
199
214
 
200
215
 
201
216
  module_function
217
+
202
218
  def before_hook_impl
203
219
  #::Capybara.default_driver = :browser_stack
204
220
  #::Capybara.current_driver = :browser_stack
@@ -206,6 +222,7 @@ module BrowserStackCucumber
206
222
  end
207
223
 
208
224
  module_function
225
+
209
226
  def around_hook_impl(scenario, block)
210
227
  #::Capybara.current_driver = :browser_stack
211
228
 
@@ -236,12 +253,13 @@ module BrowserStackCucumber
236
253
  # job.passed = !scenario.failed?
237
254
  # job.save
238
255
  #end
239
-
256
+ BrowserStackCucumber::Config.update_session_status(!scenario.failed?)
240
257
 
241
258
 
242
259
  end
243
260
 
244
261
  module_function
262
+
245
263
  def at_exit_impl
246
264
  ::BrowserStackCucumber::Config.close_browser_force
247
265
  #do global shutdown (i.e. tunnel)
@@ -1,6 +1,7 @@
1
- require "cucumber/formatter/junit"
1
+ require 'cucumber/formatter/junit'
2
2
 
3
3
  module BrowserStackCucumber
4
+ #noinspection RubyUnusedLocalVariable,RubyUnusedLocalVariable
4
5
  class JenkinsFormatter < Cucumber::Formatter::Junit
5
6
  def initialize(step_mother, io, options)
6
7
  super
@@ -20,7 +21,7 @@ module BrowserStackCucumber
20
21
 
21
22
  def basename(feature_file)
22
23
  filename = super
23
- "#{filename}_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}_#{Random.rand(9999).to_s}"
24
+ "#{filename}_#{Time.now.strftime('%Y-%m-%d-%H%M%S')}_#{Random.rand(9999).to_s}"
24
25
  end
25
26
 
26
27
 
@@ -1,3 +1,3 @@
1
1
  module BrowserStackCucumber
2
- VERSION = '0.2'
2
+ VERSION = '0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browserstack-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Vladimirov