chemistrykit 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ LineLength:
2
+ Enabled: false
3
+
4
+ MethodLength:
5
+ Max: 30
@@ -1 +1 @@
1
- ruby-1.9.3-p429
1
+ ruby-1.9.3
@@ -1,9 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- branches:
5
- only:
6
- - master
7
- - develop
8
4
  notifications:
9
5
  hipchat: 2a07784c1aeed1b6efa332242d3fc3@Regulation Station
@@ -1,3 +1,32 @@
1
+ #3.0.0 (2013-07-04)
2
+ Now with concurrent tests
3
+
4
+ - Bumped version to 3.0.0 to prepare for release.
5
+ - included message into changelog update and added a test for specific concurrency feature
6
+ - integrated config driven concurrency, cleaned up some tests
7
+ - abstracted out config loading into brew
8
+ - learning how to spell concurrency correctly
9
+ - fixed a minor typo in a feature and added a todo comment
10
+ - updated feature files to have correct directory, added a test for concurency
11
+ - upgraded the global config into the shared context
12
+ - updated all tests to match new configuration format
13
+ - added back updated configuration object
14
+ - removed local references to selenium server and updated tests accordingly
15
+ - updated to latest build of selenium connect, fixed a small bug in a feature file, and updated the rakefile to handle find tags correctly
16
+ - Code quality fixes
17
+ - Wired up --processes to adjust number of processes when running --parallel, defaulting the number to 5
18
+ - Updated comment
19
+ - Updated sauce brew scenario to use our sauce account
20
+ - Test group execution working
21
+ - Renamed parallel to parallel_tests_mods for better explicitness. Got ckit brew running with parallel_tests (WOOT!). Now just need to figure out how to execute tests within a group for each thread rather than all tests in each thread.
22
+ - removed branch restriction on travis so all feature branches would be tested
23
+ - Fixed all code quality issues, added custom options file to tweek method length and line length cops, updated build system
24
+ - added rubocop to the build process
25
+ - Added a monkey patch for parallel_tests' RSpec runner to override its defaults with ours and wired it up in the parallel execution hook. It runs but gives an argument error from ckit. Also, took a first crack at setting the base_url via config.yaml and the shared_context
26
+ - Added parallel_tests and parallel to repo. Wired up a command argument for ckit brew (--parallel) to execute the wip progess concurrency method.
27
+ - Downgraded the required ruby version to just 1.9.3
28
+ - one small edit because of a bug with git flow #62
29
+
1
30
  #2.1.0 (2013-06-28)
2
31
  - Updated documentation for #62 release process.
3
32
  - Bumped version to 2.1.0 to prepare for release.
data/Rakefile CHANGED
@@ -1,15 +1,17 @@
1
- require "bundler/gem_tasks"
2
- require "cucumber"
3
- require "cucumber/rake/task"
1
+ # Encoding: utf-8
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
4
6
  require 'rspec/core/rake_task'
5
7
 
6
- task :default => [:build_ci]
8
+ task default: :build_ci
7
9
 
8
10
  desc 'Runs standard build activities.'
9
- task :build => [:clean, :prepare, :spec, :cucumber]
11
+ task build: [:clean, :prepare, :rubocop, :spec, :cucumber]
10
12
 
11
13
  desc 'Runs standard build activities for ci server.'
12
- task :build_ci => [:clean, :prepare, :spec]
14
+ task build_ci: [:clean, :prepare, :rubocop, :spec]
13
15
 
14
16
  desc 'Removes the build directory.'
15
17
  task :clean do
@@ -24,44 +26,49 @@ RSpec::Core::RakeTask.new(:spec)
24
26
 
25
27
  Cucumber::Rake::Task.new(:cucumber)
26
28
 
29
+ desc 'Runs code quality check'
30
+ task :rubocop do
31
+ sh 'rubocop'
32
+ end
27
33
 
28
- #TODO This could probablly be more cleanly automated
34
+ # TODO This could probably be more cleanly automated
29
35
  desc 'Start a release (Requires Git Flow)'
30
36
  task :release_start, :version do |t, args|
31
37
  version = args['version']
32
38
 
33
- #make sure we have the latest stuff
34
- system "git fetch --all"
39
+ # make sure we have the latest stuff
40
+ system 'git fetch --all'
35
41
 
36
- #first make sure master is checked out and up to date
37
- system "git checkout master"
38
- system "git pull --no-edit origin master"
42
+ # first make sure master is checked out and up to date
43
+ system 'git checkout master'
44
+ system 'git pull --no-edit origin master'
39
45
 
40
- #then make sure develop is up to date
41
- system "git checkout develop"
42
- system "git pull --no-edit origin develop"
46
+ # then make sure develop is up to date
47
+ system 'git checkout develop'
48
+ system 'git pull --no-edit origin develop'
43
49
 
44
- #next assure all the tests run
50
+ # next assure all the tests run
45
51
  task(:build).invoke
46
52
 
47
- #start the release process
53
+ # start the release process
48
54
  system "git flow release start #{version}"
49
55
 
50
- #update the version number in the .gemspec file
56
+ # update the version number in the .gemspec file
51
57
  gemspec = File.join(Dir.getwd, 'chemistrykit.gemspec')
52
- updated = File.read(gemspec).gsub(/s.version(\s+)=(\s?["|']).+(["|'])/){
53
- "s.version#{$1}=#{$2}#{version}#{$3}"
54
- }
55
- File.open(gemspec, 'w'){ |f| f.write(updated) }
56
-
57
- #commit the version bump
58
- system "git add chemistrykit.gemspec"
58
+ updated = File.read(gemspec).gsub(
59
+ /s.version(\s+)=(\s?["|']).+(["|'])/,
60
+ "s.version\\1=\\2#{version}\\3"
61
+ )
62
+ File.open(gemspec, 'w') { |f| f.write(updated) }
63
+
64
+ # commit the version bump
65
+ system 'git add chemistrykit.gemspec'
59
66
  system "git commit -m 'Bumped version to #{version} to prepare for release.'"
60
67
 
61
68
  puts "You've started release #{version}, make any last minute updates now.\n"
62
69
  end
63
70
 
64
- #TODO This could probablly be more cleanly automated
71
+ # TODO This could probablly be more cleanly automated
65
72
  desc 'Finish a release (Requires Git Flow and Gem Deploy Permissions'
66
73
  task :release_finish, :update_message do |t, args|
67
74
  message = args['update_message']
@@ -69,51 +76,57 @@ task :release_finish, :update_message do |t, args|
69
76
  changelog = File.join(Dir.getwd, 'CHANGELOG.md')
70
77
  version = File.read(gemspec).match(/s.version\s+=\s?["|'](.+)["|']/)[1]
71
78
 
72
- ###Changelog
73
- #get the latest tag
79
+ ### Changelog
80
+ # get the latest tag
81
+ system 'git checkout master'
74
82
  last_tag = `git describe --abbrev=0`
75
- #get the commit hash since the last that version was merged to develop
83
+ system "git checkout release/#{version}"
84
+
85
+ # get the commit hash since the last that version was merged to develop
76
86
  hash = `git log --grep="Merge branch 'release/#{last_tag.chomp}' into develop" --format="%H"`
77
- #get all the commits since them less merges
87
+ # get all the commits since them less merges
78
88
  log = `git log --format="- %s" --no-merges #{hash.chomp}..HEAD`
79
89
 
80
90
  changelog_contents = File.read(changelog)
81
- date = Time.new.strftime("%Y-%m-%d")
82
- #create the new heading
83
- updated_changelog = "##{version} (#{date})\n" + log + "\n" + changelog_contents
84
- #update the contents
85
- File.open(changelog, 'w'){ |f| f.write(updated_changelog) }
91
+ date = Time.new.strftime('%Y-%m-%d')
92
+ # create the new heading
93
+ updated_changelog = "##{version} (#{date})\n" + message + "\n\n" + log + "\n" + changelog_contents
94
+ # update the contents
95
+ File.open(changelog, 'w') { |f| f.write(updated_changelog) }
86
96
  puts "Updated change log for version #{version}\n"
87
97
 
88
- ###Update the gemspec with the message
89
- updated_gemspec = File.read(gemspec).gsub(/s.description(\s+)=(\s?["|']).+(["|'])/){
90
- "s.description#{$1}=#{$2}#{message}#{$3}"
91
- }
92
- File.open(gemspec, 'w'){ |f| f.write(updated_gemspec) }
98
+ ### Update the gemspec with the message
99
+ updated_gemspec = File.read(gemspec).gsub(
100
+ /s.description(\s+)=(\s?["|']).+(["|'])/,
101
+ "s.description\\1=\\2#{message}\\3"
102
+ )
103
+ File.open(gemspec, 'w') { |f| f.write(updated_gemspec) }
93
104
 
94
- #Commit the updated change log and gemspec
105
+ # Commit the updated change log and gemspec
95
106
  system "git commit -am 'Updated CHANGELOG.md and gemspec for #{version} release.'"
96
107
 
97
- #build the gem
98
- system "gem build chemistrykit.gemspec"
108
+ # build the gem
109
+ system 'gem build chemistrykit.gemspec'
99
110
 
100
- #push the gem
111
+ # push the gem
101
112
  system "gem push chemistrykit-#{version}.gem"
102
113
 
103
- #remove the gem file
114
+ # remove the gem file
104
115
  system "rm chemistrykit-#{version}.gem"
105
116
 
106
- #finish the release
107
- system "git flow release finish -m '#{message}' #{version}"
117
+ # finish the release
118
+ # TODO there is a bug with git flow, and you still need to deal with merge
119
+ # messages, might just do this with git directly
120
+ system "git flow release finish -m'#{version}' #{version}"
108
121
 
109
- #push develop
110
- system "git push origin develop"
122
+ # push develop
123
+ system 'git push origin develop'
111
124
 
112
- #push master
113
- system "git push origin master"
125
+ # push master
126
+ system 'git push origin master'
114
127
 
115
- #push tags
116
- system "git push --tags"
128
+ # push tags
129
+ system 'git push --tags'
117
130
 
118
131
  puts "Rock and roll, you just released ChemistryKit #{version}!\n"
119
132
  end
data/bin/ckit CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+
2
4
  require 'chemistrykit'
3
5
 
4
6
  # Had difficulties getting Thor to return a proper exit status on failure
5
7
  # Will need to revisit
6
8
  ckit_result = ChemistryKit::CLI::CKitCLI.start
7
- ckit_result.kind_of?(Integer)? exit(ckit_result): exit(0)
9
+ ckit_result.kind_of?(Integer) ? exit(ckit_result) : exit(0)
@@ -1,12 +1,14 @@
1
+ # Encoding: utf-8
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = "chemistrykit"
3
- s.version = "2.1.0"
5
+ s.version = "3.0.0"
4
6
  s.platform = Gem::Platform::RUBY
5
7
  s.authors = ["Dave Haeffner", "Jason Fox"]
6
8
  s.email = ["dave@arrgyle.com", "jason@arrgyle.com"]
7
9
  s.homepage = "https://github.com/arrgyle/chemistrykit"
8
10
  s.summary = "A simple and opinionated web testing framework for Selenium that follows convention over configuration."
9
- s.description = "Automated build process"
11
+ s.description = "Now with concurrent tests"
10
12
  s.license = 'MIT'
11
13
 
12
14
  s.files = `git ls-files`.split($/)
@@ -22,10 +24,13 @@ Gem::Specification.new do |s|
22
24
  s.add_dependency "selenium-webdriver", "~> 2.29.0"
23
25
  s.add_dependency "ci_reporter", "~> 1.8.3"
24
26
  s.add_dependency "rest-client", "~> 1.6.7"
25
- s.add_dependency "selenium-connect", "~> 2.0.0"
27
+ s.add_dependency "selenium-connect", "~> 2.1.1"
28
+ s.add_dependency "parallel_tests", "~> 0.15.0"
29
+ s.add_dependency "parallel", "~> 0.7.0"
26
30
 
27
31
  s.add_development_dependency "rspec", "~> 2.12.0"
28
32
  s.add_development_dependency "aruba", "~> 0.5.1"
29
33
  s.add_development_dependency "cucumber", "~> 1.2.1"
30
34
  s.add_development_dependency "rake", "~> 10.0.3"
35
+ s.add_development_dependency "rubocop", "~> 0.9.0"
31
36
  end
@@ -19,7 +19,7 @@ Feature: Brewing a ChemistryKit project
19
19
  end
20
20
  end
21
21
  """
22
- And a file named "beaker/bookie_beaker.rb" with:
22
+ And a file named "beakers/bookie_beaker.rb" with:
23
23
  """
24
24
  describe "Bookie", :depth => 'shallow' do
25
25
  let(:book) { Formulas::Bookie.new(@driver) }
@@ -33,9 +33,9 @@ Feature: Brewing a ChemistryKit project
33
33
  Scenario: Localhost
34
34
  Given a file named "config.yaml" with:
35
35
  """
36
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
37
- log: 'evidence'
38
- host: 'localhost'
36
+ selenium_connect:
37
+ log: 'evidence'
38
+ host: 'localhost'
39
39
  """
40
40
  When I run `ckit brew`
41
41
  Then the stdout should contain "1 example, 0 failures"
@@ -47,14 +47,15 @@ Feature: Brewing a ChemistryKit project
47
47
  Scenario: Saucelabs
48
48
  Given a file named "config.yaml" with:
49
49
  """
50
- log: 'evidence'
51
- host: 'saucelabs'
52
- brower: 'iexplore'
53
- os: 'windows 2003'
54
- sauce_username: 'dave_arrgyle'
55
- sauce_api_key: '58092e14-4e9c-4911-bfc4-a09ecc02db63'
56
- browser_version: '8'
57
- description: 'ckit feature check'
50
+ selenium_connect:
51
+ log: 'evidence'
52
+ host: 'saucelabs'
53
+ browser: 'iexplore'
54
+ os: 'windows 2003'
55
+ sauce_username: 'testing_arrgyle'
56
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
57
+ browser_version: '8'
58
+ description: 'ckit feature check'
58
59
  """
59
60
  When I run `ckit brew`
60
61
  Then the stdout should contain "1 example, 0 failures"
@@ -62,11 +63,11 @@ Feature: Brewing a ChemistryKit project
62
63
  Scenario: Brew a single beaker
63
64
  Given a file named "config.yaml" with:
64
65
  """
65
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
66
- log: 'evidence'
67
- host: 'localhost'
66
+ selenium_connect:
67
+ log: 'evidence'
68
+ host: 'localhost'
68
69
  """
69
- And a file named "beaker/other_beaker.rb" with:
70
+ And a file named "beakers/other_beaker.rb" with:
70
71
  """
71
72
  describe "Other", :depth => 'shallow' do
72
73
  let(:book) { Formulas::Bookie.new(@driver) }
@@ -76,6 +77,6 @@ Feature: Brewing a ChemistryKit project
76
77
  end
77
78
  end
78
79
  """
79
- When I run `ckit brew --beaker=beaker/other_beaker.rb`
80
+ When I run `ckit brew --beakers=beakers/other_beaker.rb`
80
81
  Then the stdout should contain "1 example, 0 failures"
81
82
 
@@ -64,7 +64,7 @@ Catalyst: n. A pocket of data (consumed from a CSV file) used to drive a test th
64
64
  end
65
65
  """
66
66
 
67
- And a file named "beaker/google_beaker.rb" with:
67
+ And a file named "beakers/google_beaker.rb" with:
68
68
  """
69
69
  describe "Google", :depth => 'shallow' do
70
70
  let(:google) { Formulas::Google.new(@driver) }
@@ -80,9 +80,9 @@ Catalyst: n. A pocket of data (consumed from a CSV file) used to drive a test th
80
80
 
81
81
  And a file named "config.yaml" with:
82
82
  """
83
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
84
- log: 'evidence'
85
- host: 'localhost'
83
+ selenium_connect:
84
+ log: 'evidence'
85
+ host: 'localhost'
86
86
  """
87
87
  When I run `ckit brew`
88
88
  Then the stdout should contain "1 example, 0 failures"
@@ -0,0 +1,61 @@
1
+ Feature: Support for concurency
2
+ In order to run the tests quickly
3
+ As a chemistry kit harness developer
4
+ I want to run them in parallel
5
+
6
+ Background:
7
+ Given I run `ckit new concurrency-test`
8
+ And I cd to "concurrency-test"
9
+ And a file named "beakers/first_beaker.rb" with:
10
+ """
11
+ describe "Cheese", :depth => 'shallow' do
12
+ it "loads an external web page" do
13
+ @driver.get "http://www.google.com"
14
+ @driver.title.should include("Google")
15
+ end
16
+ it "loads an external web page" do
17
+ @driver.get "http://www.google.com"
18
+ @driver.title.should include("Google")
19
+ end
20
+ end
21
+ """
22
+ And a file named "beakers/second_beaker.rb" with:
23
+ """
24
+ describe "Cheese 2", :depth => 'shallow' do
25
+ it "loads an external web page" do
26
+ @driver.get "http://www.google.com"
27
+ @driver.title.should include("Google")
28
+ end
29
+ end
30
+ """
31
+ Scenario: I can run the tests in parallel
32
+ When I overwrite config.yaml with:
33
+ """
34
+ concurrency: 4
35
+ selenium_connect:
36
+ log: 'evidence'
37
+ host: 'saucelabs'
38
+ browser: 'firefox'
39
+ sauce_username: 'testing_arrgyle'
40
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
41
+ description: 'concurrency check'
42
+ """
43
+ When I run `ckit brew`
44
+ Then the stdout should contain "4 processes for 2 beakers"
45
+ And the stdout should contain "3 examples, 0 failures"
46
+
47
+ Scenario: I can run a specific beaker in parallel
48
+ When I overwrite config.yaml with:
49
+ """
50
+ concurrency: 4
51
+ selenium_connect:
52
+ log: 'evidence'
53
+ host: 'saucelabs'
54
+ browser: 'firefox'
55
+ sauce_username: 'testing_arrgyle'
56
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
57
+ description: 'concurrency check'
58
+ """
59
+ When I run `ckit brew --beakers=beakers/first_beaker.rb`
60
+ Then the stdout should contain "4 processes for 1 beakers"
61
+ And the stdout should contain "2 examples, 0 failures"
@@ -5,13 +5,13 @@ Feature: Exit Status
5
5
  And I cd to "cheese"
6
6
  And a file named "config.yaml" with:
7
7
  """
8
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
9
- log: 'evidence'
10
- host: 'localhost'
8
+ selenium_connect:
9
+ log: 'evidence'
10
+ host: 'localhost'
11
11
  """
12
12
 
13
13
  Scenario: Passing
14
- And a file named "beaker/test_beaker.rb" with:
14
+ And a file named "beakers/test_beaker.rb" with:
15
15
  """
16
16
  describe "Cheese", :depth => 'shallow' do
17
17
  it "loads an external web page" do
@@ -24,7 +24,7 @@ Feature: Exit Status
24
24
  Then the exit code should be 0
25
25
 
26
26
  Scenario: Failing
27
- And a file named "beaker/test_beaker.rb" with:
27
+ And a file named "beakers/test_beaker.rb" with:
28
28
  """
29
29
  describe "Cheese", :depth => 'shallow' do
30
30
  it "loads an external web page" do