browser_shooter 0.3.9 → 0.3.11
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/lib/browser_shooter/argv_parser.rb +1 -0
- data/lib/browser_shooter/base.rb +2 -0
- data/lib/browser_shooter/commander.rb +9 -1
- data/lib/browser_shooter/configurator.rb +42 -44
- data/lib/browser_shooter/utils.rb +12 -1
- data/lib/browser_shooter/version.rb +1 -1
- data/test/configurator_test.rb +41 -2
- data/test/fixtures/config_in_order.yml +21 -0
- metadata +14 -12
data/lib/browser_shooter/base.rb
CHANGED
@@ -6,6 +6,7 @@ module BrowserShooter
|
|
6
6
|
@opts = opts
|
7
7
|
end
|
8
8
|
|
9
|
+
# Main method. Loads the configuration, filter the suites, runs the tests and exports the logs.
|
9
10
|
def run
|
10
11
|
BrowserShooter::Logger.verbose = opts[:verbose]
|
11
12
|
BrowserShooter::Logger.log( "Starting script running with version #{BrowserShooter::VERSION}..." )
|
@@ -31,6 +32,7 @@ module BrowserShooter
|
|
31
32
|
BrowserShooter::Logger.log( "BYE!" )
|
32
33
|
end
|
33
34
|
|
35
|
+
# Runs a single test with all its _commands_ in an specific _browser_
|
34
36
|
def self.run_test( suite, test, browser, config )
|
35
37
|
BrowserShooter::Logger.log( "Executing #{suite.name} | #{test.name} | #{browser.name}", true )
|
36
38
|
output_path = "#{config["output_path"]}/#{suite.name}/#{test.name}/#{browser.name}"
|
@@ -1,7 +1,15 @@
|
|
1
1
|
module BrowserShooter::Commander
|
2
2
|
|
3
|
+
# Executes a test _script_ with all _its_ commands.
|
4
|
+
#
|
5
|
+
# Returns: the test result in this format:
|
6
|
+
# {
|
7
|
+
# :time => (the actual time),
|
8
|
+
# :success => (true|false),
|
9
|
+
# :command => (the actual command),
|
10
|
+
# :message => (the command message or error message),
|
11
|
+
# }
|
3
12
|
def self.script( commands, driver, browser, output_path )
|
4
|
-
|
5
13
|
command_executor =
|
6
14
|
BrowserShooter::Commands::Base.new(
|
7
15
|
driver,
|
@@ -2,6 +2,7 @@ module BrowserShooter
|
|
2
2
|
class Configurator
|
3
3
|
attr_reader :suites
|
4
4
|
|
5
|
+
# Takes the digested command options and create and filter the models
|
5
6
|
def initialize( opts )
|
6
7
|
@config = BrowserShooter::Configurator.load_config( opts[:config_file] )
|
7
8
|
models = BrowserShooter::Configurator.build_models( @config )
|
@@ -10,45 +11,26 @@ module BrowserShooter
|
|
10
11
|
BrowserShooter::Configurator.load_extensions( @config["extensions"] ) if @config["extensions"]
|
11
12
|
end
|
12
13
|
|
14
|
+
# The hash version of the _config.yml_ is available here
|
13
15
|
def [](value)
|
14
16
|
@config[value]
|
15
17
|
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
suites = [suite]
|
25
|
-
|
26
|
-
elsif( opts[:test] && opts[:browsers] )
|
27
|
-
test = models[:tests].select{ |e| e.name == opts[:test] }.first
|
28
|
-
raise ArgumentError, "Not test found '#{opts[:test]}'" if test.nil?
|
29
|
-
|
30
|
-
browsers = models[:browsers].select{ |e| opts[:browsers].include? e.name }
|
31
|
-
raise ArgumentError, "Not browsers found '#{opts[:browsers].join( "," )}'" if browsers.empty?
|
32
|
-
|
33
|
-
suite = BrowserShooter::Models::Suite.new( "anonymous", [test], browsers )
|
34
|
-
suites = [suite]
|
35
|
-
|
36
|
-
elsif( opts[:test] )
|
37
|
-
test = models[:tests].select{ |e| e.name == opts[:test] }.first
|
38
|
-
raise ArgumentError, "Not test found '#{opts[:test]}'" if test.nil?
|
39
|
-
|
40
|
-
browsers = models[:browsers]
|
41
|
-
suite = BrowserShooter::Models::Suite.new( "anonymous", [test], browsers )
|
42
|
-
suites = [suite]
|
19
|
+
# Load the _config.yml_ file and return it in a Hash format
|
20
|
+
def self.load_config( config_file_path )
|
21
|
+
config = {
|
22
|
+
"output_path" => "~/browser_shooter",
|
23
|
+
"timeout" => 40
|
24
|
+
}
|
43
25
|
|
44
|
-
|
45
|
-
suites = models[:suites]
|
26
|
+
config.merge! YAML.load_file( config_file_path )
|
46
27
|
|
47
|
-
|
28
|
+
config["output_path"] = setup_output_path( config["output_path"] )
|
48
29
|
|
49
|
-
|
30
|
+
config
|
50
31
|
end
|
51
32
|
|
33
|
+
# Creates the _tests_, _browsers_ and _suites_ arrays.
|
52
34
|
def self.build_models( config )
|
53
35
|
tests =
|
54
36
|
config["tests"].map do |name, commands|
|
@@ -64,8 +46,8 @@ module BrowserShooter
|
|
64
46
|
|
65
47
|
suites =
|
66
48
|
config["suites"].map do |name, opts|
|
67
|
-
suite_tests =
|
68
|
-
suite_browsers =
|
49
|
+
suite_tests = BrowserShooter::Utils.find_by_names( tests, opts["tests"] )
|
50
|
+
suite_browsers = BrowserShooter::Utils.find_by_names( browsers, opts["browsers"] )
|
69
51
|
|
70
52
|
BrowserShooter::Models::Suite.new( name, suite_tests, suite_browsers )
|
71
53
|
end
|
@@ -77,21 +59,40 @@ module BrowserShooter
|
|
77
59
|
}
|
78
60
|
end
|
79
61
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
}
|
62
|
+
# If special _filter_ options has been defined in the _command options_ the _suites_ are filtered
|
63
|
+
# to only play with the filtered ones.
|
64
|
+
def self.filter_suites( models, opts )
|
65
|
+
suites = []
|
85
66
|
|
86
|
-
|
67
|
+
if( opts[:suite] )
|
68
|
+
suite = BrowserShooter::Utils.find_by_name( models[:suites], opts[:suite] )
|
87
69
|
|
88
|
-
|
70
|
+
suites = [suite]
|
89
71
|
|
90
|
-
|
72
|
+
elsif( opts[:test] && opts[:browsers] )
|
73
|
+
test = BrowserShooter::Utils.find_by_name( models[:tests], opts[:test] )
|
74
|
+
browsers = BrowserShooter::Utils.find_by_names( models[:browsers], opts[:browsers] )
|
75
|
+
suite = BrowserShooter::Models::Suite.new( "anonymous", [test], browsers )
|
76
|
+
|
77
|
+
suites = [suite]
|
78
|
+
|
79
|
+
elsif( opts[:test] )
|
80
|
+
test = BrowserShooter::Utils.find_by_name( models[:tests], opts[:test] )
|
81
|
+
browsers = models[:browsers]
|
82
|
+
suite = BrowserShooter::Models::Suite.new( "anonymous", [test], browsers )
|
83
|
+
|
84
|
+
suites = [suite]
|
85
|
+
|
86
|
+
else
|
87
|
+
suites = models[:suites]
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
suites
|
91
92
|
end
|
92
93
|
|
93
94
|
def self.setup_output_path( output_path )
|
94
|
-
output_path = File.expand_path( "#{output_path}/#{timestamp}" )
|
95
|
+
output_path = File.expand_path( "#{output_path}/#{BrowserShooter::Utils.timestamp}" )
|
95
96
|
BrowserShooter::Logger.log( "output_path: #{output_path}" )
|
96
97
|
|
97
98
|
output_path
|
@@ -105,8 +106,5 @@ module BrowserShooter
|
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
|
-
def self.timestamp
|
109
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
110
|
-
end
|
111
109
|
end
|
112
110
|
end
|
@@ -1,7 +1,18 @@
|
|
1
1
|
module BrowserShooter
|
2
2
|
module Utils
|
3
3
|
def self.timestamp
|
4
|
-
Time.now.
|
4
|
+
Time.now.strftime( "%Y%m%d%H%M%S" )
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.find_by_name( array, name )
|
8
|
+
element = array.select{ |e| e.name == name }.first
|
9
|
+
raise ArgumentError, "Not element found '#{name}'" if element.nil?
|
10
|
+
|
11
|
+
element
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find_by_names( array, names )
|
15
|
+
names.map { |name| find_by_name( array, name ) }
|
5
16
|
end
|
6
17
|
end
|
7
18
|
end
|
data/test/configurator_test.rb
CHANGED
@@ -85,8 +85,29 @@ class ConfiguratorTest < Test::Unit::TestCase
|
|
85
85
|
assert_equal( "windows-firefox", suites.first.browsers.first.name )
|
86
86
|
end
|
87
87
|
|
88
|
+
def test_filter_suites_with_error
|
89
|
+
BrowserShooter::Configurator.stubs( :setup_output_path )
|
90
|
+
config = BrowserShooter::Configurator.load_config( "#{FIXTURES}/config.yml" )
|
91
|
+
models = BrowserShooter::Configurator.build_models( config )
|
92
|
+
|
93
|
+
opts = { :suite => "not_exists" }
|
94
|
+
assert_raise( ArgumentError ) do
|
95
|
+
BrowserShooter::Configurator.filter_suites( models, opts )
|
96
|
+
end
|
97
|
+
|
98
|
+
opts = { :test => "not_exists" }
|
99
|
+
assert_raise( ArgumentError ) do
|
100
|
+
BrowserShooter::Configurator.filter_suites( models, opts )
|
101
|
+
end
|
102
|
+
|
103
|
+
opts = { :test => "google", :browsers => ["not_exists"] }
|
104
|
+
assert_raise( ArgumentError ) do
|
105
|
+
BrowserShooter::Configurator.filter_suites( models, opts )
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
88
109
|
def test_load_config
|
89
|
-
BrowserShooter::
|
110
|
+
BrowserShooter::Utils.expects( :timestamp ).returns( "timestamp" )
|
90
111
|
|
91
112
|
config = BrowserShooter::Configurator.load_config( "#{FIXTURES}/config_simple.yml" )
|
92
113
|
|
@@ -97,7 +118,7 @@ class ConfiguratorTest < Test::Unit::TestCase
|
|
97
118
|
end
|
98
119
|
|
99
120
|
def test_load_config_with_defaults
|
100
|
-
BrowserShooter::
|
121
|
+
BrowserShooter::Utils.expects( :timestamp ).returns( "timestamp" )
|
101
122
|
|
102
123
|
config = BrowserShooter::Configurator.load_config( "#{FIXTURES}/config_empty.yml" )
|
103
124
|
|
@@ -110,4 +131,22 @@ class ConfiguratorTest < Test::Unit::TestCase
|
|
110
131
|
Kernel.expects( :require ).with( File.expand_path( "extension2.rb" ) )
|
111
132
|
BrowserShooter::Configurator.load_extensions( ["extension1.rb", "extension2.rb"] )
|
112
133
|
end
|
134
|
+
|
135
|
+
def test_suite_tests_in_order
|
136
|
+
BrowserShooter::Configurator.stubs( :setup_output_path )
|
137
|
+
config = BrowserShooter::Configurator.load_config( "#{FIXTURES}/config_in_order.yml" )
|
138
|
+
models = BrowserShooter::Configurator.build_models( config )
|
139
|
+
|
140
|
+
assert_equal( 2, models[:suites].first.tests.size )
|
141
|
+
assert_equal( "test2", models[:suites].first.tests.first.name )
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_suite_browsers_in_order
|
145
|
+
BrowserShooter::Configurator.stubs( :setup_output_path )
|
146
|
+
config = BrowserShooter::Configurator.load_config( "#{FIXTURES}/config_in_order.yml" )
|
147
|
+
models = BrowserShooter::Configurator.build_models( config )
|
148
|
+
|
149
|
+
assert_equal( 2, models[:suites].first.browsers.size )
|
150
|
+
assert_equal( "browser2", models[:suites].first.browsers.first.name )
|
151
|
+
end
|
113
152
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
tests:
|
2
|
+
test1: commands
|
3
|
+
test2: commands
|
4
|
+
|
5
|
+
browsers:
|
6
|
+
browser1:
|
7
|
+
url: "http://10.211.55.4:4444/wd/hub"
|
8
|
+
type: "firefox"
|
9
|
+
|
10
|
+
browser2:
|
11
|
+
url: "http://10.211.55.4:4444/wd/hub"
|
12
|
+
type: "iexploreproxy"
|
13
|
+
|
14
|
+
suites:
|
15
|
+
suite1:
|
16
|
+
tests:
|
17
|
+
- test2
|
18
|
+
- test1
|
19
|
+
browsers:
|
20
|
+
- browser2
|
21
|
+
- browser1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browser_shooter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &70295546959160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0.rc.6
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70295546959160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70295546958660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.9.2.2
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70295546958660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mocha
|
38
|
-
requirement: &
|
38
|
+
requirement: &70295546958280 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70295546958280
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: selenium-webdriver
|
49
|
-
requirement: &
|
49
|
+
requirement: &70295546957820 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70295546957820
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mixlib-cli
|
60
|
-
requirement: &
|
60
|
+
requirement: &70295546957400 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70295546957400
|
69
69
|
description: Selenium RC wraper to create browser screenshots
|
70
70
|
email:
|
71
71
|
- fguillen.mail@gmail.com
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- test/configurator_test.rb
|
112
112
|
- test/fixtures/config.yml
|
113
113
|
- test/fixtures/config_empty.yml
|
114
|
+
- test/fixtures/config_in_order.yml
|
114
115
|
- test/fixtures/config_simple.yml
|
115
116
|
- test/fixtures/logs/log.csv
|
116
117
|
- test/fixtures/screenshot.base64
|
@@ -153,6 +154,7 @@ test_files:
|
|
153
154
|
- test/configurator_test.rb
|
154
155
|
- test/fixtures/config.yml
|
155
156
|
- test/fixtures/config_empty.yml
|
157
|
+
- test/fixtures/config_in_order.yml
|
156
158
|
- test/fixtures/config_simple.yml
|
157
159
|
- test/fixtures/logs/log.csv
|
158
160
|
- test/fixtures/screenshot.base64
|