cucumber-blendle-steps 0.6.1 → 0.7.0
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/CHANGELOG.md +3 -0
- data/lib/cucumber/blendle/helpers/liquid_filters.rb +2 -0
- data/lib/cucumber/blendle/steps/benchmark_steps.rb +115 -0
- data/lib/cucumber/blendle/steps/model_steps.rb +1 -1
- data/lib/cucumber/blendle/support/cucumber.rb +11 -0
- data/lib/cucumber/blendle/version.rb +1 -1
- data/lib/cucumber/blendle_steps.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3df02056f134d8d76ecf362e33821362dda8b1e0
|
4
|
+
data.tar.gz: f957d8489763584193f38ce7171485e80db604ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c789dffa7c5417b0f7ed9969a5dfc6b66b79d37166e5bc348c90e5158a6762df35b27c40dab33fd787a1df9d717dced6b946b7bc2029f577a81fa5db7ecdc578
|
7
|
+
data.tar.gz: 01625d667f9d76161eb7fb8097750f1c42174fb651a0342eaae2cf8d0dec8cba1222df3eaee12da31367c7305781e96387e977840c63b7d0dc97233c0f6c346e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## [v0.6.1](https://github.com/blendle/cucumber-blendle-steps/tree/v0.6.1) (2016-03-18)
|
4
|
+
[Full Changelog](https://github.com/blendle/cucumber-blendle-steps/compare/v0.6.0...v0.6.1)
|
5
|
+
|
3
6
|
## [v0.6.0](https://github.com/blendle/cucumber-blendle-steps/tree/v0.6.0) (2016-03-16)
|
4
7
|
[Full Changelog](https://github.com/blendle/cucumber-blendle-steps/compare/v0.5.1...v0.6.0)
|
5
8
|
|
@@ -22,3 +22,118 @@ end
|
|
22
22
|
Then(/^all requests should have succeeded$/) do
|
23
23
|
last_requests.map(&:code).any? { |status| status.to_s[0] != 2 }
|
24
24
|
end
|
25
|
+
|
26
|
+
When(/^I start measuring performance$/) do
|
27
|
+
unless @scenario_tags.include?('@performance')
|
28
|
+
assert false, 'measuring performance requires the "@performance" tag to be present.'
|
29
|
+
end
|
30
|
+
|
31
|
+
step %(I start measuring time)
|
32
|
+
step %(I start measuring SQL queries)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Puts the current time in the `@performance_start_time` instance variable. This
|
36
|
+
# value is then used in the "request time hasn't exceeded x milliseconds" step
|
37
|
+
# to calculate elapsed time.
|
38
|
+
#
|
39
|
+
When(/^I start measuring time$/) do
|
40
|
+
unless @scenario_tags.include?('@performance')
|
41
|
+
assert false, 'measuring time requires the "@performance" tag to be present.'
|
42
|
+
end
|
43
|
+
|
44
|
+
@performance_start_time = Timecop.return { Time.now }
|
45
|
+
end
|
46
|
+
|
47
|
+
# * Then request time hasn't exceeded 100 milliseconds
|
48
|
+
#
|
49
|
+
# Note: it is not needed to call the "I stop measuring time" step first. If the
|
50
|
+
# time recording is still running, it will be stopped during the call of this
|
51
|
+
# step.
|
52
|
+
#
|
53
|
+
Then(/^request time hasn't exceeded (\d+) milliseconds$/) do |milliseconds|
|
54
|
+
step('I stop measuring time') unless @performance_stop_time
|
55
|
+
|
56
|
+
elapsed_time = ((@performance_stop_time - @performance_start_time) * 1000.0).to_i
|
57
|
+
|
58
|
+
puts "elapsed time: #{elapsed_time}"
|
59
|
+
expect(elapsed_time).to be < milliseconds.to_i
|
60
|
+
end
|
61
|
+
|
62
|
+
# Puts the current time in the `@performance_stop_time` instance variable. This
|
63
|
+
# value is then used in the "request time hasn't exceeded x milliseconds" step
|
64
|
+
# to calculate elapsed time.
|
65
|
+
#
|
66
|
+
Then(/^I stop measuring time$/) do
|
67
|
+
@performance_stop_time = Timecop.return { Time.now }
|
68
|
+
end
|
69
|
+
|
70
|
+
# Starts the DB profiler to measure number of SQL queries made. It also enables
|
71
|
+
# debug printing of the executed queries.
|
72
|
+
#
|
73
|
+
When(/^I start measuring SQL queries/) do
|
74
|
+
unless @scenario_tags.include?('@performance')
|
75
|
+
assert false, 'counting SQL queries requires the "@performance" tag to be present.'
|
76
|
+
end
|
77
|
+
|
78
|
+
DBProfiler.start
|
79
|
+
end
|
80
|
+
|
81
|
+
# * Then exactly 5 database queries have been executed
|
82
|
+
#
|
83
|
+
Then(/^exactly (\d+) database queries have been executed/) do |query_count|
|
84
|
+
puts "queries counted: #{DBProfiler.query_count}"
|
85
|
+
|
86
|
+
expect(DBProfiler.query_count).to eql(query_count.to_i)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Stops the DBProfiler, resetting the query counter, and disabling debug output
|
90
|
+
# of executed queries.
|
91
|
+
#
|
92
|
+
Then(/^I stop measuring SQL queries$/) do
|
93
|
+
DBProfiler.stop
|
94
|
+
end
|
95
|
+
|
96
|
+
Then(/^I stop measuring performance$/) do
|
97
|
+
step %(I stop measuring time)
|
98
|
+
step %(I stop measuring SQL queries)
|
99
|
+
end
|
100
|
+
|
101
|
+
# After each scenario with the `@performance` tag, the DBProfiler is stopped,
|
102
|
+
# and all measured request times are reset.
|
103
|
+
#
|
104
|
+
After('@performance') do
|
105
|
+
DBProfiler.stop
|
106
|
+
|
107
|
+
instance_variable_set(:@performance_stop_time, nil)
|
108
|
+
instance_variable_set(:@performance_start_time, nil)
|
109
|
+
end
|
110
|
+
|
111
|
+
# :no-doc:
|
112
|
+
class DBProfiler
|
113
|
+
def self.start
|
114
|
+
@count_stringio = StringIO.new
|
115
|
+
print_logger = Logger.new($stdout)
|
116
|
+
print_logger.formatter = proc { |_, _, _, msg| "#{msg}\n" }
|
117
|
+
DB.loggers.concat([print_logger, Logger.new(@count_stringio)])
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.stop
|
121
|
+
DB.loggers.clear
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.queries
|
125
|
+
@count_stringio.string.split("\n").map { |n| n.scan(/-- : (.*?)$/).flatten.first }
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.single_quoted_queries
|
129
|
+
queries.join("\n").tr('"', "'").split("\n")
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.queries_only
|
133
|
+
single_quoted_queries.select { |n| n =~ /\(\d/ }
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.query_count
|
137
|
+
queries_only.count
|
138
|
+
end
|
139
|
+
end
|
@@ -104,7 +104,7 @@ def parse_row(row, object_name)
|
|
104
104
|
when :datetime
|
105
105
|
Timecop.return { Chronic.parse(value) || DateTime.parse(value) }
|
106
106
|
when :boolean
|
107
|
-
value.to_s.
|
107
|
+
value.to_s.casecmp('true').zero?
|
108
108
|
when :string_array, :varchar_array, :bigint_array
|
109
109
|
Sequel.pg_array(eval(value))
|
110
110
|
else
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Before do |scenario|
|
2
|
+
@scenario_name = scenario.name
|
3
|
+
@scenario_hash = Digest::SHA1.hexdigest(@scenario_name)[5]
|
4
|
+
@scenario_tags = scenario.source_tag_names
|
5
|
+
end
|
6
|
+
|
7
|
+
After do
|
8
|
+
instance_variable_set(:@scenario_name, nil)
|
9
|
+
instance_variable_set(:@scenario_hash, nil)
|
10
|
+
instance_variable_set(:@scenario_tags, nil)
|
11
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-blendle-steps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Mertz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -326,6 +326,7 @@ files:
|
|
326
326
|
- lib/cucumber/blendle/steps/model_steps.rb
|
327
327
|
- lib/cucumber/blendle/steps/resource_steps.rb
|
328
328
|
- lib/cucumber/blendle/steps/rest_steps.rb
|
329
|
+
- lib/cucumber/blendle/support/cucumber.rb
|
329
330
|
- lib/cucumber/blendle/support/dump.rb
|
330
331
|
- lib/cucumber/blendle/support/hyper_resource.rb
|
331
332
|
- lib/cucumber/blendle/support/json_spec.rb
|