knapsack_pro 2.15.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +4 -38
- data/lib/knapsack_pro/adapters/rspec_adapter.rb +6 -0
- data/lib/knapsack_pro/tracker.rb +8 -3
- data/lib/knapsack_pro/version.rb +1 -1
- data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +18 -6
- data/spec/knapsack_pro/tracker_spec.rb +7 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 534699a91609a71a2621b9625a3ff555a58bf385728be90adce4cfe6d6b771dd
|
4
|
+
data.tar.gz: 913fc4a85433a50f3639bdc087995f9dc5e482b33d7768cfdb84c0f767326c2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da5e5ef1c262d97b6214eddff32c8aa2031fe122ad1597a1cf4bd2a939fe82f9fd6b0c7287861f5373521f731318a0e856a331220ae0076eef9cdf8323ab0548
|
7
|
+
data.tar.gz: 2e058c2c3b82c9c97481ab84873c652fb3ab4844521c4746efeaca2dccca8b265b58ba427d44af56b130769bf56c6cbacd84b516b1e6b44d099a8a33b2ef340b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 2.16.0
|
4
|
+
|
5
|
+
* Improve test time execution tracking for RSpec
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/145
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v2.15.0...v2.16.0
|
10
|
+
|
3
11
|
### 2.15.0
|
4
12
|
|
5
13
|
* Do not allow to use the RSpec tag option together with the RSpec split by test examples feature
|
data/README.md
CHANGED
@@ -793,43 +793,7 @@ $ KNAPSACK_PRO_SALT=xxx bundle exec rake knapsack_pro:encrypted_branch_names[not
|
|
793
793
|
|
794
794
|
If you are using circleci.com you can omit `KNAPSACK_PRO_CI_NODE_TOTAL` and `KNAPSACK_PRO_CI_NODE_INDEX`. Knapsack Pro will use `CIRCLE_NODE_TOTAL` and `CIRCLE_NODE_INDEX` provided by CircleCI.
|
795
795
|
|
796
|
-
Here is an example for test configuration in your
|
797
|
-
|
798
|
-
```yaml
|
799
|
-
# CircleCI 1.0
|
800
|
-
|
801
|
-
machine:
|
802
|
-
environment:
|
803
|
-
# Tokens should be set in CircleCI settings to avoid expose tokens in build logs
|
804
|
-
# KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: rspec-token
|
805
|
-
# KNAPSACK_PRO_TEST_SUITE_TOKEN_CUCUMBER: cucumber-token
|
806
|
-
# KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST: minitest-token
|
807
|
-
# KNAPSACK_PRO_TEST_SUITE_TOKEN_TEST_UNIT: test-unit-token
|
808
|
-
# KNAPSACK_PRO_TEST_SUITE_TOKEN_SPINACH: spinach-token
|
809
|
-
test:
|
810
|
-
override:
|
811
|
-
# Step for RSpec
|
812
|
-
- bundle exec rake knapsack_pro:rspec:
|
813
|
-
parallel: true # Caution: there are 8 spaces indentation!
|
814
|
-
|
815
|
-
# Step for Cucumber
|
816
|
-
- bundle exec rake knapsack_pro:cucumber:
|
817
|
-
parallel: true # Caution: there are 8 spaces indentation!
|
818
|
-
|
819
|
-
# Step for Minitest
|
820
|
-
- bundle exec rake knapsack_pro:minitest:
|
821
|
-
parallel: true # Caution: there are 8 spaces indentation!
|
822
|
-
|
823
|
-
# Step for test-unit
|
824
|
-
- bundle exec rake knapsack_pro:test_unit:
|
825
|
-
parallel: true # Caution: there are 8 spaces indentation!
|
826
|
-
|
827
|
-
# Step for Spinach
|
828
|
-
- bundle exec rake knapsack_pro:spinach:
|
829
|
-
parallel: true # Caution: there are 8 spaces indentation!
|
830
|
-
```
|
831
|
-
|
832
|
-
Here is another example for CircleCI 2.0 platform.
|
796
|
+
Here is an example for test configuration in your `.circleci/config.yml` file.
|
833
797
|
|
834
798
|
```yaml
|
835
799
|
# CircleCI 2.0
|
@@ -866,7 +830,7 @@ Please remember to add additional containers for your project in CircleCI settin
|
|
866
830
|
|
867
831
|
##### CircleCI and knapsack_pro Queue Mode
|
868
832
|
|
869
|
-
If you use knapsack_pro Queue Mode with CircleCI you may want to [collect metadata](https://circleci.com/docs/
|
833
|
+
If you use knapsack_pro Queue Mode with CircleCI you may want to [collect metadata](https://circleci.com/docs/2.0/collect-test-data/#metadata-collection-in-custom-test-steps) like junit xml report about your RSpec test suite.
|
870
834
|
|
871
835
|
Here you can read how to configure [junit formatter](https://knapsackpro.com/faq/question/how-to-use-junit-formatter#how-to-use-junit-formatter-with-knapsack_pro-queue-mode). Step for CircleCI is to copy the xml report to `$CIRCLE_TEST_REPORTS` directory. Below is full config for your `spec_helper.rb`:
|
872
836
|
|
@@ -913,6 +877,8 @@ Ensure you have in CircleCI config yml
|
|
913
877
|
destination: test-results
|
914
878
|
```
|
915
879
|
|
880
|
+
You can find a complete CircleCI YML config example in [the article](https://docs.knapsackpro.com/2021/rspec-testing-parallel-jobs-with-circleci-and-junit-xml-report).
|
881
|
+
|
916
882
|
#### Info for Travis users
|
917
883
|
|
918
884
|
You can parallelize your builds across virtual machines with [travis matrix feature](http://docs.travis-ci.com/user/speeding-up-the-build/#parallelizing-your-builds-across-virtual-machines). Edit `.travis.yml`
|
@@ -26,6 +26,10 @@ module KnapsackPro
|
|
26
26
|
end
|
27
27
|
|
28
28
|
config.around(:each) do |example|
|
29
|
+
# stop timer to update time for a previously run test example
|
30
|
+
# this way we count time spend in runtime for the previous test example after around(:each) is already done
|
31
|
+
KnapsackPro.tracker.stop_timer
|
32
|
+
|
29
33
|
current_example_group =
|
30
34
|
if ::RSpec.respond_to?(:current_example)
|
31
35
|
::RSpec.current_example.metadata[:example_group]
|
@@ -46,6 +50,8 @@ module KnapsackPro
|
|
46
50
|
end
|
47
51
|
|
48
52
|
config.append_after(:context) do
|
53
|
+
# after(:context) hook is run one time only, after all of the examples in a group
|
54
|
+
# stop timer to count time for the very last executed test example
|
49
55
|
KnapsackPro.tracker.stop_timer
|
50
56
|
end
|
51
57
|
|
data/lib/knapsack_pro/tracker.rb
CHANGED
@@ -19,23 +19,28 @@ module KnapsackPro
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def start_timer
|
22
|
+
@start_time ||= now_without_mock_time.to_f
|
23
|
+
end
|
24
|
+
|
25
|
+
def reset_timer
|
22
26
|
@start_time = now_without_mock_time.to_f
|
23
27
|
end
|
24
28
|
|
25
29
|
def stop_timer
|
26
30
|
execution_time = @start_time ? now_without_mock_time.to_f - @start_time : 0.0
|
27
31
|
|
28
|
-
if current_test_path
|
32
|
+
if @current_test_path
|
29
33
|
update_global_time(execution_time)
|
30
34
|
update_test_file_time(execution_time)
|
31
|
-
|
35
|
+
reset_timer
|
32
36
|
end
|
33
37
|
|
34
38
|
execution_time
|
35
39
|
end
|
36
40
|
|
37
41
|
def current_test_path
|
38
|
-
|
42
|
+
raise("current_test_path needs to be set by Knapsack Pro Adapter's bind method") unless @current_test_path
|
43
|
+
KnapsackPro::TestFileCleaner.clean(@current_test_path)
|
39
44
|
end
|
40
45
|
|
41
46
|
def set_prerun_tests(test_file_paths)
|
data/lib/knapsack_pro/version.rb
CHANGED
@@ -87,16 +87,20 @@ describe KnapsackPro::Adapters::RSpecAdapter do
|
|
87
87
|
|
88
88
|
it 'records time for current test path' do
|
89
89
|
expect(config).to receive(:prepend_before).with(:context).and_yield
|
90
|
+
|
91
|
+
allow(KnapsackPro).to receive(:tracker).and_return(tracker)
|
92
|
+
expect(tracker).to receive(:start_timer).ordered
|
93
|
+
|
90
94
|
expect(config).to receive(:around).with(:each).and_yield(example)
|
91
95
|
expect(config).to receive(:append_after).with(:context).and_yield
|
92
96
|
expect(config).to receive(:after).with(:suite).and_yield
|
93
97
|
expect(::RSpec).to receive(:configure).and_yield(config)
|
94
98
|
|
99
|
+
expect(tracker).to receive(:stop_timer).ordered
|
100
|
+
|
95
101
|
expect(::RSpec).to receive(:current_example).twice.and_return(current_example)
|
96
102
|
expect(described_class).to receive(:test_path).with(example_group).and_return(test_path)
|
97
103
|
|
98
|
-
allow(KnapsackPro).to receive(:tracker).and_return(tracker)
|
99
|
-
expect(tracker).to receive(:start_timer).ordered
|
100
104
|
expect(tracker).to receive(:current_test_path=).with(test_path).ordered
|
101
105
|
|
102
106
|
expect(example).to receive(:run)
|
@@ -127,16 +131,20 @@ describe KnapsackPro::Adapters::RSpecAdapter do
|
|
127
131
|
expect(example).to receive(:id).and_return(test_example_path)
|
128
132
|
|
129
133
|
expect(config).to receive(:prepend_before).with(:context).and_yield
|
134
|
+
|
135
|
+
allow(KnapsackPro).to receive(:tracker).and_return(tracker)
|
136
|
+
expect(tracker).to receive(:start_timer).ordered
|
137
|
+
|
130
138
|
expect(config).to receive(:around).with(:each).and_yield(example)
|
131
139
|
expect(config).to receive(:append_after).with(:context).and_yield
|
132
140
|
expect(config).to receive(:after).with(:suite).and_yield
|
133
141
|
expect(::RSpec).to receive(:configure).and_yield(config)
|
134
142
|
|
143
|
+
expect(tracker).to receive(:stop_timer).ordered
|
144
|
+
|
135
145
|
expect(::RSpec).to receive(:current_example).twice.and_return(current_example)
|
136
146
|
expect(described_class).to receive(:test_path).with(example_group).and_return(test_path)
|
137
147
|
|
138
|
-
allow(KnapsackPro).to receive(:tracker).and_return(tracker)
|
139
|
-
expect(tracker).to receive(:start_timer).ordered
|
140
148
|
expect(tracker).to receive(:current_test_path=).with(test_example_path).ordered
|
141
149
|
|
142
150
|
expect(example).to receive(:run)
|
@@ -158,6 +166,10 @@ describe KnapsackPro::Adapters::RSpecAdapter do
|
|
158
166
|
|
159
167
|
it 'records time for current test path' do
|
160
168
|
expect(config).to receive(:prepend_before).with(:context).and_yield
|
169
|
+
|
170
|
+
allow(KnapsackPro).to receive(:tracker).and_return(tracker)
|
171
|
+
expect(tracker).to receive(:start_timer).ordered
|
172
|
+
|
161
173
|
expect(config).to receive(:around).with(:each).and_yield(example)
|
162
174
|
expect(config).to receive(:append_after).with(:context).and_yield
|
163
175
|
expect(config).to receive(:after).with(:suite).and_yield
|
@@ -166,8 +178,8 @@ describe KnapsackPro::Adapters::RSpecAdapter do
|
|
166
178
|
expect(::RSpec).to receive(:current_example).twice.and_return(current_example)
|
167
179
|
expect(described_class).to receive(:test_path).with(example_group).and_return(test_path)
|
168
180
|
|
169
|
-
|
170
|
-
|
181
|
+
expect(tracker).to receive(:stop_timer).ordered
|
182
|
+
|
171
183
|
expect(tracker).to receive(:current_test_path=).with(test_path).ordered
|
172
184
|
|
173
185
|
expect(example).to receive(:run)
|
@@ -12,7 +12,9 @@ describe KnapsackPro::Tracker do
|
|
12
12
|
subject { tracker.current_test_path }
|
13
13
|
|
14
14
|
context 'when current_test_path not set' do
|
15
|
-
it
|
15
|
+
it do
|
16
|
+
expect { subject }.to raise_error("current_test_path needs to be set by Knapsack Pro Adapter's bind method")
|
17
|
+
end
|
16
18
|
end
|
17
19
|
|
18
20
|
context 'when current_test_path set' do
|
@@ -56,9 +58,6 @@ describe KnapsackPro::Tracker do
|
|
56
58
|
it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
|
57
59
|
it { expect(tracker.test_files_with_time['a_spec.rb'][:time_execution]).to be_within(delta).of(0.1) }
|
58
60
|
it { expect(tracker.test_files_with_time['b_spec.rb'][:time_execution]).to be_within(delta).of(0.2) }
|
59
|
-
it 'resets current_test_path after time is measured' do
|
60
|
-
expect(tracker.current_test_path).to be_nil
|
61
|
-
end
|
62
61
|
it_behaves_like '#to_a'
|
63
62
|
end
|
64
63
|
|
@@ -84,9 +83,6 @@ describe KnapsackPro::Tracker do
|
|
84
83
|
it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
|
85
84
|
it { expect(tracker.test_files_with_time['a_spec.rb'][:time_execution]).to be_within(delta).of(0) }
|
86
85
|
it { expect(tracker.test_files_with_time['b_spec.rb'][:time_execution]).to be_within(delta).of(0) }
|
87
|
-
it 'resets current_test_path after time is measured' do
|
88
|
-
expect(tracker.current_test_path).to be_nil
|
89
|
-
end
|
90
86
|
it_behaves_like '#to_a'
|
91
87
|
end
|
92
88
|
|
@@ -99,10 +95,12 @@ describe KnapsackPro::Tracker do
|
|
99
95
|
end
|
100
96
|
end
|
101
97
|
|
102
|
-
it { expect(tracker.global_time).to
|
98
|
+
it { expect(tracker.global_time).to be > 0 }
|
103
99
|
it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
|
104
100
|
it { expect(tracker.test_files_with_time['a_spec.rb'][:time_execution]).to eq 0 }
|
105
|
-
it
|
101
|
+
it '2nd spec (b_spec.rb) should have recorded time execution - because start_time was set during first call of stop_timer for the first spec (a_spec.rb)' do
|
102
|
+
expect(tracker.test_files_with_time['b_spec.rb'][:time_execution]).to be > 0
|
103
|
+
end
|
106
104
|
it_behaves_like '#to_a'
|
107
105
|
end
|
108
106
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack_pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|