watirgrid 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|