api_mini_tester 0.1.11 → 0.1.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f08ade0a4ac760994c392ec65feeddf90eb202f2
4
- data.tar.gz: dad8583dfaf42877bf430ccc24e55270610736b6
3
+ metadata.gz: 37c3b6aa723b1f44d8fdb654f5dab597444470bc
4
+ data.tar.gz: 333c795e0119ebc8bf7f4bc9b9f3c3f9da0a0bfb
5
5
  SHA512:
6
- metadata.gz: 650584fbe08b5f6c9b8a9d245a08d2e81e5660048b054be55048d97ef0cd2678c61f566a1ffdab2f97c7e327fb6d75bf18926a043b75c53dcd0b194c20536ad6
7
- data.tar.gz: 6230b7119f1fb23e5637ebf830a3f29b67077fadb3820cf9c2dd263373e075503811d0134274748358503bea8f475da8ba64a238589f856dabb2e8adc6a887a8
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
- output_format = ARGV[1] ? ARGV[1].to_sym : :simple
11
-
12
- suite = ApiMiniTester::TestSuite.new(ARGV[0])
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 == 0
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
- begin
86
- body ? JSON.parse(body) : {}
87
- rescue JSON::ParserError
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
- 'name' => name,
19
- 'desc' => "Imported from swagger definition: #{name}",
20
- 'settings' => {
21
- 'baseurl' => ''
19
+ name: name,
20
+ desc: "Imported from swagger definition: #{name}",
21
+ settings: {
22
+ baseurl: ''
22
23
  },
23
- 'tests' => [
24
+ tests: [
24
25
  {
25
- 'name' => "Test scenario based on swagger definition #{name}",
26
- 'steps' => []
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
- 'step' => '',
53
- 'name' => ''
54
- 'method' => ''
55
- 'uri' => '',
56
- 'input' => {
57
- 'header' => {},
58
- 'body' => {}
59
+ step: '',
60
+ name: '',
61
+ method: '',
62
+ uri: '',
63
+ input: {
64
+ header: {},
65
+ body: {}
59
66
  },
60
- 'output' => {
61
- 'header' => {},
62
- 'body' => {}
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-type'] = content_type if content_type == 'application/json'
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(@timing, test_timing)
159
+ assert_timing(timing, test_timing)
160
+ end
142
161
 
143
- [ results, response ]
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
- attr_reader :base_uri, :scenarios, :data, :results, :defaults
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.11
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-09-25 00:00:00.000000000 Z
11
+ date: 2018-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder