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 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