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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d13c936e69cf45887f9b71a57ed70ff927278746
4
- data.tar.gz: 3caa5e91cff3fff305b46f5e42b07b7798ae7b4b
3
+ metadata.gz: 4e0d2bc8cf0fdd04c80ef51518748b2f3091f4be
4
+ data.tar.gz: cffe21eadaa97d2469aca4754f7e23ef5c1e1ac2
5
5
  SHA512:
6
- metadata.gz: e35a1532511468cd22cc6a1510162e7e422206603c8ac0c771bf9eaac7e51122a1293ea4473744dade418d1a11efae8adde0d94f9c3e9ae0ede7eb320380d54e
7
- data.tar.gz: f17872321fced47b4af3772c548c55f9db95d5e0d88d875473a0ab384cd692a8a90f11751f812dd463163ddddf30c358a800d1fc2369a2d9d3dd0cfbb8b0ff85
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 (test_dir)
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? (tag_name + ',')
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[ :environments ], argv[ :config ])
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
@@ -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('-cfg', '--config Config') { |v| options[:config] = options[:config].merge( eval( v ) ) }
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]
@@ -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)
@@ -10,6 +10,7 @@ module Moto
10
10
  attr_reader :env
11
11
  attr_reader :params
12
12
  attr_writer :static_path
13
+ attr_accessor :log_path
13
14
 
14
15
  class << self
15
16
  attr_accessor :_path
@@ -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
- @log_path = "#{test.dir}/#{test.name.gsub(/\s+/, '_').gsub('::', '_').gsub('/', '_')}.log"
95
- @logger = Logger.new(File.open(@log_path, File::WRONLY | File::TRUNC | File::CREAT))
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
- @runner.listeners.each { |l| l.end_test(test) }
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.10
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: