watirgrid 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/examples/cucumber/example.feature +10 -16
- data/examples/cucumber/step_definitions/example_steps.rb +39 -27
- data/lib/watirgrid.rb +25 -2
- data/spec/control_spec.rb +10 -1
- data/watirgrid.gemspec +4 -5
- metadata +4 -4
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ begin
|
|
9
9
|
gem.email = "tim.koops@gmail.com"
|
10
10
|
gem.homepage = "http://github.com/90kts/watirgrid"
|
11
11
|
gem.authors = ["Tim Koopmans"]
|
12
|
-
gem.version = "1.1.
|
12
|
+
gem.version = "1.1.2"
|
13
13
|
end
|
14
14
|
rescue LoadError
|
15
15
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
@@ -1,17 +1,11 @@
|
|
1
|
-
@
|
2
|
-
Feature:
|
3
|
-
In order to use
|
4
|
-
|
1
|
+
@NFR-001
|
2
|
+
Feature: User logons
|
3
|
+
In order to use the web application users must be
|
4
|
+
able to logon and access the portal in 3 seconds
|
5
5
|
|
6
|
-
Scenario:
|
7
|
-
Given
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# For the sake of a demo, we'll just control 2 difference instances on a single host.
|
13
|
-
Scenario: Create a Grid and control the Providers
|
14
|
-
Given I have created and started a Grid with 2 Providers
|
15
|
-
Then I should be able to control the following browsers in parallel:
|
16
|
-
| Chrome |
|
17
|
-
| Firefox |
|
6
|
+
Scenario: Logon with 50 users in 1 minute
|
7
|
+
Given 50 users open "chrome"
|
8
|
+
And navigate to the portal
|
9
|
+
When they enter their credentials
|
10
|
+
Then they should see their account settings
|
11
|
+
And the response time should be less than 3 seconds
|
@@ -1,39 +1,51 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib'))
|
3
3
|
require 'watirgrid'
|
4
|
-
require 'rspec/expectations';
|
4
|
+
require 'rspec/expectations';
|
5
|
+
require 'watir-webdriver-performance'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
controller = Controller.new(
|
8
|
+
:ring_server_port => 12357,
|
9
|
+
:loglevel => Logger::ERROR)
|
10
|
+
controller.start
|
11
|
+
|
12
|
+
provider = Provider.new(
|
13
|
+
:ring_server_port => 12357,
|
14
|
+
:loglevel => Logger::ERROR, :browser_type => 'webdriver')
|
15
|
+
provider.start
|
16
|
+
|
17
|
+
Given /^(\d+) users open "([^"]*)"$/ do |quantity, browser|
|
18
|
+
params={}
|
19
|
+
params[:ring_server_port] = 12357
|
20
|
+
# optionall connect via a controller_uri environment variable
|
21
|
+
# params[:controller_uri] = ENV["controller_uri"]
|
22
|
+
params[:browser] = browser # type of webdriver browser to spawn
|
23
|
+
params[:quantity] = quantity.to_i # max number of browsers to use
|
24
|
+
params[:rampup] = 10 # seconds
|
25
|
+
@grid = Watir::Grid.new(params)
|
26
|
+
@grid.start(:initiate => true)
|
27
|
+
end
|
28
|
+
|
29
|
+
Given /^navigate to the portal$/ do
|
30
|
+
@grid.iterate {|browser| browser.goto "http://gridinit.com/examples/logon.html" }
|
10
31
|
end
|
11
32
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
33
|
+
When /^they enter their credentials$/ do
|
34
|
+
@grid.iterate do |browser|
|
35
|
+
browser.text_field(:name => "email").set "tim@mahenterprize.com"
|
36
|
+
browser.text_field(:name => "password").set "mahsecretz"
|
37
|
+
browser.button(:type => "submit").click
|
17
38
|
end
|
18
39
|
end
|
19
40
|
|
20
|
-
|
21
|
-
@grid
|
22
|
-
|
23
|
-
|
41
|
+
Then /^they should see their account settings$/ do
|
42
|
+
@grid.iterate do |browser|
|
43
|
+
browser.text.should =~ /Maybe I should get a real Gridinit account/
|
44
|
+
end
|
24
45
|
end
|
25
46
|
|
26
|
-
Then /^
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
threads << Thread.new do
|
31
|
-
b = browser[:object].new_browser(browsers[index])
|
32
|
-
b.goto("http://www.google.com")
|
33
|
-
b.text_field(:name, 'q').set("watirgrid")
|
34
|
-
b.button(:name, "btnI").click
|
35
|
-
b.close
|
36
|
-
end
|
37
|
-
end
|
38
|
-
threads.each {|thread| thread.join}
|
47
|
+
Then /^the response time should be less than (d+) seconds$/ do |response_time|
|
48
|
+
@grid.iterate do |browser|
|
49
|
+
browser.performance.summary[:response_time].should < response_time.to_i * 1000
|
50
|
+
end
|
39
51
|
end
|
data/lib/watirgrid.rb
CHANGED
@@ -10,7 +10,7 @@ module Watir
|
|
10
10
|
# and instatiating remote browser objects on nominated providers.
|
11
11
|
class Grid
|
12
12
|
|
13
|
-
attr_accessor :drb_server_uri, :ring_server, :browsers, :tuples
|
13
|
+
attr_accessor :drb_server_uri, :ring_server, :browsers, :tuples, :providers
|
14
14
|
|
15
15
|
def initialize(params = {})
|
16
16
|
@drb_server_host = params[:drb_server_host] || external_interface
|
@@ -23,9 +23,10 @@ module Watir
|
|
23
23
|
@log = Logger.new(logfile, 'daily')
|
24
24
|
@log.level = params[:loglevel] || Logger::ERROR
|
25
25
|
@log.datetime_format = "%Y-%m-%d %H:%M:%S "
|
26
|
-
|
26
|
+
@webdriver_browser_type = params[:browser].to_sym if params[:browser]
|
27
27
|
@browsers = []
|
28
28
|
@tuples = []
|
29
|
+
@providers = []
|
29
30
|
end
|
30
31
|
|
31
32
|
##
|
@@ -34,6 +35,7 @@ module Watir
|
|
34
35
|
start_drb_server
|
35
36
|
find_ring_server(params)
|
36
37
|
get_tuples(params)
|
38
|
+
setup if params[:initiate]
|
37
39
|
end
|
38
40
|
|
39
41
|
##
|
@@ -48,6 +50,27 @@ module Watir
|
|
48
50
|
@tuples.each { |tuple| @ring_server.write(tuple) }
|
49
51
|
end
|
50
52
|
|
53
|
+
##
|
54
|
+
# Instantiate new browser object on each of the remote providers
|
55
|
+
def setup
|
56
|
+
@browsers.each_with_index do |browser, index|
|
57
|
+
sleep 0.15
|
58
|
+
@providers[index] ||= browser[:object].new_browser(@webdriver_browser_type)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Iterate with a block over each of the remote providers
|
64
|
+
def iterate &block
|
65
|
+
threads = []
|
66
|
+
@providers.each do |browser|
|
67
|
+
threads << Thread.new do
|
68
|
+
yield browser
|
69
|
+
end
|
70
|
+
end
|
71
|
+
threads.each {|thread| thread.join}
|
72
|
+
end
|
73
|
+
|
51
74
|
##
|
52
75
|
# This is a helper method to control a grid.
|
53
76
|
def self.control(params = {}, &block)
|
data/spec/control_spec.rb
CHANGED
@@ -19,9 +19,18 @@ describe 'Using the Grid Control method' do
|
|
19
19
|
it 'should control a grid' do
|
20
20
|
Watir::Grid.control(:ring_server_port => 12357) do |browser, index|
|
21
21
|
p "I am browser index #{index}"
|
22
|
-
browser.goto "google.com"
|
22
|
+
browser.goto "http://google.com"
|
23
23
|
p browser.title
|
24
24
|
browser.close
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
it 'should iterate over a grid' do
|
29
|
+
grid = Watir::Grid.new(:ring_server_port => 12357)
|
30
|
+
grid.start(:initiate => true)
|
31
|
+
grid.iterate do |browser|
|
32
|
+
browser.goto "http://google.com"
|
33
|
+
browser.close
|
34
|
+
end
|
35
|
+
end
|
27
36
|
end
|
data/watirgrid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{watirgrid}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tim Koopmans"]
|
12
|
-
s.date = %q{2011-04
|
12
|
+
s.date = %q{2011-05-04}
|
13
13
|
s.description = %q{WatirGrid allows for distributed testing across a grid network using Watir.}
|
14
14
|
s.email = %q{tim.koops@gmail.com}
|
15
15
|
s.executables = ["listener", "controller", "provider"]
|
@@ -32,13 +32,12 @@ Gem::Specification.new do |s|
|
|
32
32
|
"examples/cucumber/example.feature",
|
33
33
|
"examples/cucumber/step_definitions/example_steps.rb",
|
34
34
|
"lib/controller.rb",
|
35
|
-
"lib/extensions/remote.rb",
|
36
35
|
"lib/listener.rb",
|
37
36
|
"lib/provider.rb",
|
38
37
|
"lib/watirgrid.rb",
|
39
38
|
"rdoc/logo.png",
|
39
|
+
"spec/control_spec.rb",
|
40
40
|
"spec/grid_spec.rb",
|
41
|
-
"spec/gridinit_spec.rb",
|
42
41
|
"spec/memory_spec.rb",
|
43
42
|
"spec/selenium_webdriver_spec.rb",
|
44
43
|
"spec/spec_helper.rb",
|
@@ -56,8 +55,8 @@ Gem::Specification.new do |s|
|
|
56
55
|
"examples/basic/example_webdriver.rb",
|
57
56
|
"examples/basic/example_webdriver_remote.rb",
|
58
57
|
"examples/cucumber/step_definitions/example_steps.rb",
|
58
|
+
"spec/control_spec.rb",
|
59
59
|
"spec/grid_spec.rb",
|
60
|
-
"spec/gridinit_spec.rb",
|
61
60
|
"spec/memory_spec.rb",
|
62
61
|
"spec/selenium_webdriver_spec.rb",
|
63
62
|
"spec/spec_helper.rb",
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watirgrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 2
|
10
|
+
version: 1.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tim Koopmans
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-06 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|