jenkins-bot has submitted this change and it was merged.
Change subject: Implemented env/browser teardown and sauce update
......................................................................
Implemented env/browser teardown and sauce update
Change-Id: Icc77c454fecbfb72c2d6e9bb269132b2c7bfd393
---
M lib/mediawiki_selenium/browser_factory/base.rb
M lib/mediawiki_selenium/environment.rb
M lib/mediawiki_selenium/remote_browser_factory.rb
M lib/mediawiki_selenium/support/env.rb
M lib/mediawiki_selenium/support/hooks.rb
M spec/remote_browser_factory_spec.rb
6 files changed, 73 insertions(+), 15 deletions(-)
Approvals:
Dduvall: Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/mediawiki_selenium/browser_factory/base.rb
b/lib/mediawiki_selenium/browser_factory/base.rb
index cb6785b..1102322 100644
--- a/lib/mediawiki_selenium/browser_factory/base.rb
+++ b/lib/mediawiki_selenium/browser_factory/base.rb
@@ -170,13 +170,16 @@
#
# @yield [browser]
#
- def each
- @browser_cache.each { |_, browser| yield browser }
+ def each(&blk)
+ @browser_cache.values.each(&blk)
end
# Executes additional teardown tasks.
#
- def teardown
+ # @param env [Environment] Environment.
+ # @param status [Symbol] Status of the executed scenario.
+ #
+ def teardown(env, status)
# abstract
end
diff --git a/lib/mediawiki_selenium/environment.rb
b/lib/mediawiki_selenium/environment.rb
index a2962a9..e303009 100644
--- a/lib/mediawiki_selenium/environment.rb
+++ b/lib/mediawiki_selenium/environment.rb
@@ -200,13 +200,31 @@
#
# @example Teardown environment resources after each scenario completes
# After do
- # teardown
+ # teardown(scenario.passed?)
# end
#
- def teardown
+ # @param status [Symbol] Status of the executed scenario.
+ #
+ def teardown(status = :passed)
@factories.each do |factory|
factory.each { |browser| browser.close } unless keep_browser_open?
- factory.teardown
+ factory.teardown(self, status)
+ end
+ end
+
+ # Returns a name from the given scenario.
+ #
+ # @param scenario [Cucumber::Ast::Scenario]
+ #
+ # @return [String]
+ #
+ def test_name(scenario)
+ if scenario.respond_to? :feature
+ "#{scenario.feature.title}: #{scenario.title}"
+ elsif scenario.respond_to? :scenario_outline
+ "#{scenario.scenario_outline.feature.title}:
#{scenario.scenario_outline.title}: #{scenario.name}"
+ else
+ scenario.name
end
end
diff --git a/lib/mediawiki_selenium/remote_browser_factory.rb
b/lib/mediawiki_selenium/remote_browser_factory.rb
index adc493c..6e0de90 100644
--- a/lib/mediawiki_selenium/remote_browser_factory.rb
+++ b/lib/mediawiki_selenium/remote_browser_factory.rb
@@ -1,3 +1,4 @@
+require "rest_client"
require "uri"
module MediawikiSelenium
@@ -15,6 +16,10 @@
class << self
def extend_object(factory)
+ return if factory.is_a?(self)
+
+ super
+
factory.bind(:sauce_ondemand_username, :sauce_ondemand_access_key) do
|user, key, options|
options[:url] = URI.parse(URL)
@@ -32,10 +37,40 @@
end
end
+ # Submits status and Jenkins build info to Sauce Labs.
+ #
+ def teardown_for(env, status)
+ each do |browser|
+ sid = browser.driver.session_id
+ url = URI.parse(browser.driver.http.server_url)
+ username = url.user
+ key = url.password
+
+ RestClient::Request.execute(
+ method: :put,
+ url: "https://saucelabs.com/rest/v1/#{username}/jobs/#{sid}",
+ user: username,
+ password: key,
+ headers: { content_type: "application/json" },
+ payload: {
+ public: true,
+ passed: status == :passed,
+ build: env.lookup(:build_number),
+ }.to_json
+ )
+ end
+ end
+
protected
def new_browser(options)
- Watir::Browser.new(:remote, options)
+ Watir::Browser.new(:remote, options).tap do |browser|
+ browser.driver.file_detector = lambda do |args|
+ # args => ["/path/to/file"]
+ str = args.first.to_s
+ str if File.exist?(str)
+ end
+ end
end
end
end
diff --git a/lib/mediawiki_selenium/support/env.rb
b/lib/mediawiki_selenium/support/env.rb
index 140a908..4893360 100644
--- a/lib/mediawiki_selenium/support/env.rb
+++ b/lib/mediawiki_selenium/support/env.rb
@@ -12,7 +12,6 @@
# before all
require "bundler/setup"
require "page-object/page_factory"
-require "rest_client"
require "watir-webdriver"
require "mediawiki_selenium/support/modules/api_helper"
@@ -139,11 +138,4 @@
end
def set_cookie(browser)
# implement this method in env.rb of the repository where it is needed
-end
-def test_name(scenario)
- if scenario.respond_to? :feature
- "#{scenario.feature.title}: #{scenario.title}"
- elsif scenario.respond_to? :scenario_outline
- "#{scenario.scenario_outline.feature.title}:
#{scenario.scenario_outline.title}: #{scenario.name}"
- end
end
diff --git a/lib/mediawiki_selenium/support/hooks.rb
b/lib/mediawiki_selenium/support/hooks.rb
index 4b72e7d..e13d8b1 100644
--- a/lib/mediawiki_selenium/support/hooks.rb
+++ b/lib/mediawiki_selenium/support/hooks.rb
@@ -68,8 +68,14 @@
end
Before do |scenario|
+ # Create a unique random string for this scenario
@random_string = Random.new.rand.to_s
+ # Annotate sessions with Jenkins build info
+ bind(:job_name, :build_number) do |job, build, options|
+ options[:desired_capabilities][:name] = "#{test_name(scenario)}
#{job}##{build}"
+ end
+
# CirrusSearch and VisualEditor need this
if ENV["REUSE_BROWSER"] == "true" && $browser
@browser = $browser
diff --git a/spec/remote_browser_factory_spec.rb
b/spec/remote_browser_factory_spec.rb
index 963a545..4bd35fe 100644
--- a/spec/remote_browser_factory_spec.rb
+++ b/spec/remote_browser_factory_spec.rb
@@ -3,9 +3,13 @@
module MediawikiSelenium
describe RemoteBrowserFactory do
+ subject { factory }
+
let(:factory_class) { Class.new(BrowserFactory::Base) }
let(:factory) { factory_class.new(:foo).extend(RemoteBrowserFactory) }
+ it { is_expected.to be_a(RemoteBrowserFactory) }
+
describe "#browser_options" do
subject { factory.browser_options(config) }
--
To view, visit https://gerrit.wikimedia.org/r/169856
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icc77c454fecbfb72c2d6e9bb269132b2c7bfd393
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/selenium
Gerrit-Branch: env-abstraction-layer
Gerrit-Owner: Dduvall <[email protected]>
Gerrit-Reviewer: Dduvall <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits