moto 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cli.rb +4 -3
- data/lib/listeners/webui.rb +69 -0
- data/lib/parser.rb +19 -1
- data/lib/runner.rb +3 -1
- data/lib/test.rb +1 -0
- data/lib/thread_context.rb +6 -4
- metadata +30 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e0d2bc8cf0fdd04c80ef51518748b2f3091f4be
|
4
|
+
data.tar.gz: cffe21eadaa97d2469aca4754f7e23ef5c1e1ac2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f25fd63074145f9a8a30377e29b556d9da74f7181b685649e578365fda45ac0944da13b20fd074dd5eeb14e204c055a13e670a42d67b9565b9301ab1da6d973
|
7
|
+
data.tar.gz: 11be7c4eedb48b8b8d8afdbabb1b56122e570db463c35f7f130ad7814f2de30df133fa61fa41be1d72edd93d8138c1cd1036616b30a2699b558d3af07d345e4b
|
data/lib/cli.rb
CHANGED
@@ -37,6 +37,7 @@ require_relative './listeners/base'
|
|
37
37
|
require_relative './listeners/console'
|
38
38
|
require_relative './listeners/console_dots'
|
39
39
|
require_relative './listeners/junit_xml'
|
40
|
+
require_relative './listeners/webui'
|
40
41
|
require_relative './test_generator'
|
41
42
|
require_relative './exceptions/moto'
|
42
43
|
require_relative './exceptions/test_skipped'
|
@@ -63,11 +64,11 @@ module Moto
|
|
63
64
|
tests_total = Dir.glob("#{MotoApp::DIR}/tests/**/*.rb")
|
64
65
|
argv[ :tags ].each do |tag_name|
|
65
66
|
tests_total.each do |test_dir|
|
66
|
-
test_body = File.read
|
67
|
+
test_body = File.read(test_dir)
|
67
68
|
test_body.each_line do |line|
|
68
69
|
line = line.delete(' ')
|
69
70
|
if line.include?( '#MOTO_TAGS')
|
70
|
-
if line.include?
|
71
|
+
if line.include?(tag_name + ',')
|
71
72
|
test_paths_absolute.include?(test_dir) || test_paths_absolute << test_dir
|
72
73
|
break
|
73
74
|
else
|
@@ -95,7 +96,7 @@ module Moto
|
|
95
96
|
listeners << r.constantize
|
96
97
|
end
|
97
98
|
|
98
|
-
runner = Moto::Runner.new(test_classes, listeners, argv[
|
99
|
+
runner = Moto::Runner.new(test_classes, listeners, argv[:environments], argv[:config], argv[:name])
|
99
100
|
runner.run
|
100
101
|
end
|
101
102
|
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'sys/uname'
|
3
|
+
|
4
|
+
module Moto
|
5
|
+
module Listeners
|
6
|
+
class Webui < Base
|
7
|
+
|
8
|
+
def start_run
|
9
|
+
# POST http://sandbox.dev:3000/api/runs/create
|
10
|
+
@url = @runner.my_config[:url]
|
11
|
+
data = {
|
12
|
+
name: @runner.name,
|
13
|
+
result: Moto::Result::RUNNING,
|
14
|
+
cnt_all: nil,
|
15
|
+
cnt_passed: nil,
|
16
|
+
cnt_failure: nil,
|
17
|
+
cnt_error: nil,
|
18
|
+
cnt_skipped: nil,
|
19
|
+
user: Sys::Uname.sysname.downcase.include?('windows') ? ENV['USERNAME'] : ENV['LOGNAME'],
|
20
|
+
host: Sys::Uname.nodename,
|
21
|
+
pid: Process.pid
|
22
|
+
}
|
23
|
+
@run = JSON.parse( RestClient.post( "#{@url}/api/runs", data.to_json, :content_type => :json, :accept => :json ) )
|
24
|
+
end
|
25
|
+
|
26
|
+
def end_run
|
27
|
+
# PUT http://sandbox.dev:3000/api/runs/1
|
28
|
+
data = {
|
29
|
+
result: @runner.result.summary[:result],
|
30
|
+
cnt_all: @runner.result.summary[:cnt_all],
|
31
|
+
cnt_passed: @runner.result.summary[:cnt_passed],
|
32
|
+
cnt_failure: @runner.result.summary[:cnt_failure],
|
33
|
+
cnt_error: @runner.result.summary[:cnt_error],
|
34
|
+
cnt_skipped: @runner.result.summary[:cnt_skipped],
|
35
|
+
duration: @runner.result.summary[:duration]
|
36
|
+
}
|
37
|
+
@run = JSON.parse( RestClient.put( "#{@url}/api/runs/#{@run['id']}", data.to_json, :content_type => :json, :accept => :json ) )
|
38
|
+
end
|
39
|
+
|
40
|
+
def start_test(test)
|
41
|
+
# POST http://sandbox.dev:3000/api/tests/create
|
42
|
+
data = {
|
43
|
+
name: test.name,
|
44
|
+
class_name: test.class.name,
|
45
|
+
log: nil,
|
46
|
+
env: test.env,
|
47
|
+
parameters: test.params.to_s,
|
48
|
+
result: Moto::Result::RUNNING,
|
49
|
+
error: nil,
|
50
|
+
failures: nil,
|
51
|
+
}
|
52
|
+
@test = JSON.parse( RestClient.post( "#{@url}/api/tests", data.to_json, :content_type => :json, :accept => :json ) )
|
53
|
+
end
|
54
|
+
|
55
|
+
def end_test(test)
|
56
|
+
log = File.read(test.log_path)
|
57
|
+
data = {
|
58
|
+
log: log,
|
59
|
+
result: @runner.result[test.name][:result],
|
60
|
+
error: @runner.result[test.name][:error].nil? ? nil : @runner.result[test.name][:error].message,
|
61
|
+
failures: @runner.result[test.name][:failures].join("\n\t"),
|
62
|
+
duration: @runner.result[test.name][:duration]
|
63
|
+
}
|
64
|
+
@test = JSON.parse( RestClient.put( "#{@url}/api/tests/#{@test['id']}", data.to_json, :content_type => :json, :accept => :json ) )
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/parser.rb
CHANGED
@@ -26,6 +26,7 @@ module Moto
|
|
26
26
|
# TODO Mandatory env var in app config
|
27
27
|
options[:config] = eval(File.read("#{MotoApp::DIR}/config/moto.rb"))
|
28
28
|
options[:environments] = []
|
29
|
+
options[:name] = ""
|
29
30
|
|
30
31
|
# Parse arguments
|
31
32
|
# TODO eval ?
|
@@ -37,9 +38,14 @@ module Moto
|
|
37
38
|
opts.on('-r', '--reporters Reporters', Array) { |v| options[:reporters] = v }
|
38
39
|
opts.on('-e', '--environments Environment', Array) { |v| options[:environments] = v }
|
39
40
|
opts.on('-c', '--const Const') { |v| options[:const] = v }
|
40
|
-
opts.on('-
|
41
|
+
opts.on('-n', '--name Name') { |v| options[:name] = v }
|
42
|
+
opts.on('-f', '--config Config') { |v| options[:config] = options[:config].merge( eval( v ) ) }
|
41
43
|
end.parse!
|
42
44
|
|
45
|
+
if options[:name].empty?
|
46
|
+
options[:name] = evaluate_name(options[:tags], options[:tests])
|
47
|
+
end
|
48
|
+
|
43
49
|
if options[ :config ][ :moto ][ :runner ][ :mandatory_environment ] && options[ :environments ].empty?
|
44
50
|
puts 'Environment is mandatory for this project.'
|
45
51
|
exit 1
|
@@ -48,6 +54,18 @@ module Moto
|
|
48
54
|
return options
|
49
55
|
end
|
50
56
|
|
57
|
+
def self.evaluate_name(tags, tests)
|
58
|
+
tags ||= ""
|
59
|
+
tests ||= ""
|
60
|
+
if !tags.empty? && !tests.empty?
|
61
|
+
return "#{tags.count} tags + #{tests.count} tests"
|
62
|
+
elsif tags.empty?
|
63
|
+
return tests.count == 1 ? "Test: #{tests.first}" : "#{tests.count} tests"
|
64
|
+
elsif tests.empty?
|
65
|
+
return tags.count == 1 ? "Tag: #{tags.first}" : "#{tags.count} tags"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
51
69
|
def self.generate_parse(argv)
|
52
70
|
options = {}
|
53
71
|
options[:dir]
|
data/lib/runner.rb
CHANGED
@@ -7,11 +7,13 @@ module Moto
|
|
7
7
|
attr_reader :environments
|
8
8
|
attr_reader :assert
|
9
9
|
attr_reader :config
|
10
|
+
attr_reader :name
|
10
11
|
|
11
|
-
def initialize(tests, listeners, environments, config)
|
12
|
+
def initialize(tests, listeners, environments, config, name)
|
12
13
|
@tests = tests
|
13
14
|
@config = config
|
14
15
|
@threads = []
|
16
|
+
@name = name
|
15
17
|
|
16
18
|
# TODO: initialize logger from config (yml or just ruby code)
|
17
19
|
# @logger = Logger.new(STDOUT)
|
data/lib/test.rb
CHANGED
data/lib/thread_context.rb
CHANGED
@@ -4,7 +4,7 @@ module Moto
|
|
4
4
|
# all resources specific for single thread will be initialized here. E.g. browser session
|
5
5
|
attr_reader :runner
|
6
6
|
attr_reader :logger
|
7
|
-
attr_reader :log_path
|
7
|
+
# attr_reader :log_path
|
8
8
|
attr_reader :current_test
|
9
9
|
|
10
10
|
def initialize(runner, tests)
|
@@ -91,8 +91,8 @@ module Moto
|
|
91
91
|
(1..max_attempts).each do |attempt|
|
92
92
|
test.init(env, params)
|
93
93
|
# TODO: log path might be specified (to some extent) by the configuration
|
94
|
-
|
95
|
-
@logger = Logger.new(File.open(
|
94
|
+
test.log_path = "#{test.dir}/#{test.name.gsub(/\s+/, '_').gsub('::', '_').gsub('/', '_')}.log"
|
95
|
+
@logger = Logger.new(File.open(test.log_path, File::WRONLY | File::TRUNC | File::CREAT))
|
96
96
|
# TODO: make logger level configurable
|
97
97
|
@logger.level = @runner.my_config[:log_level]
|
98
98
|
@current_test = test
|
@@ -112,9 +112,11 @@ module Moto
|
|
112
112
|
end
|
113
113
|
test.after
|
114
114
|
@clients.each_value { |c| c.end_test(test) }
|
115
|
-
|
115
|
+
# HAX: running end_test on results now, on other listeners after logger is closed
|
116
|
+
@runner.listeners.first.end_test(test)
|
116
117
|
@logger.info("Result: #{test.result}")
|
117
118
|
@logger.close
|
119
|
+
@runner.listeners[1..-1].each { |l| l.end_test(test) }
|
118
120
|
break unless [Result::FAILURE, Result::ERROR].include? test.result
|
119
121
|
end # RETRY
|
120
122
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bartek Wilczek
|
@@ -39,6 +39,34 @@ dependencies:
|
|
39
39
|
- - '>='
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rest-client
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: sys-uname
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
42
70
|
description: This is a development version of a rails philosophy inspired framework
|
43
71
|
for web applications functional testing. It supports (or will support) threading,
|
44
72
|
scenario parametrization, different test environments and much more. Stay tuned
|
@@ -75,6 +103,7 @@ files:
|
|
75
103
|
- lib/listeners/console.rb
|
76
104
|
- lib/listeners/console_dots.rb
|
77
105
|
- lib/listeners/junit_xml.rb
|
106
|
+
- lib/listeners/webui.rb
|
78
107
|
- bin/moto
|
79
108
|
homepage: https://github.com/bwilczek/moto
|
80
109
|
licenses:
|