httpimagestore 0.5.0 → 1.0.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.
- data/Gemfile +10 -12
- data/Gemfile.lock +57 -55
- data/README.md +829 -0
- data/VERSION +1 -1
- data/bin/httpimagestore +114 -180
- data/features/cache-control.feature +26 -90
- data/features/compatibility.feature +129 -0
- data/features/error-reporting.feature +207 -0
- data/features/health-check.feature +30 -0
- data/features/s3-store-and-thumbnail.feature +65 -0
- data/features/step_definitions/httpimagestore_steps.rb +66 -26
- data/features/support/env.rb +32 -5
- data/features/support/test.empty +0 -0
- data/httpimagestore.gemspec +60 -47
- data/lib/httpimagestore/aws_sdk_regions_hack.rb +23 -0
- data/lib/httpimagestore/configuration/file.rb +120 -0
- data/lib/httpimagestore/configuration/handler.rb +239 -0
- data/lib/httpimagestore/configuration/output.rb +119 -0
- data/lib/httpimagestore/configuration/path.rb +77 -0
- data/lib/httpimagestore/configuration/s3.rb +194 -0
- data/lib/httpimagestore/configuration/thumbnailer.rb +244 -0
- data/lib/httpimagestore/configuration.rb +126 -29
- data/lib/httpimagestore/error_reporter.rb +36 -0
- data/lib/httpimagestore/ruby_string_template.rb +26 -0
- data/load_test/load_test.1k.23a022f6e.m1.small-comp.csv +3 -0
- data/load_test/load_test.1k.ec9bde794.m1.small.csv +4 -0
- data/load_test/load_test.jmx +344 -0
- data/load_test/thumbnail_specs.csv +11 -0
- data/spec/configuration_file_spec.rb +309 -0
- data/spec/configuration_handler_spec.rb +124 -0
- data/spec/configuration_output_spec.rb +338 -0
- data/spec/configuration_path_spec.rb +92 -0
- data/spec/configuration_s3_spec.rb +571 -0
- data/spec/configuration_spec.rb +80 -105
- data/spec/configuration_thumbnailer_spec.rb +417 -0
- data/spec/ruby_string_template_spec.rb +43 -0
- data/spec/spec_helper.rb +61 -0
- data/spec/support/compute.jpg +0 -0
- data/spec/support/cuba_response_env.rb +40 -0
- data/spec/support/full.cfg +49 -0
- metadata +138 -84
- data/README.rdoc +0 -23
- data/features/httpimagestore.feature +0 -167
- data/lib/httpimagestore/image_path.rb +0 -54
- data/lib/httpimagestore/s3_service.rb +0 -37
- data/lib/httpimagestore/thumbnail_class.rb +0 -13
- data/spec/image_path_spec.rb +0 -72
- data/spec/test.cfg +0 -8
@@ -0,0 +1,36 @@
|
|
1
|
+
class ErrorReporter < Controler
|
2
|
+
self.define do
|
3
|
+
on error(
|
4
|
+
Rack::UnhandledRequest::UnhandledRequestError,
|
5
|
+
Configuration::S3NoSuchKeyError,
|
6
|
+
Configuration::NoSuchFileError
|
7
|
+
) do |error|
|
8
|
+
write_error 404, error
|
9
|
+
end
|
10
|
+
|
11
|
+
on error MemoryLimit::MemoryLimitedExceededError do |error|
|
12
|
+
write_error 413, error
|
13
|
+
end
|
14
|
+
|
15
|
+
on error Configuration::Thumbnail::ThumbnailingError do |error|
|
16
|
+
status = defined?(error.remote_error.status) ? error.remote_error.status : 500
|
17
|
+
write_error status, error
|
18
|
+
end
|
19
|
+
|
20
|
+
on error Configuration::ZeroBodyLengthError do |error|
|
21
|
+
write_error 400, error
|
22
|
+
end
|
23
|
+
|
24
|
+
on error StandardError do |error|
|
25
|
+
log.error "unhandled error while processing request: #{env['REQUEST_METHOD']} #{env['SCRIPT_NAME']}[#{env["PATH_INFO"]}]", error
|
26
|
+
log.debug {
|
27
|
+
out = StringIO.new
|
28
|
+
PP::pp(env, out, 200)
|
29
|
+
"Request: \n" + out.string
|
30
|
+
}
|
31
|
+
|
32
|
+
write_error 500, error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class RubyStringTemplate
|
2
|
+
class NoValueForTemplatePlaceholderError < ArgumentError
|
3
|
+
def initialize(name, template)
|
4
|
+
super "no value for '\#{#{name}}' in template '#{template}'"
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(template, &resolver)
|
9
|
+
@template = template.to_s
|
10
|
+
@resolver = resolver ? resolver : ->(locals, name){locals[name]}
|
11
|
+
end
|
12
|
+
|
13
|
+
def render(locals = {})
|
14
|
+
template = @template
|
15
|
+
while tag = template.match(/(#\{[^\}]+\})/m)
|
16
|
+
tag = tag.captures.first
|
17
|
+
name = tag.match(/#\{([^\}]*)\}/).captures.first.to_sym
|
18
|
+
value = @resolver.call(locals, name)
|
19
|
+
value or fail NoValueForTemplatePlaceholderError.new(name, @template)
|
20
|
+
value = value.to_s
|
21
|
+
template = template.gsub(tag, value)
|
22
|
+
end
|
23
|
+
template
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,3 @@
|
|
1
|
+
sampler_label,aggregate_report_count,average,aggregate_report_median,aggregate_report_90%_line,aggregate_report_min,aggregate_report_max,aggregate_report_error%,aggregate_report_rate,aggregate_report_bandwidth
|
2
|
+
classes,985,15101,8288,36838,857,211337,0.017258883248730966,0.10672951825329396,0.16322841998894347
|
3
|
+
TOTAL,985,15101,8288,36838,857,211337,0.017258883248730966,0.10672951825329396,0.16322841998894347
|
@@ -0,0 +1,4 @@
|
|
1
|
+
sampler_label,aggregate_report_count,average,aggregate_report_median,aggregate_report_90%_line,aggregate_report_min,aggregate_report_max,aggregate_report_error%,aggregate_report_rate,aggregate_report_bandwidth
|
2
|
+
original,989,7755,2917,21931,164,96522,0.0010111223458038423,0.10461638578207254,0.020651782131933853
|
3
|
+
thumbnail fit,43516,905,748,1558,76,11358,0.0010111223458038423,4.594225650846874,97.8148328278794
|
4
|
+
TOTAL,44505,1058,758,1621,76,96522,0.0010111223458038423,4.689206890273507,97.63903046024716
|
@@ -0,0 +1,344 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<jmeterTestPlan version="1.2" properties="2.4" jmeter="2.9 r1437961">
|
3
|
+
<hashTree>
|
4
|
+
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
5
|
+
<stringProp name="TestPlan.comments"></stringProp>
|
6
|
+
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
7
|
+
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
8
|
+
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
9
|
+
<collectionProp name="Arguments.arguments">
|
10
|
+
<elementProp name="iss_server" elementType="Argument">
|
11
|
+
<stringProp name="Argument.name">iss_server</stringProp>
|
12
|
+
<stringProp name="Argument.value">test.iss.whatclinic.com</stringProp>
|
13
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
14
|
+
</elementProp>
|
15
|
+
<elementProp name="test_data_dir" elementType="Argument">
|
16
|
+
<stringProp name="Argument.name">test_data_dir</stringProp>
|
17
|
+
<stringProp name="Argument.value">${__property(user.dir)}/Documents/test_data</stringProp>
|
18
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
19
|
+
</elementProp>
|
20
|
+
<elementProp name="test_data_list" elementType="Argument">
|
21
|
+
<stringProp name="Argument.name">test_data_list</stringProp>
|
22
|
+
<stringProp name="Argument.value">tatoos-1k.csv</stringProp>
|
23
|
+
<stringProp name="Argument.metadata">=</stringProp>
|
24
|
+
</elementProp>
|
25
|
+
</collectionProp>
|
26
|
+
</elementProp>
|
27
|
+
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
28
|
+
</TestPlan>
|
29
|
+
<hashTree>
|
30
|
+
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
31
|
+
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
32
|
+
<collectionProp name="Arguments.arguments"/>
|
33
|
+
</elementProp>
|
34
|
+
<stringProp name="HTTPSampler.domain">${iss_server}</stringProp>
|
35
|
+
<stringProp name="HTTPSampler.port">3000</stringProp>
|
36
|
+
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
37
|
+
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
38
|
+
<stringProp name="HTTPSampler.protocol"></stringProp>
|
39
|
+
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
40
|
+
<stringProp name="HTTPSampler.path"></stringProp>
|
41
|
+
<stringProp name="HTTPSampler.implementation">Java</stringProp>
|
42
|
+
<stringProp name="HTTPSampler.concurrentPool">4</stringProp>
|
43
|
+
</ConfigTestElement>
|
44
|
+
<hashTree/>
|
45
|
+
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Compatibility API" enabled="true">
|
46
|
+
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
47
|
+
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
48
|
+
<boolProp name="LoopController.continue_forever">false</boolProp>
|
49
|
+
<intProp name="LoopController.loops">-1</intProp>
|
50
|
+
</elementProp>
|
51
|
+
<stringProp name="ThreadGroup.num_threads">5</stringProp>
|
52
|
+
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
53
|
+
<longProp name="ThreadGroup.start_time">1373912751000</longProp>
|
54
|
+
<longProp name="ThreadGroup.end_time">1373912751000</longProp>
|
55
|
+
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
56
|
+
<stringProp name="ThreadGroup.duration"></stringProp>
|
57
|
+
<stringProp name="ThreadGroup.delay"></stringProp>
|
58
|
+
</ThreadGroup>
|
59
|
+
<hashTree>
|
60
|
+
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="test files" enabled="true">
|
61
|
+
<stringProp name="delimiter">,</stringProp>
|
62
|
+
<stringProp name="fileEncoding"></stringProp>
|
63
|
+
<stringProp name="filename">${test_data_dir}/${test_data_list}</stringProp>
|
64
|
+
<boolProp name="quotedData">true</boolProp>
|
65
|
+
<boolProp name="recycle">false</boolProp>
|
66
|
+
<stringProp name="shareMode">All threads</stringProp>
|
67
|
+
<boolProp name="stopThread">true</boolProp>
|
68
|
+
<stringProp name="variableNames">test_file</stringProp>
|
69
|
+
</CSVDataSet>
|
70
|
+
<hashTree/>
|
71
|
+
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="classes" enabled="true">
|
72
|
+
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
73
|
+
<collectionProp name="Arguments.arguments"/>
|
74
|
+
</elementProp>
|
75
|
+
<stringProp name="HTTPSampler.domain"></stringProp>
|
76
|
+
<stringProp name="HTTPSampler.port"></stringProp>
|
77
|
+
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
78
|
+
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
79
|
+
<stringProp name="HTTPSampler.protocol"></stringProp>
|
80
|
+
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
81
|
+
<stringProp name="HTTPSampler.path">/thumbnail/original,search,search_thumb,brochure,brochure_thumb,admin,dmin_thumb,treatment_thumb,staff_member_thumb,consultation,clinic_google_map_thumb</stringProp>
|
82
|
+
<stringProp name="HTTPSampler.method">PUT</stringProp>
|
83
|
+
<boolProp name="HTTPSampler.follow_redirects">false</boolProp>
|
84
|
+
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
85
|
+
<boolProp name="HTTPSampler.use_keepalive">false</boolProp>
|
86
|
+
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
87
|
+
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
|
88
|
+
<collectionProp name="HTTPFileArgs.files">
|
89
|
+
<elementProp name="${test_data_dir}/${test_file}" elementType="HTTPFileArg">
|
90
|
+
<stringProp name="File.path">${test_data_dir}/${test_file}</stringProp>
|
91
|
+
<stringProp name="File.paramname"></stringProp>
|
92
|
+
<stringProp name="File.mimetype">image/jpeg</stringProp>
|
93
|
+
</elementProp>
|
94
|
+
</collectionProp>
|
95
|
+
</elementProp>
|
96
|
+
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
97
|
+
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
98
|
+
</HTTPSamplerProxy>
|
99
|
+
<hashTree>
|
100
|
+
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="contains path" enabled="true">
|
101
|
+
<collectionProp name="Asserion.test_strings">
|
102
|
+
<stringProp name="-1604815031">dev/httpimagestore/compat</stringProp>
|
103
|
+
</collectionProp>
|
104
|
+
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
105
|
+
<boolProp name="Assertion.assume_success">false</boolProp>
|
106
|
+
<intProp name="Assertion.test_type">16</intProp>
|
107
|
+
</ResponseAssertion>
|
108
|
+
<hashTree/>
|
109
|
+
</hashTree>
|
110
|
+
</hashTree>
|
111
|
+
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="API v1" enabled="false">
|
112
|
+
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
113
|
+
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
114
|
+
<boolProp name="LoopController.continue_forever">false</boolProp>
|
115
|
+
<intProp name="LoopController.loops">-1</intProp>
|
116
|
+
</elementProp>
|
117
|
+
<stringProp name="ThreadGroup.num_threads">5</stringProp>
|
118
|
+
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
119
|
+
<longProp name="ThreadGroup.start_time">1373879489000</longProp>
|
120
|
+
<longProp name="ThreadGroup.end_time">1373879489000</longProp>
|
121
|
+
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
122
|
+
<stringProp name="ThreadGroup.duration"></stringProp>
|
123
|
+
<stringProp name="ThreadGroup.delay"></stringProp>
|
124
|
+
</ThreadGroup>
|
125
|
+
<hashTree>
|
126
|
+
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="test files" enabled="true">
|
127
|
+
<stringProp name="delimiter">,</stringProp>
|
128
|
+
<stringProp name="fileEncoding"></stringProp>
|
129
|
+
<stringProp name="filename">${test_data_dir}/${test_data_list}</stringProp>
|
130
|
+
<boolProp name="quotedData">true</boolProp>
|
131
|
+
<boolProp name="recycle">false</boolProp>
|
132
|
+
<stringProp name="shareMode">All threads</stringProp>
|
133
|
+
<boolProp name="stopThread">true</boolProp>
|
134
|
+
<stringProp name="variableNames">test_file</stringProp>
|
135
|
+
</CSVDataSet>
|
136
|
+
<hashTree/>
|
137
|
+
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="original" enabled="true">
|
138
|
+
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
139
|
+
<collectionProp name="Arguments.arguments"/>
|
140
|
+
</elementProp>
|
141
|
+
<stringProp name="HTTPSampler.domain"></stringProp>
|
142
|
+
<stringProp name="HTTPSampler.port"></stringProp>
|
143
|
+
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
144
|
+
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
145
|
+
<stringProp name="HTTPSampler.protocol"></stringProp>
|
146
|
+
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
147
|
+
<stringProp name="HTTPSampler.path">/v1/original</stringProp>
|
148
|
+
<stringProp name="HTTPSampler.method">PUT</stringProp>
|
149
|
+
<boolProp name="HTTPSampler.follow_redirects">false</boolProp>
|
150
|
+
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
151
|
+
<boolProp name="HTTPSampler.use_keepalive">false</boolProp>
|
152
|
+
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
153
|
+
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
|
154
|
+
<collectionProp name="HTTPFileArgs.files">
|
155
|
+
<elementProp name="${test_data_dir}/${test_file}" elementType="HTTPFileArg">
|
156
|
+
<stringProp name="File.path">${test_data_dir}/${test_file}</stringProp>
|
157
|
+
<stringProp name="File.paramname"></stringProp>
|
158
|
+
<stringProp name="File.mimetype">image/jpeg</stringProp>
|
159
|
+
</elementProp>
|
160
|
+
</collectionProp>
|
161
|
+
</elementProp>
|
162
|
+
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
163
|
+
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
164
|
+
</HTTPSamplerProxy>
|
165
|
+
<hashTree>
|
166
|
+
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="store_path extractor" enabled="true">
|
167
|
+
<stringProp name="RegexExtractor.useHeaders">unescaped</stringProp>
|
168
|
+
<stringProp name="RegexExtractor.refname">store_path</stringProp>
|
169
|
+
<stringProp name="RegexExtractor.regex">([^\r]+)</stringProp>
|
170
|
+
<stringProp name="RegexExtractor.template">$1$</stringProp>
|
171
|
+
<stringProp name="RegexExtractor.default"></stringProp>
|
172
|
+
<stringProp name="RegexExtractor.match_number">1</stringProp>
|
173
|
+
</RegexExtractor>
|
174
|
+
<hashTree/>
|
175
|
+
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="contains path" enabled="true">
|
176
|
+
<collectionProp name="Asserion.test_strings">
|
177
|
+
<stringProp name="1768443330">dev/httpimagestore/v1</stringProp>
|
178
|
+
</collectionProp>
|
179
|
+
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
180
|
+
<boolProp name="Assertion.assume_success">false</boolProp>
|
181
|
+
<intProp name="Assertion.test_type">16</intProp>
|
182
|
+
</ResponseAssertion>
|
183
|
+
<hashTree/>
|
184
|
+
</hashTree>
|
185
|
+
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="iterations" enabled="true">
|
186
|
+
<boolProp name="LoopController.continue_forever">true</boolProp>
|
187
|
+
<stringProp name="LoopController.loops">4</stringProp>
|
188
|
+
</LoopController>
|
189
|
+
<hashTree>
|
190
|
+
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="specs counter" enabled="true">
|
191
|
+
<boolProp name="LoopController.continue_forever">true</boolProp>
|
192
|
+
<stringProp name="LoopController.loops">11</stringProp>
|
193
|
+
</LoopController>
|
194
|
+
<hashTree>
|
195
|
+
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="thumbnail specs" enabled="true">
|
196
|
+
<stringProp name="filename">thumbnail_specs.csv</stringProp>
|
197
|
+
<stringProp name="fileEncoding"></stringProp>
|
198
|
+
<stringProp name="variableNames">method,width,height,options</stringProp>
|
199
|
+
<stringProp name="delimiter">,</stringProp>
|
200
|
+
<boolProp name="quotedData">true</boolProp>
|
201
|
+
<boolProp name="recycle">true</boolProp>
|
202
|
+
<boolProp name="stopThread">false</boolProp>
|
203
|
+
<stringProp name="shareMode">Current thread</stringProp>
|
204
|
+
</CSVDataSet>
|
205
|
+
<hashTree/>
|
206
|
+
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="thumbnail fit" enabled="true">
|
207
|
+
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
208
|
+
<collectionProp name="Arguments.arguments"/>
|
209
|
+
</elementProp>
|
210
|
+
<stringProp name="HTTPSampler.domain"></stringProp>
|
211
|
+
<stringProp name="HTTPSampler.port"></stringProp>
|
212
|
+
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
213
|
+
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
214
|
+
<stringProp name="HTTPSampler.protocol"></stringProp>
|
215
|
+
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
216
|
+
<stringProp name="HTTPSampler.path">/v1/thumbnail/${__BeanShell(vars.get("store_path").replace("/"\, "%2f"))}/${method}/${width}/${height}/${options}</stringProp>
|
217
|
+
<stringProp name="HTTPSampler.method">GET</stringProp>
|
218
|
+
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
219
|
+
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
220
|
+
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
221
|
+
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
222
|
+
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
223
|
+
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
224
|
+
</HTTPSamplerProxy>
|
225
|
+
<hashTree>
|
226
|
+
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
|
227
|
+
<collectionProp name="Asserion.test_strings">
|
228
|
+
<stringProp name="-722923736">Content-Type: image/</stringProp>
|
229
|
+
</collectionProp>
|
230
|
+
<stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
|
231
|
+
<boolProp name="Assertion.assume_success">false</boolProp>
|
232
|
+
<intProp name="Assertion.test_type">16</intProp>
|
233
|
+
</ResponseAssertion>
|
234
|
+
<hashTree/>
|
235
|
+
</hashTree>
|
236
|
+
</hashTree>
|
237
|
+
</hashTree>
|
238
|
+
<DebugPostProcessor guiclass="TestBeanGUI" testclass="DebugPostProcessor" testname="Debug PostProcessor" enabled="false">
|
239
|
+
<boolProp name="displayJMeterProperties">false</boolProp>
|
240
|
+
<boolProp name="displayJMeterVariables">true</boolProp>
|
241
|
+
<boolProp name="displaySamplerProperties">false</boolProp>
|
242
|
+
<boolProp name="displaySystemProperties">false</boolProp>
|
243
|
+
</DebugPostProcessor>
|
244
|
+
<hashTree/>
|
245
|
+
</hashTree>
|
246
|
+
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
|
247
|
+
<boolProp name="ResultCollector.error_logging">true</boolProp>
|
248
|
+
<objProp>
|
249
|
+
<name>saveConfig</name>
|
250
|
+
<value class="SampleSaveConfiguration">
|
251
|
+
<time>true</time>
|
252
|
+
<latency>true</latency>
|
253
|
+
<timestamp>true</timestamp>
|
254
|
+
<success>true</success>
|
255
|
+
<label>true</label>
|
256
|
+
<code>true</code>
|
257
|
+
<message>true</message>
|
258
|
+
<threadName>true</threadName>
|
259
|
+
<dataType>true</dataType>
|
260
|
+
<encoding>false</encoding>
|
261
|
+
<assertions>true</assertions>
|
262
|
+
<subresults>true</subresults>
|
263
|
+
<responseData>false</responseData>
|
264
|
+
<samplerData>false</samplerData>
|
265
|
+
<xml>false</xml>
|
266
|
+
<fieldNames>false</fieldNames>
|
267
|
+
<responseHeaders>false</responseHeaders>
|
268
|
+
<requestHeaders>false</requestHeaders>
|
269
|
+
<responseDataOnError>false</responseDataOnError>
|
270
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
271
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
272
|
+
<bytes>true</bytes>
|
273
|
+
</value>
|
274
|
+
</objProp>
|
275
|
+
<stringProp name="filename"></stringProp>
|
276
|
+
</ResultCollector>
|
277
|
+
<hashTree/>
|
278
|
+
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true">
|
279
|
+
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
280
|
+
<objProp>
|
281
|
+
<name>saveConfig</name>
|
282
|
+
<value class="SampleSaveConfiguration">
|
283
|
+
<time>true</time>
|
284
|
+
<latency>true</latency>
|
285
|
+
<timestamp>true</timestamp>
|
286
|
+
<success>true</success>
|
287
|
+
<label>true</label>
|
288
|
+
<code>true</code>
|
289
|
+
<message>true</message>
|
290
|
+
<threadName>true</threadName>
|
291
|
+
<dataType>true</dataType>
|
292
|
+
<encoding>false</encoding>
|
293
|
+
<assertions>true</assertions>
|
294
|
+
<subresults>true</subresults>
|
295
|
+
<responseData>false</responseData>
|
296
|
+
<samplerData>false</samplerData>
|
297
|
+
<xml>false</xml>
|
298
|
+
<fieldNames>false</fieldNames>
|
299
|
+
<responseHeaders>false</responseHeaders>
|
300
|
+
<requestHeaders>false</requestHeaders>
|
301
|
+
<responseDataOnError>false</responseDataOnError>
|
302
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
303
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
304
|
+
<bytes>true</bytes>
|
305
|
+
</value>
|
306
|
+
</objProp>
|
307
|
+
<stringProp name="filename"></stringProp>
|
308
|
+
</ResultCollector>
|
309
|
+
<hashTree/>
|
310
|
+
<ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Graph Results" enabled="true">
|
311
|
+
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
312
|
+
<objProp>
|
313
|
+
<name>saveConfig</name>
|
314
|
+
<value class="SampleSaveConfiguration">
|
315
|
+
<time>true</time>
|
316
|
+
<latency>true</latency>
|
317
|
+
<timestamp>true</timestamp>
|
318
|
+
<success>true</success>
|
319
|
+
<label>true</label>
|
320
|
+
<code>true</code>
|
321
|
+
<message>true</message>
|
322
|
+
<threadName>true</threadName>
|
323
|
+
<dataType>true</dataType>
|
324
|
+
<encoding>false</encoding>
|
325
|
+
<assertions>true</assertions>
|
326
|
+
<subresults>true</subresults>
|
327
|
+
<responseData>false</responseData>
|
328
|
+
<samplerData>false</samplerData>
|
329
|
+
<xml>false</xml>
|
330
|
+
<fieldNames>false</fieldNames>
|
331
|
+
<responseHeaders>false</responseHeaders>
|
332
|
+
<requestHeaders>false</requestHeaders>
|
333
|
+
<responseDataOnError>false</responseDataOnError>
|
334
|
+
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
|
335
|
+
<assertionsResultsToSave>0</assertionsResultsToSave>
|
336
|
+
<bytes>true</bytes>
|
337
|
+
</value>
|
338
|
+
</objProp>
|
339
|
+
<stringProp name="filename"></stringProp>
|
340
|
+
</ResultCollector>
|
341
|
+
<hashTree/>
|
342
|
+
</hashTree>
|
343
|
+
</hashTree>
|
344
|
+
</jmeterTestPlan>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"crop","input","input","background-color:0xF0F0F0"
|
2
|
+
"pad","162","162","background-color:0xF0F0F0"
|
3
|
+
"pad","28","28","background-color:0xF0F0F0"
|
4
|
+
"pad","264","264","background-color:0xF0F0F0"
|
5
|
+
"pad","40","40","background-color:0xF0F0F0"
|
6
|
+
"pad","160","160","background-color:0xF0F0F0"
|
7
|
+
"pad","65","65","background-color:0xF0F0F0"
|
8
|
+
"pad","80","60","background-color:0xF0F0F0"
|
9
|
+
"pad","50","50","background-color:0xF0F0F0"
|
10
|
+
"pad","126","126","background-color:0xF0F0F0"
|
11
|
+
"pad","74","74","background-color:0xF0F0F0"
|