rutema 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,7 +1,11 @@
1
- == 0.7.1 / 2008-05-
1
+ == 0.8.0 / 2008-07-03
2
+ * Split rutemaweb into own gem
3
+ * Refactored reporters
4
+ * Re-enabled the --step commandline facility of rutemax alowing step-by-step execution and fixed the StepRunner implementation
5
+
6
+ == 0.7.1 / 2008-06-12
2
7
  * Added the ruport_formatter.rb file to the manifest (and consequently to the gem)
3
8
  * Locked down the active record and ramaze versions to avoid the String#start_with? alias bug from active support 2.1.0 and the Ramaze.start! change
4
-
5
9
  == 0.7.0 / 2008-05-16
6
10
  * Support for tools, paths and context information in the configuration solidified (http://patir.rubyforge.org/rutema/tool_configuration.html for more)
7
11
  * Changes in the configuration for Historian and ActiveRecordReporter. Check the distro_test samples
data/Manifest.txt CHANGED
@@ -1,39 +1,33 @@
1
+ COPYING.txt
1
2
  History.txt
2
3
  Manifest.txt
3
4
  README.txt
4
- COPYING.txt
5
5
  Rakefile
6
- bin/rutemax
7
6
  bin/rutemah
8
- bin/rutemaweb
7
+ bin/rutemax
8
+ distro_test.sh
9
9
  lib/rutema/configuration.rb
10
- lib/rutema/specification.rb
11
- lib/rutema/system.rb
12
- lib/rutema/reporter.rb
13
- lib/rutema/reporter_ar.rb
14
- lib/rutema/historian.rb
15
- lib/rutema/model.rb
16
10
  lib/rutema/db.rb
17
11
  lib/rutema/gems.rb
18
- lib/rutemaweb/main.rb
19
- lib/rutemaweb/ramaze_controller.rb
20
- lib/rutemaweb/ruport_formatter.rb
21
- lib/rutemaweb/public/bg_menu.gif
22
- lib/rutemaweb/public/bg_submenu.gif
23
- lib/rutemaweb/public/run_error.png
24
- lib/rutemaweb/public/run_ok.png
25
- lib/rutemaweb/public/run_warn.png
26
- lib/rutemaweb/public/step_error.png
27
- lib/rutemaweb/public/step_ok.png
28
- lib/rutemaweb/public/step_warn.png
29
- lib/rutemaweb/public/style.css
30
- lib/rutemaweb/public/tie_logo.gif
31
- lib/rutemaweb/view/layout.rhtml
32
- test/test_configuration.rb
33
- test/test_specification.rb
34
- test/test_system.rb
35
- test/test_historian.rb
36
- test/test_reporter.rb
12
+ lib/rutema/historian.rb
13
+ lib/rutema/model.rb
14
+ lib/rutema/reporter.rb
15
+ lib/rutema/reporters/activerecord.rb
16
+ lib/rutema/reporters/email.rb
17
+ lib/rutema/reporters/standard_reporters.rb
18
+ lib/rutema/specification.rb
19
+ lib/rutema/system.rb
20
+ selftest.sh
21
+ test/distro_test/config/database.rutema
22
+ test/distro_test/config/database.rutemah
23
+ test/distro_test/config/full.rutema
24
+ test/distro_test/config/jruby.rutema
25
+ test/distro_test/config/jruby.rutemah
26
+ test/distro_test/config/minimal.rutema
27
+ test/distro_test/specs/T001.spec
28
+ test/distro_test/specs/T002.spec
29
+ test/distro_test/specs/T003.spec
30
+ test/distro_test/specs/T004.spec
37
31
  test/rutema.rutema
38
32
  test/rutema.spec
39
33
  test/samples/check.spec
@@ -42,11 +36,10 @@ test/samples/teardown.spec
42
36
  test/samples/test.spec
43
37
  test/samples/tests/no_title.spec
44
38
  test/samples/tests/sample.spec
45
- test/distro_test/config/minimal.rutema
46
- test/distro_test/config/database.rutema
47
- test/distro_test/config/database.rutemah
48
- test/distro_test/specs/T001.spec
49
- test/distro_test/specs/T002.spec
50
- test/distro_test/specs/T003.spec
51
- test/distro_test/specs/T004.spec
39
+ test/test_configuration.rb
40
+ test/test_historian.rb
41
+ test/test_model.rb
42
+ test/test_reporter.rb
43
+ test/test_specification.rb
44
+ test/test_system.rb
52
45
 
data/README.txt CHANGED
@@ -9,11 +9,12 @@ For more information look at http://patir.rubyforge.org/rutema
9
9
  == FEATURES/PROBLEMS:
10
10
  * Unified test execution environment for automated and manual tests
11
11
  * Extensible reports and notifications in various formats (email, rss, pdf, html etc.)
12
- * Web frontend and command line report generation tools for browsing the test results database
12
+ * Web frontend and command line report generation tools for browsing the test results database (with rutemaweb)
13
13
  * Comprehensive history of test execution
14
14
  * A well defined way to create a project specific test specification format
15
15
 
16
16
  == SYNOPSIS:
17
+
17
18
  See http://patir.rubyforge.org/rutema/distro_test.html for an introductory example.
18
19
 
19
20
  == REQUIREMENTS:
@@ -21,9 +22,9 @@ See http://patir.rubyforge.org/rutema/distro_test.html for an introductory examp
21
22
  * mailfactory (http://rubyforge.org/projects/mailfactory/)
22
23
  * activerecord (http://ar.rubyonrails.com/)
23
24
  * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/)
24
- * ramaze (http://www.ramaze.net/)
25
25
  * ruport (http://rubyreports.org/)
26
26
  * acts_as_reportable
27
+ * highline
27
28
 
28
29
  == INSTALL:
29
30
  * gem install rutema
data/Rakefile CHANGED
@@ -14,15 +14,13 @@ Hoe.new('rutema', "#{Rutema::Version::STRING}") do |p|
14
14
  p.description = p.paragraphs_of('README.txt', 1..5).join("\n\n")
15
15
  p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
16
16
  p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
17
- p.extra_deps<<['patir',">=0.5.3"]
17
+ p.extra_deps<<['patir',">=0.5.6"]
18
18
  p.extra_deps<<['highline']
19
19
  p.extra_deps<<['mailfactory']
20
20
  p.extra_deps<<['activerecord','=2.0.2']
21
21
  p.extra_deps<<['ruport']
22
22
  p.extra_deps<<['acts_as_reportable']
23
- p.extra_deps<<['ramaze','=0.3.9.1']
24
- p.extra_deps<<['erubis']
25
- p.spec_extras={:executables=>["rutemax","rutemah","rutemaweb"],
23
+ p.spec_extras={:executables=>["rutemax","rutemah"],
26
24
  :default_executable=>"rutemax"}
27
25
  end
28
26
 
data/distro_test.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+ rutemax -c test/distro_test/config/minimal.rutema
3
+ rutemax -c test/distro_test/config/database.rutema
4
+ rutemah -c test/distro_test/config/database.rutemah all
5
+ rutemax -c test/distro_test/config/minimal.rutema --step
data/lib/rutema/gems.rb CHANGED
@@ -1,7 +1,4 @@
1
1
  require 'rubygems'
2
- gem 'ramaze','=0.3.9.1'
3
- require 'ramaze'
4
- #class String; undef_method :start_with? end
5
2
  gem 'activerecord','=2.0.2'
6
3
  require 'active_record'
7
4
  require 'patir/configuration'
@@ -20,73 +20,6 @@ module Rutema
20
20
  end
21
21
  end
22
22
 
23
- #The following configuration keys are used by EmailReporter:
24
- #
25
- #:server - the smtp server to use
26
- #
27
- #:port - the port to use (defaults to 25)
28
- #
29
- #:sender - the sender of the email (defaults to rutema@domain)
30
- #
31
- #:recipients - an array of strings with the recipients of the report emails
32
- #
33
- #The :logger key is set by the Coordinator
34
- #
35
- #Customization keys:
36
- #
37
- #:subject - the string of this key will be prefixed as a subject for the email
38
- class EmailReporter
39
- attr_reader :last_message
40
- def initialize definition
41
- #get the logger
42
- @logger=definition[:logger]
43
- @logger||=Patir.setup_logger
44
- #extract the parameters from the definition
45
- #address and port of the smtp server
46
- @server=definition[:server]
47
- @port=definition[:port]
48
- @port||=25
49
- #the domain we're coming from
50
- @domain=definition[:domain]
51
- #construct the mail factory object
52
- @mail = MailFactory.new()
53
- @mail.from = definition[:sender]
54
- @mail.from||="rutema@#{@domain}"
55
- @recipients=definition[:recipients]
56
- @mail.to=@recipients
57
- #customize
58
- @subject=definition[:subject]
59
- @subject||=""
60
- #this is a way to test without sending
61
- @dummy=true if definition[:dummy]
62
- @logger.info("Reporter '#{self.to_s}' registered")
63
- end
64
-
65
- def to_s
66
- list=@recipients.join(', ')
67
- "EmailReporter - #{@server}:#{@port} from #{@mail.from} to #{list}"
68
- end
69
-
70
- def report specifications,runner_states,parse_errors,configuration
71
- @mail.subject = "#{@subject}"
72
- @mail.text = Rutema.text_report(runner_states,parse_errors)
73
- begin
74
- if @mail.to.empty?
75
- @logger.error("No recipients for the report mail")
76
- else
77
- #
78
- #~ if @password
79
- #~ #if a password is defined, use cram_md5 authentication
80
- #~ else
81
- Net::SMTP.start(@server, @port, @domain) {|smtp| smtp.sendmail(@mail.to_s(),@mail.from,@mail.to)} unless @dummy
82
- #~ end
83
- end#recipients empty
84
- rescue
85
- @logger.error("Sending of email report failed: #{$!}")
86
- end
87
- @mail.to_s
88
- end
89
- end
90
23
  private
91
24
  def self.text_report runner_states,parse_errors
92
25
  msg="Parse errors: #{parse_errors.size}"
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
2
- $:.unshift File.join(File.dirname(__FILE__),"..")
2
+ $:.unshift File.join(File.dirname(__FILE__),"..","..")
3
3
  require 'yaml'
4
4
  require 'rutema/reporter'
5
5
  require 'rutema/model'
@@ -9,18 +9,18 @@ require 'rutema/gems'
9
9
  module Rutema
10
10
  #The ActiveRecordReporter will store the results of a test run in a database using ActiveRecord.
11
11
  #
12
- #The DBMSs supported are dependent on the platform: either SQLite3 or h2 (jruby)
12
+ #The DBMSs supported are dependent on the platform: either SQLite3 (MRI) or h2 (jruby)
13
13
  class ActiveRecordReporter<Reporter
14
14
  #The required keys in this reporter's configuration are:
15
15
  # :db - the database configuration. A Hash with the DB adapter information
16
16
  # :db=>{:database=>"sample.rb"}
17
17
  #
18
- #Optioanlly you can pass a Logger instance with the :logger key
18
+ #Optionally you can pass a Logger instance with the :logger key
19
19
  def initialize definition
20
20
  @logger=definition[:logger]
21
21
  @logger||=Patir.setup_logger
22
22
  database_configuration = definition[:db]
23
- raise "No database configuration defined" unless database_configuration
23
+ raise "No database configuration defined, missing :db configuration key." unless database_configuration
24
24
  unless database_configuration[:database]==":memory:"
25
25
  @dbfile=File.expand_path(database_configuration[:database])
26
26
  else
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
2
+ $:.unshift File.join(File.dirname(__FILE__),"..","..")
3
+ require 'rutema/reporter'
4
+ require 'rutema/specification'
5
+ require 'rutema/gems'
6
+
7
+ module Rutema
8
+ #The following configuration keys are used by EmailReporter:
9
+ #
10
+ #:server - the smtp server to use
11
+ #
12
+ #:port - the port to use (defaults to 25)
13
+ #
14
+ #:sender - the sender of the email (defaults to rutema@domain)
15
+ #
16
+ #:recipients - an array of strings with the recipients of the report emails
17
+ #
18
+ #The :logger key is set by the Coordinator
19
+ #
20
+ #Customization keys:
21
+ #
22
+ #:subject - the string of this key will be prefixed as a subject for the email
23
+ class EmailReporter
24
+ attr_reader :last_message
25
+ def initialize definition
26
+ #get the logger
27
+ @logger=definition[:logger]
28
+ @logger||=Patir.setup_logger
29
+ #extract the parameters from the definition
30
+ #address and port of the smtp server
31
+ @server=definition[:server]
32
+ @port=definition[:port]
33
+ @port||=25
34
+ #the domain we're coming from
35
+ @domain=definition[:domain]
36
+ #construct the mail factory object
37
+ @mail = MailFactory.new()
38
+ @mail.from = definition[:sender]
39
+ @mail.from||="rutema@#{@domain}"
40
+ @recipients=definition[:recipients]
41
+ @mail.to=@recipients
42
+ #customize
43
+ @subject=definition[:subject]
44
+ @subject||=""
45
+ #this is a way to test without sending
46
+ @dummy=true if definition[:dummy]
47
+ @logger.info("Reporter '#{self.to_s}' registered")
48
+ end
49
+
50
+ def to_s
51
+ list=@recipients.join(', ')
52
+ "EmailReporter - #{@server}:#{@port} from #{@mail.from} to #{list}"
53
+ end
54
+
55
+ def report specifications,runner_states,parse_errors,configuration
56
+ @mail.subject = "#{@subject}"
57
+ @mail.text = Rutema.text_report(runner_states,parse_errors)
58
+ begin
59
+ if @mail.to.empty?
60
+ @logger.error("No recipients for the report mail")
61
+ else
62
+ #
63
+ #~ if @password
64
+ #~ #if a password is defined, use cram_md5 authentication
65
+ #~ else
66
+ Net::SMTP.start(@server, @port, @domain) {|smtp| smtp.sendmail(@mail.to_s(),@mail.from,@mail.to)} unless @dummy
67
+ #~ end
68
+ end#recipients empty
69
+ rescue
70
+ @logger.error("Sending of email report failed: #{$!}")
71
+ end
72
+ @mail.to_s
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,5 @@
1
+ # Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
2
+ $:.unshift File.join(File.dirname(__FILE__),"..","..")
3
+
4
+ require 'rutema/reporters/email'
5
+ require 'rutema/reporters/activerecord'
@@ -1,5 +1,6 @@
1
1
  # Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
2
2
  $:.unshift File.join(File.dirname(__FILE__),"..")
3
+ require 'rutema/reporters/standard_reporters'
3
4
  require 'rutema/gems'
4
5
 
5
6
  module Rutema
data/lib/rutema/system.rb CHANGED
@@ -3,15 +3,15 @@ $:.unshift File.join(File.dirname(__FILE__),"..")
3
3
  require 'rexml/document'
4
4
  require 'rutema/specification'
5
5
  require 'rutema/configuration'
6
- require 'rutema/reporter_ar'
6
+ require 'rutema/reporters/standard_reporters'
7
7
  require 'rutema/gems'
8
8
 
9
9
  module Rutema
10
10
  #This module defines the version numbers for the library
11
11
  module Version
12
12
  MAJOR=0
13
- MINOR=7
14
- TINY=1
13
+ MINOR=8
14
+ TINY=0
15
15
  STRING=[ MAJOR, MINOR, TINY ].join( "." )
16
16
  end
17
17
  #Is raised when an error is found in a specification
@@ -318,7 +318,7 @@ module Rutema
318
318
  @logger.info("Parsing teardown specification from '#{@configuration.teardown}'")
319
319
  teardown=@parser.parse_specification(@configuration.teardown).scenario
320
320
  end
321
- if @configuration.step
321
+ if @configuration.use_step_by_step
322
322
  @logger.info("Using StepRunner")
323
323
  return StepRunner.new(setup,teardown,@logger)
324
324
  else
@@ -484,7 +484,7 @@ module Rutema
484
484
  return state
485
485
  end
486
486
  def run_step step
487
- @logger.debug("#{step.number} - #{step.step_type}")
487
+ @logger.info("Running step #{step.number} - #{step.step_type}")
488
488
  if step.has_cmd? && step.cmd.respond_to?(:run)
489
489
  step.cmd.run
490
490
  else
@@ -508,14 +508,17 @@ module Rutema
508
508
 
509
509
  #StepRunner halts before every step and asks if it should be executed or not.
510
510
  class StepRunner<Runner
511
+ def initialize setup=nil, teardown=nil,logger=nil
512
+ @questioner=HighLine.new
513
+ super(setup,teardown,logger)
514
+ end
511
515
  def run_step step
512
- if HighLine.agree("Execute #{step.to_s}?")
513
- return super
516
+ if @questioner.agree("Execute #{step.to_s}?")
517
+ return super(step)
514
518
  else
515
- state[:state]=:not_executed
516
- msg="#{step.number} - #{step.step_type} - #{state[:state]}"
519
+ msg="#{step.number} - #{step.step_type} - #{step.status}"
517
520
  @logger.info(msg)
518
- return state
521
+ return step
519
522
  end
520
523
  end
521
524
  end
@@ -529,6 +532,7 @@ module Rutema
529
532
  begin
530
533
  raise "No configuration file defined!" if !@config_file
531
534
  @configuration=RutemaXConfigurator.new(@config_file,@logger).configuration
535
+ @configuration.use_step_by_step=@step
532
536
  Dir.chdir(File.dirname(@config_file)) do
533
537
  @coordinator=Coordinator.new(@configuration,@logger)
534
538
  application_flow
@@ -551,6 +555,7 @@ module Rutema
551
555
  opt.on("--config FILE", "-c FILE",String,"Loads the configuration from FILE") { |@config_file|}
552
556
  opt.on("--log FILE", "-l FILE",String,"Redirects the log output to FILE") { |@log_file|}
553
557
  opt.on("--check","Runs just the check test"){@check=true}
558
+ opt.on("--step","Runs test cases step by step"){@step=true}
554
559
  opt.on("-v", "--version","Displays the version") { $stdout.puts("v#{Version::STRING}");exit 0 }
555
560
  opt.on("--help", "-h", "-?", "This text") { $stdout.puts opt; exit 0 }
556
561
  opt.on("The commands are:")
data/selftest.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ rutemax -c test/rutema.rutema all
@@ -0,0 +1,14 @@
1
+ configuration.parser={:class=>Rutema::MinimalXMLParser}
2
+ configuration.reporter={:class=>Rutema::ActiveRecordReporter, :database=>"sample.db"}
3
+ configuration.tests=[
4
+ "../specs/T001.spec",
5
+ "../specs/T002.spec",
6
+ "../specs/T003.spec",
7
+ "../specs/T004.spec"
8
+ ]
9
+ configuration.tool={:name=>"test",:path=>".",:configuration=>{:key=>"value"}}
10
+ configuration.path={:name=>"test",:path=>"."}
11
+ configuration.context={:key=>"value"}
12
+ configuration.check="."
13
+ configuration.teardown="."
14
+ configuration.setup="."
@@ -0,0 +1,8 @@
1
+ configuration.parser={:class=>Rutema::MinimalXMLParser}
2
+ configuration.reporter={:class=>Rutema::ActiveRecordReporter, :db=>{:database=>"h2"}}
3
+ configuration.tests=[
4
+ "../specs/T001.spec",
5
+ "../specs/T002.spec",
6
+ "../specs/T003.spec",
7
+ "../specs/T004.spec"
8
+ ]
@@ -0,0 +1,7 @@
1
+ #include the configuration from database.rutema
2
+ configuration.load_from_file("database.rutema")
3
+ #This is the verbose version of the configuration entry:
4
+ #configuration.db=:database=>"db/h2",:adapter=>"jdbch2"}
5
+ #For the time being the adapter is being automatically set according to the platform we're running on, so the :adapter is ignored
6
+ #SQLite for MRI and h2 for jRuby
7
+ configuration.db={:database=>"db/h2"}
data/test/rutema.rutema CHANGED
@@ -1,3 +1,3 @@
1
1
  configuration.parser={:class=>Rutema::MinimalXMLParser}
2
- configuration.reporter={:class=>Rutema::ActiveRecordReporter, :dbfile=>"rutema.db"}
2
+ configuration.reporter={:class=>Rutema::ActiveRecordReporter, :db=>{:database=>"rutema.db"}}
3
3
  configuration.tests=["rutema.spec"]
@@ -4,7 +4,7 @@ require 'test/unit'
4
4
  require 'ostruct'
5
5
  require 'fileutils'
6
6
  require 'rutema/reporter'
7
- require 'rutema/reporter_ar'
7
+ require 'rutema/reporters/standard_reporters'
8
8
  #$DEBUG=true
9
9
  module TestRutema
10
10
  class MockCommand
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rutema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vassilis Rizopoulos
@@ -9,20 +9,22 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-13 00:00:00 +02:00
12
+ date: 2008-07-03 00:00:00 +02:00
13
13
  default_executable: rutemax
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: patir
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
20
21
  - - ">="
21
22
  - !ruby/object:Gem::Version
22
- version: 0.5.3
23
+ version: 0.5.6
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: highline
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
@@ -32,6 +34,7 @@ dependencies:
32
34
  version:
33
35
  - !ruby/object:Gem::Dependency
34
36
  name: mailfactory
37
+ type: :runtime
35
38
  version_requirement:
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
@@ -41,6 +44,7 @@ dependencies:
41
44
  version:
42
45
  - !ruby/object:Gem::Dependency
43
46
  name: activerecord
47
+ type: :runtime
44
48
  version_requirement:
45
49
  version_requirements: !ruby/object:Gem::Requirement
46
50
  requirements:
@@ -50,6 +54,7 @@ dependencies:
50
54
  version:
51
55
  - !ruby/object:Gem::Dependency
52
56
  name: ruport
57
+ type: :runtime
53
58
  version_requirement:
54
59
  version_requirements: !ruby/object:Gem::Requirement
55
60
  requirements:
@@ -59,24 +64,7 @@ dependencies:
59
64
  version:
60
65
  - !ruby/object:Gem::Dependency
61
66
  name: acts_as_reportable
62
- version_requirement:
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
68
- version:
69
- - !ruby/object:Gem::Dependency
70
- name: ramaze
71
- version_requirement:
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "="
75
- - !ruby/object:Gem::Version
76
- version: 0.3.9.1
77
- version:
78
- - !ruby/object:Gem::Dependency
79
- name: erubis
67
+ type: :runtime
80
68
  version_requirement:
81
69
  version_requirements: !ruby/object:Gem::Requirement
82
70
  requirements:
@@ -86,63 +74,57 @@ dependencies:
86
74
  version:
87
75
  - !ruby/object:Gem::Dependency
88
76
  name: hoe
77
+ type: :development
89
78
  version_requirement:
90
79
  version_requirements: !ruby/object:Gem::Requirement
91
80
  requirements:
92
81
  - - ">="
93
82
  - !ruby/object:Gem::Version
94
- version: 1.5.3
83
+ version: 1.7.0
95
84
  version:
96
- description: "== DESCRIPTION: rutema is a test execution tool with a twist. It allows you to combine test tools while it takes care of logging, reporting, archiving of results and formalizes execution of automated and manual tests. It's purpose is to make testing in heterogeneous environments easier. For more information look at http://patir.rubyforge.org/rutema == FEATURES/PROBLEMS: * Unified test execution environment for automated and manual tests * Extensible reports and notifications in various formats (email, rss, pdf, html etc.) * Web frontend and command line report generation tools for browsing the test results database * Comprehensive history of test execution * A well defined way to create a project specific test specification format == SYNOPSIS: See http://patir.rubyforge.org/rutema/distro_test.html for an introductory example. == REQUIREMENTS: * patir (http://patir.rubyforge.org) * mailfactory (http://rubyforge.org/projects/mailfactory/) * activerecord (http://ar.rubyonrails.com/) * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/) * ramaze (http://www.ramaze.net/) * ruport (http://rubyreports.org/) * acts_as_reportable == INSTALL: * gem install rutema"
85
+ description: "== DESCRIPTION: rutema is a test execution tool with a twist. It allows you to combine test tools while it takes care of logging, reporting, archiving of results and formalizes execution of automated and manual tests. It's purpose is to make testing in heterogeneous environments easier. For more information look at http://patir.rubyforge.org/rutema == FEATURES/PROBLEMS: * Unified test execution environment for automated and manual tests * Extensible reports and notifications in various formats (email, rss, pdf, html etc.) * Web frontend and command line report generation tools for browsing the test results database (with rutemaweb) * Comprehensive history of test execution * A well defined way to create a project specific test specification format == SYNOPSIS: See http://patir.rubyforge.org/rutema/distro_test.html for an introductory example. == REQUIREMENTS: * patir (http://patir.rubyforge.org) * mailfactory (http://rubyforge.org/projects/mailfactory/) * activerecord (http://ar.rubyonrails.com/) * sqlite3 (http://rubyforge.org/projects/sqlite-ruby/) * ruport (http://rubyreports.org/) * acts_as_reportable * highline"
97
86
  email: riva@braveworld.net
98
87
  executables:
99
88
  - rutemax
100
89
  - rutemah
101
- - rutemaweb
102
90
  extensions: []
103
91
 
104
92
  extra_rdoc_files:
93
+ - COPYING.txt
105
94
  - History.txt
106
95
  - Manifest.txt
107
96
  - README.txt
108
- - COPYING.txt
109
97
  files:
98
+ - COPYING.txt
110
99
  - History.txt
111
100
  - Manifest.txt
112
101
  - README.txt
113
- - COPYING.txt
114
102
  - Rakefile
115
- - bin/rutemax
116
103
  - bin/rutemah
117
- - bin/rutemaweb
104
+ - bin/rutemax
105
+ - distro_test.sh
118
106
  - lib/rutema/configuration.rb
119
- - lib/rutema/specification.rb
120
- - lib/rutema/system.rb
121
- - lib/rutema/reporter.rb
122
- - lib/rutema/reporter_ar.rb
123
- - lib/rutema/historian.rb
124
- - lib/rutema/model.rb
125
107
  - lib/rutema/db.rb
126
108
  - lib/rutema/gems.rb
127
- - lib/rutemaweb/main.rb
128
- - lib/rutemaweb/ramaze_controller.rb
129
- - lib/rutemaweb/ruport_formatter.rb
130
- - lib/rutemaweb/public/bg_menu.gif
131
- - lib/rutemaweb/public/bg_submenu.gif
132
- - lib/rutemaweb/public/run_error.png
133
- - lib/rutemaweb/public/run_ok.png
134
- - lib/rutemaweb/public/run_warn.png
135
- - lib/rutemaweb/public/step_error.png
136
- - lib/rutemaweb/public/step_ok.png
137
- - lib/rutemaweb/public/step_warn.png
138
- - lib/rutemaweb/public/style.css
139
- - lib/rutemaweb/public/tie_logo.gif
140
- - lib/rutemaweb/view/layout.rhtml
141
- - test/test_configuration.rb
142
- - test/test_specification.rb
143
- - test/test_system.rb
144
- - test/test_historian.rb
145
- - test/test_reporter.rb
109
+ - lib/rutema/historian.rb
110
+ - lib/rutema/model.rb
111
+ - lib/rutema/reporter.rb
112
+ - lib/rutema/reporters/activerecord.rb
113
+ - lib/rutema/reporters/email.rb
114
+ - lib/rutema/reporters/standard_reporters.rb
115
+ - lib/rutema/specification.rb
116
+ - lib/rutema/system.rb
117
+ - selftest.sh
118
+ - test/distro_test/config/database.rutema
119
+ - test/distro_test/config/database.rutemah
120
+ - test/distro_test/config/full.rutema
121
+ - test/distro_test/config/jruby.rutema
122
+ - test/distro_test/config/jruby.rutemah
123
+ - test/distro_test/config/minimal.rutema
124
+ - test/distro_test/specs/T001.spec
125
+ - test/distro_test/specs/T002.spec
126
+ - test/distro_test/specs/T003.spec
127
+ - test/distro_test/specs/T004.spec
146
128
  - test/rutema.rutema
147
129
  - test/rutema.spec
148
130
  - test/samples/check.spec
@@ -151,13 +133,12 @@ files:
151
133
  - test/samples/test.spec
152
134
  - test/samples/tests/no_title.spec
153
135
  - test/samples/tests/sample.spec
154
- - test/distro_test/config/minimal.rutema
155
- - test/distro_test/config/database.rutema
156
- - test/distro_test/config/database.rutemah
157
- - test/distro_test/specs/T001.spec
158
- - test/distro_test/specs/T002.spec
159
- - test/distro_test/specs/T003.spec
160
- - test/distro_test/specs/T004.spec
136
+ - test/test_configuration.rb
137
+ - test/test_historian.rb
138
+ - test/test_model.rb
139
+ - test/test_reporter.rb
140
+ - test/test_specification.rb
141
+ - test/test_system.rb
161
142
  has_rdoc: true
162
143
  homepage:
163
144
  post_install_message:
@@ -181,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
162
  requirements: []
182
163
 
183
164
  rubyforge_project: patir
184
- rubygems_version: 1.1.1
165
+ rubygems_version: 1.2.0
185
166
  signing_key:
186
167
  specification_version: 2
187
168
  summary: rutema is a test execution and management framework for heterogeneous testing environments
data/bin/rutemaweb DELETED
@@ -1,9 +0,0 @@
1
- # Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
2
- begin
3
- require 'rutemaweb/main'
4
- rescue LoadError
5
- require 'rubygems'
6
- require 'rutemaweb/main'
7
- end
8
-
9
- start_ramaze
@@ -1,30 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),"..")
2
- require 'rutemaweb/ramaze_controller'
3
-
4
- def start_ramaze
5
- logger=Patir.setup_logger
6
- db_file=parse_command_line(ARGV)
7
- db_file=File.expand_path(db_file)
8
- Rutema.connect_to_ar(db_file,logger)
9
- Ramaze.start :force=>true
10
- end
11
-
12
-
13
- def parse_command_line args
14
- args.options do |opt|
15
- opt.on("Usage:")
16
- opt.on("rutemaweb [options] database_file")
17
- opt.on("Options:")
18
- opt.on("--debug", "-d","Turns on debug messages") { $DEBUG=true }
19
- opt.on("-v", "--version","Displays the version") { $stdout.puts("v#{Version::STRING}");exit 0 }
20
- opt.on("--help", "-h", "-?", "This text") { $stdout.puts opt; exit 0 }
21
- opt.parse!
22
- #and now the rest
23
- if args.empty?
24
- $stdout.puts opt
25
- exit 0
26
- else
27
- return args.shift
28
- end
29
- end
30
- end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,105 +0,0 @@
1
- /* CSS Document */
2
-
3
- /*PAGE LAYOUT*/
4
- body {
5
- margin-left: 0px;
6
- margin-top: 0px;
7
- margin-right: 0px;
8
- margin-bottom: 0px;
9
- }
10
- table {
11
- font: 0.9em Tahoma, sans-serif;
12
- color: #666666;
13
- text-align: center;
14
-
15
- }
16
- #logo{float:left; background-image:url(/tie_logo.gif); width:234px; height:213px;}
17
- #topheader{float:right; width:566px; height:97px; background-color:#F0F0F0; position:relative}
18
- #toplinks{position:absolute; right:10px; top:10px;}
19
- #menu{float:right; width:566px; height:32px; background-image:url(/bg_menu.gif); background-repeat:repeat-x;}
20
- #submenu{float:right; width:566px; height:32px; background-image:url(/bg_submenu.gif); background-position:top; background-repeat:repeat-x;}
21
- #contenttext{float:right; width:566px;}
22
- #contentnopanel{float:left; width:800px}
23
- #leftpanel{float:left; width:234px;}
24
- #footer{float:left; width:800px; background-color:#F0F0F0; padding:10px;}
25
- #footernopanel{float:left; width:800px; background-color:#F0F0F0; padding:10px;}
26
- /*GRAY PANEL*/
27
- .graypanel{
28
- border:solid 1px #666666; background-color:#F7F7F7; padding:10px; margin:10px;
29
- }
30
-
31
- /*TEXT STYLES*/
32
- .bodytext {
33
- font: 0.9em Tahoma, sans-serif;
34
- color: #666666;
35
- }
36
-
37
- .titletext {
38
- font: 0.7em Tahoma, sans-serif;
39
- font-size:26px;
40
- font-weight:bold;
41
- color:#CC0000;
42
- }
43
- .whitetitle {
44
- font: 0.7em Tahoma, sans-serif;
45
- font-size:36px;
46
- font-weight:bold;
47
- color:#FFFFFF;
48
- }
49
- .smalltitle {
50
- font: 0.7em Tahoma, sans-serif;
51
- font-size:20px;
52
- font-weight:bold;
53
- color:#CC0000;
54
- }
55
- .smallwhitetext {
56
- font: 0.7em Tahoma, sans-serif;
57
- font-size: 11px;
58
- font-weight:bold;
59
- color: #FFFFFF;
60
- }
61
- .smallwhitetext a{
62
- font: 0.7em Tahoma, sans-serif;
63
- font-size: 11px;
64
- font-weight:bold;
65
- color: #FFFFFF;
66
- text-decoration:none;
67
- }
68
- .smallwhitetext a:hover{
69
- text-decoration:underline;
70
- }
71
- .smallgraytext {
72
- font: 0.7em Tahoma, sans-serif;
73
- font-size: 11px;
74
- font-weight:bold;
75
- color:#999999;
76
- }
77
- .smallgraytext a{
78
- font: 0.7em Tahoma, sans-serif;
79
- font-size: 11px;
80
- font-weight:bold;
81
- color:#999999;
82
- text-decoration:none;
83
- }
84
- .smallgraytext a:hover{
85
- text-decoration:underline;
86
- }
87
- .smallredtext {
88
- font: 0.7em Tahoma, sans-serif;
89
- font-size: 11px;
90
- font-weight:bold;
91
- color:#CC0000;
92
- }
93
- .smallredtext a{
94
- font: 0.7em Tahoma, sans-serif;
95
- font-size: 11px;
96
- font-weight:bold;
97
- color:#CC0000;
98
- text-decoration:none;
99
- }
100
- .smallredtext a:hover{
101
- text-decoration:underline;
102
- }
103
- .vtable tr td {
104
- text-align: left;
105
- }
Binary file
@@ -1,150 +0,0 @@
1
- # Copyright (c) 2008 Vassilis Rizopoulos. All rights reserved.
2
- $:.unshift File.join(File.dirname(__FILE__),"..")
3
- require 'rutema/system'
4
- require 'rutemaweb/ruport_formatter.rb'
5
- require 'rutema/gems'
6
-
7
-
8
- module Rutema
9
- module UI
10
- class MainController < Ramaze::Controller
11
- map '/'
12
- engine :Erubis
13
- layout :layout
14
- #Time format to use for the start and stop times
15
- TIME_FORMAT="%y%m%d - %H:%M:%S"
16
- #image filename to use for succesfull scenarios
17
- IMG_SCE_OK="/run_ok.png"
18
- #image filename to use for failed scenarios
19
- IMG_SCE_ERROR="/run_error.png"
20
- #image filename to use for unexecuted scenarios
21
- IMG_SCE_WARN="/run_warn.png"
22
- #image filename to use for succesfull steps
23
- IMG_STEP_OK="/step_ok.png"
24
- #image filename to use for failed steps
25
- IMG_STEP_ERROR="/step_error.png"
26
- #image filename to use for unexecuted steps
27
- IMG_STEP_WARN="/step_warn.png"
28
- def index
29
- @panel_content=panel_content(:runs)
30
- @content="<p>This is the rutema web interface.<br/>It allows you to browse the contents of the test results database.</p><p>Currently you can view the results for each separate run, the results for a specific scenario (a complete list of all steps executed in the scenario with standard and error output logs) or the complete execution history of a scenario.</p>"
31
- end
32
- def run run_id=""
33
- @panel_content=panel_content(:runs)
34
- if !run_id.empty?
35
- @content=single_run(run_id)
36
- end
37
- end
38
- def scenario scenario_id=""
39
- @panel_content=panel_content(:scenarios)
40
- if !scenario_id.empty?
41
- if scenario_id.to_i==0
42
- @content=scenario_by_name(scenario_id)
43
- else
44
- @content=scenario_in_a_run(scenario_id)
45
- end
46
- end
47
- end
48
- private
49
- #Renders the summary of all runs for a single scenario
50
- def scenario_by_name scenario_id
51
- ret=""
52
- begin
53
- table=Rutema::Model::Scenario.report_table(:all,:conditions=>["name = :spec_name",{:spec_name=>scenario_id}])
54
- if table.empty?
55
- ret="<p>no results for #{scenario_id}</p>"
56
- else
57
- table.replace_column("status") do |r|
58
- scenario_status_snippet(r)
59
- end
60
- table.replace_column("version") {|r| r.version ? r.version : "N/A"}
61
- table.replace_column("start_time"){|r| r.stop_time ? r.start_time.strftime(TIME_FORMAT) : nil}
62
- table.replace_column("stop_time"){|r| r.stop_time.strftime(TIME_FORMAT)}
63
- table.reorder("status","run_id","version","start_time","stop_time")
64
- ret<<table.to_html
65
- end
66
- rescue
67
- puts $!
68
- "<p>could not retrieve data for #{scenario_id}</p>"
69
- end
70
- return ret
71
- end
72
- #Renders the information for a specific executed scenario
73
- #giving a detailed list of the steps, with status and output
74
- def scenario_in_a_run scenario_id
75
- table=Rutema::Model::Step.report_table(:all,:conditions=>["scenario_id = :scenario_id",{:scenario_id=>scenario_id}])
76
- if table.empty?
77
- ret="<p>no results for #{scenario_id}</p>"
78
- else
79
- table.replace_column("status") do |r|
80
- img_src=IMG_STEP_WARN if "not_executed"==r.status
81
- img_src=IMG_STEP_OK if "success"==r.status
82
- img_src=IMG_STEP_ERROR if "error"==r.status
83
- "<img src=\"#{img_src}\" align=\"center\"/>"
84
- end
85
- ret=table.to_vhtml
86
- end
87
- return ret
88
- end
89
- #will render a hash in a table of key||value rows
90
- def context_table context
91
- ret="<table><tr>"
92
- context.each do |k,v|
93
- ret<<"<td>#{k.to_s}</td><td>#{v.to_s}</td>"
94
- end
95
- ret<<"</tr></table>"
96
- end
97
- #Renders the information for a single run providing the context and a list of the scenarios
98
- def single_run run_id
99
- ret=""
100
- begin
101
- run=Rutema::Model::Run.find(run_id)
102
- rescue
103
- return "Could not find #{run_id}"
104
- end
105
- if run.context
106
- ret<<context_table(run.context)
107
- end
108
- table=Rutema::Model::Scenario.report_table(:all,:conditions=>["run_id = :run_id",{:run_id=>run_id}],:except=>["run_id"])
109
- if table.empty?
110
- return "No scenarios for run #{run_id}"
111
- else
112
- table.replace_column("status") do |r|
113
- scenario_status_snippet(r)
114
- end
115
- table.replace_column("version") {|r| r.version ? r.version : "N/A"}
116
- table.replace_column("start_time"){|r| r.stop_time ? r.start_time.strftime(TIME_FORMAT) : nil}
117
- table.replace_column("stop_time"){|r| r.stop_time.strftime(TIME_FORMAT)}
118
- table.reorder("status","name","version","start_time","stop_time")
119
- ret<<table.to_html
120
- end
121
- return ret
122
- end
123
- #Gives the HTML to use for the status column of a scenario list
124
- def scenario_status_snippet r
125
- if "not_executed"==r.status
126
- "<img src=\"#{IMG_SCE_WARN}\" align=\"center\"/>"
127
- else
128
- img_src=IMG_SCE_OK if "success"==r.status
129
- img_src=IMG_SCE_ERROR if "error"==r.status
130
- "<a href=\"/scenario/#{r.data["id"]}\"><img src=\"#{img_src}\" align=\"center\"/></a>"
131
- end
132
- end
133
- def panel_content context
134
- ret=""
135
- if context==:runs
136
- #<img src="run_error.png" align="center"/><a href="index.html" class="smallgraytext">1 - 28.06.2007</a>
137
- Rutema::Model::Run.find(:all,:select=>"id").reverse.each do |r|
138
- ret<<"<a class=\"smallgreytext\" href=\"/run/#{r.id}\">Run #{r.id}</a><br/>"
139
- end
140
- elsif context==:scenarios
141
- result=Rutema::Model::Scenario.find(:all).collect{|r| r.name}
142
- result.uniq.sort.each do |r|
143
- ret<<"<a class=\"smallgreytext\" href=\"/scenario/#{r}\">#{r}</a><br/>"
144
- end
145
- end
146
- return ret
147
- end
148
- end
149
- end
150
- end
@@ -1,29 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),"..")
2
- require 'rutema/gems'
3
-
4
- # Create a new table for each record and a row for each record element
5
- class VerticalTableFormatter < Ruport::Formatter::HTML
6
-
7
- renders :vhtml, :for => Ruport::Controller::Table
8
-
9
- def build_table_body
10
- data.each do |row|
11
- build_row(row)
12
- end
13
- end
14
-
15
- def build_table_header
16
- end
17
-
18
- def build_table_footer
19
- end
20
-
21
- def build_row(data = self.data)
22
- output << "<table class=\"vtable\"><colgroup><col width=\"100\"><col></colgroup>\n"
23
- output << "<tr><td colspan=\"2\"><em>#{data['name']}</em></td></tr>"
24
- %w(status duration).each { |k| output << "<tr><td>#{k}:</td><td>#{data.get(k)}</td></tr>\n" }
25
- %w(output error).each { |k| output << "<tr><td colspan=\"2\">#{k}:</td></tr><tr><td colspan=\"2\"><pre>#{data.get(k)}</pre></td></tr>\n" if data.get(k).size > 0 }
26
- output << "</table>\n"
27
- end
28
-
29
- end
@@ -1,47 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta name="author" content="Vassilis Rizopoulos" />
5
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
6
- <link rel="stylesheet" href="/style.css" type="text/css" />
7
- <title>Rutema Historian</title>
8
- </head>
9
- <body>
10
- <div id="page" align="center">
11
- <div id="content" style="width:800px">
12
- <div id="logo">
13
- <div style="margin-top:70px" class="whitetitle">rutema</div>
14
- </div>
15
- <div id="topheader">
16
- <div align="left" class="bodytext">
17
- </div>
18
- <div id="toplinks" class="smallgraytext">
19
- </div>
20
- </div>
21
- <div id="menu">
22
- <div align="right" class="smallwhitetext" style="padding:9px;">
23
- <a href="/">Home</a> | <a href="/run">Runs</a> | <a href="/scenario">Scenarios</a>
24
- </div>
25
- </div>
26
- <div id="submenu">
27
- <div align="right" class="smallgraytext" style="padding:9px;"></div>
28
- </div>
29
- <div id="contenttext">
30
- <div style="padding:10px">
31
- <span class="titletext">Summary</span>
32
- </div>
33
- <div class="bodytext" style="padding:12px;" align="justify"><%=@content%></div>
34
- </div>
35
- <div id="leftpanel">
36
- <div align="justify" class="graypanel">
37
- <%=@panel_content%>
38
- </div>
39
- </div>
40
- <div id="footer" class="smallgraytext">
41
- <a href="/">Home</a> | <a href="http://patir.rubyforge.org/rutema">about rutema</a> |
42
- &copy; 2008 <a href="http://www.braveworld.net/riva" target="_blank">Vassilis Rizopoulos</a>
43
- </div>
44
- </div>
45
- </div>
46
- </body>
47
- </html>