api_mini_tester 0.1.11 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/api_mini_tester +10 -4
- data/lib/api_mini_tester/import/postman.rb +5 -7
- data/lib/api_mini_tester/import/swagger.rb +25 -18
- data/lib/api_mini_tester/test_scenario.rb +4 -3
- data/lib/api_mini_tester/test_step.rb +27 -6
- data/lib/api_mini_tester/test_suite.rb +8 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37c3b6aa723b1f44d8fdb654f5dab597444470bc
|
4
|
+
data.tar.gz: 333c795e0119ebc8bf7f4bc9b9f3c3f9da0a0bfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9531896365858e4249722860fcac04b66a94b8834968fc6dcc841df7b5cd5ffea0a5aaa8ec18dc26e5997e974a9da091e75b8ddb0350daeb817e29a3beaa8934
|
7
|
+
data.tar.gz: 1ae7c02a22c4b91326305b2dfbc2a39de0a08e531cfe013c01494abc03b6832820810036b0a86a6a265b02ca83cee7f37aa3182ef25e0bb5ea9dbf602bdc407d
|
data/bin/api_mini_tester
CHANGED
@@ -3,12 +3,18 @@
|
|
3
3
|
require 'api_mini_tester'
|
4
4
|
|
5
5
|
begin
|
6
|
-
puts "usage: api_mini_tester [input_file.yml] [output_format]"
|
6
|
+
puts "usage: api_mini_tester [--debug] [input_file.yml] [output_format]"
|
7
7
|
exit 1
|
8
8
|
end if ARGV.empty?
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
debug = ARGV.include?("--debug")
|
11
|
+
if debug
|
12
|
+
output_format = ARGV[2] ? ARGV[2].to_sym : :simple
|
13
|
+
input_file = ARGV[1]
|
14
|
+
else
|
15
|
+
output_format = ARGV[1] ? ARGV[1].to_sym : :simple
|
16
|
+
input_file = ARGV[0]
|
17
|
+
end
|
18
|
+
suite = ApiMiniTester::TestSuite.new(input_file, debug)
|
13
19
|
suite.run_scenarios
|
14
20
|
puts suite.print_results(output_format)
|
@@ -40,7 +40,7 @@ module ApiMiniTester
|
|
40
40
|
return "" unless url1 && url2
|
41
41
|
index = 0
|
42
42
|
index += 1 while url1[index] && url2[index] && url1[index] == url2[index]
|
43
|
-
return "" if index
|
43
|
+
return "" if index.zero?
|
44
44
|
url1[0..(index - 1)][0..(url1.rindex('/') - 1)]
|
45
45
|
end
|
46
46
|
|
@@ -48,7 +48,7 @@ module ApiMiniTester
|
|
48
48
|
base = ''
|
49
49
|
items.each do |item|
|
50
50
|
if item['item']
|
51
|
-
item_url = baseurl(item['item'])
|
51
|
+
item_url = baseurl(item['item'])
|
52
52
|
elsif item['request']
|
53
53
|
item_url = item['request']['url']['raw']
|
54
54
|
end
|
@@ -82,11 +82,9 @@ module ApiMiniTester
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def step_body(body)
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
{}
|
89
|
-
end
|
85
|
+
body ? JSON.parse(body) : {}
|
86
|
+
rescue JSON::ParserError
|
87
|
+
{}
|
90
88
|
end
|
91
89
|
|
92
90
|
def step(item)
|
@@ -7,59 +7,66 @@ module ApiMiniTester
|
|
7
7
|
attr_reader :collection
|
8
8
|
|
9
9
|
def initialize(swagger)
|
10
|
-
|
10
|
+
''
|
11
11
|
end
|
12
12
|
|
13
13
|
def to_yaml
|
14
|
+
''
|
14
15
|
end
|
15
16
|
|
16
17
|
def suite_base
|
17
18
|
@suite_base ||= {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
name: name,
|
20
|
+
desc: "Imported from swagger definition: #{name}",
|
21
|
+
settings: {
|
22
|
+
baseurl: ''
|
22
23
|
},
|
23
|
-
|
24
|
+
tests: [
|
24
25
|
{
|
25
|
-
|
26
|
-
|
26
|
+
name: "Test scenario based on swagger definition #{name}",
|
27
|
+
steps: []
|
27
28
|
}
|
28
29
|
]
|
29
30
|
}
|
30
31
|
end
|
31
32
|
|
32
33
|
def name
|
34
|
+
''
|
33
35
|
end
|
34
36
|
|
35
37
|
def baseurl
|
38
|
+
''
|
36
39
|
end
|
37
40
|
|
38
41
|
def steps
|
42
|
+
''
|
39
43
|
end
|
40
44
|
|
41
45
|
def step_uri(uri)
|
46
|
+
''
|
42
47
|
end
|
43
48
|
|
44
49
|
def step_header(header)
|
50
|
+
''
|
45
51
|
end
|
46
52
|
|
47
53
|
def step_body(body)
|
54
|
+
''
|
48
55
|
end
|
49
56
|
|
50
57
|
def step(item)
|
51
58
|
res = {
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
+
step: '',
|
60
|
+
name: '',
|
61
|
+
method: '',
|
62
|
+
uri: '',
|
63
|
+
input: {
|
64
|
+
header: {},
|
65
|
+
body: {}
|
59
66
|
},
|
60
|
-
|
61
|
-
|
62
|
-
|
67
|
+
output: {
|
68
|
+
header: {},
|
69
|
+
body: {}
|
63
70
|
}
|
64
71
|
}
|
65
72
|
res
|
@@ -3,14 +3,15 @@ require_relative 'test_step'
|
|
3
3
|
module ApiMiniTester
|
4
4
|
class TestScenario
|
5
5
|
|
6
|
-
attr_reader :base_uri, :scenario, :data, :results, :name, :defaults
|
6
|
+
attr_reader :base_uri, :scenario, :data, :results, :name, :defaults, :debug
|
7
7
|
|
8
|
-
def initialize(base_uri, scenario, data, defaults)
|
8
|
+
def initialize(base_uri, scenario, data, defaults, debug = false)
|
9
9
|
@base_uri = base_uri
|
10
10
|
@scenario = scenario
|
11
11
|
@data = data
|
12
12
|
@name = scenario['name']
|
13
13
|
@defaults = defaults
|
14
|
+
@debug = debug
|
14
15
|
@results = {name: @name, desc: scenario['desc'], steps: []}
|
15
16
|
end
|
16
17
|
|
@@ -36,7 +37,7 @@ module ApiMiniTester
|
|
36
37
|
def run_scenario
|
37
38
|
@context = []
|
38
39
|
scenario['steps'].each do |step|
|
39
|
-
step = TestStep.new(base_uri, step, @context, data, defaults)
|
40
|
+
step = TestStep.new(base_uri, step, @context, data, defaults, debug)
|
40
41
|
step_result, context = step.run_step
|
41
42
|
@results[:steps] << step_result
|
42
43
|
@context << context
|
@@ -14,10 +14,14 @@ module ApiMiniTester
|
|
14
14
|
SUPPORTED_METHODS = %i[ get post put delete ].freeze
|
15
15
|
SUPPORTED_RANDOM_DISTRIBUTION = %w[ static norm uniform ].freeze
|
16
16
|
|
17
|
-
attr_accessor :name, :input, :output
|
18
|
-
attr_reader :results, :sleeps, :method, :uri
|
17
|
+
attr_accessor :name, :input, :output, :timing
|
18
|
+
attr_reader :results, :sleeps, :method, :uri, :debug
|
19
19
|
|
20
|
-
def initialize(base_uri, step, context = nil, data = nil, defaults = nil)
|
20
|
+
def initialize(base_uri, step, context = nil, data = nil, defaults = nil, debug = false)
|
21
|
+
@debug = debug
|
22
|
+
if debug
|
23
|
+
@debug_output = File.open(ApiMiniTester::TestSuite::DEBUG_FILE, 'a')
|
24
|
+
end
|
21
25
|
step = step.deep_merge!(defaults) do |key, this_val, other_val|
|
22
26
|
if this_val.nil?
|
23
27
|
other_val
|
@@ -66,7 +70,7 @@ module ApiMiniTester
|
|
66
70
|
|
67
71
|
def headers
|
68
72
|
@input['header'] = {} unless @input['header']
|
69
|
-
@input['header']['Content-
|
73
|
+
@input['header']['Content-Type'] = content_type if content_type == 'application/json'
|
70
74
|
@input['header']
|
71
75
|
end
|
72
76
|
|
@@ -81,6 +85,10 @@ module ApiMiniTester
|
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
88
|
+
def raw_body
|
89
|
+
@input["body"].to_hash
|
90
|
+
end
|
91
|
+
|
84
92
|
def body_to_form_data
|
85
93
|
body = {}
|
86
94
|
@input["body"].each do |item|
|
@@ -135,12 +143,25 @@ module ApiMiniTester
|
|
135
143
|
add_result :url, { result: true, desc: "Url: #{uri}" }
|
136
144
|
add_result :method, { result: true, desc: "Method: #{method}" }
|
137
145
|
|
146
|
+
log_debug({ headers: headers, body: raw_body },
|
147
|
+
{ headers: response.headers, body: response.parsed_response, code: response.code },
|
148
|
+
output) if debug
|
149
|
+
|
150
|
+
run_asserts(response)
|
151
|
+
|
152
|
+
[ results, response ]
|
153
|
+
end
|
154
|
+
|
155
|
+
def run_asserts(response)
|
138
156
|
assert_status(response.code, test_status)
|
139
157
|
assert_headers(response.headers, test_headers)
|
140
158
|
assert_body(response.parsed_response, test_body)
|
141
|
-
assert_timing(
|
159
|
+
assert_timing(timing, test_timing)
|
160
|
+
end
|
142
161
|
|
143
|
-
|
162
|
+
def log_debug(request, response, expectations)
|
163
|
+
log = { uri: uri, method: method, request: request, response: response, expectations: expectations }
|
164
|
+
@debug_output.puts log.to_json
|
144
165
|
end
|
145
166
|
|
146
167
|
def print_results
|
@@ -5,14 +5,19 @@ require_relative 'test_formatter'
|
|
5
5
|
module ApiMiniTester
|
6
6
|
class TestSuite
|
7
7
|
|
8
|
-
|
8
|
+
DEBUG_FILE = 'debug.json'.freeze
|
9
|
+
attr_reader :base_uri, :scenarios, :data, :results, :defaults, :debug
|
9
10
|
|
10
|
-
def initialize(suite_def)
|
11
|
+
def initialize(suite_def, debug = false)
|
11
12
|
if suite_def.is_a?(String)
|
12
13
|
@test = YAML.load(File.open(suite_def))
|
13
14
|
elsif suite_def.is_a?(Hash)
|
14
15
|
@test = suite_def
|
15
16
|
end
|
17
|
+
@debug = debug
|
18
|
+
if debug
|
19
|
+
File.delete(DEBUG_FILE) if File.exist?(DEBUG_FILE)
|
20
|
+
end
|
16
21
|
setup
|
17
22
|
end
|
18
23
|
|
@@ -33,7 +38,7 @@ module ApiMiniTester
|
|
33
38
|
|
34
39
|
def run_scenarios
|
35
40
|
scenarios.each do |scenario|
|
36
|
-
runner = TestScenario.new(base_uri, scenario, data, defaults)
|
41
|
+
runner = TestScenario.new(base_uri, scenario, data, defaults, debug)
|
37
42
|
runner.run_scenario
|
38
43
|
@results[:scenarios] << runner.results
|
39
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_mini_tester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jindrich Skupa (@eMan)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|