moto 0.0.10 → 0.0.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.
- 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:
|