fastlane-plugin-xcresult_to_junit 0.2.0 → 0.2.5

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
  SHA256:
3
- metadata.gz: 1532fc3a5078d597ebdbb5e41a5bd038f38d9e3481ffe0b22b4dca0766f0a079
4
- data.tar.gz: 81d441aec6f1bf6c8b0034a54f569fdf6164bc74c0533db42bbc51daf0503d84
3
+ metadata.gz: f8ea55f58789c5cc56abd231d9ffeaa21e51ecddf242de33ad17bce1bf15c059
4
+ data.tar.gz: 50b033dfc0caa9e5fe1eecc90d94afa342e4dfdc1466b0a157354cc500da4420
5
5
  SHA512:
6
- metadata.gz: e69e4ee036d1ad1158438cd65f01fc0fe04b5284a1dc57510a85b73744add7014dbaf141f44f6291510bfbdc166133bd7896a82a226cfc23dd6cbbaa74211627
7
- data.tar.gz: 77e4e345da4c1b667805f9e1c66fb0db02fc96c412b04c417651a60aab0ae68df28201ec2964dd7fd691fb56d35e804f6dc472e995afb58b079475bdda1469cc
6
+ metadata.gz: 88a65b73cb50b3ac83b61b00734f0bbdfe85de3dd5761ca57ac10a81db5716e9ea9e5564b04a43847bfac65a3ded8fd9821ac7a8be117fe3fd66ce77ea520439
7
+ data.tar.gz: 8d67362431ba0968263d54f1118dc9910278fc190440533b2c3aed8e22ed6eebe2fe2f84044b4d70bc3583ee042eae8154ec71f6b371dfa187953a89d8a694c0
@@ -1,3 +1,4 @@
1
+ require 'date'
1
2
  require 'fastlane/action'
2
3
  require_relative '../helper/xcresult_to_junit_helper'
3
4
 
@@ -9,6 +10,7 @@ module Fastlane
9
10
  all_results = Helper::XcresultToJunitHelper.load_results(params[:xcresult_path])['actions']['_values']
10
11
  all_results.each do |test_run|
11
12
  if test_run['actionResult']['testsRef'] # Skip if section has no testRef data as this means its not a test run
13
+ map = {}
12
14
  junit_folder = Helper::XcresultToJunitHelper.save_device_details_to_file(params[:output_path], test_run['runDestination'])
13
15
  test_run_id = test_run['actionResult']['testsRef']['id']['_value']
14
16
  all_tests = Helper::XcresultToJunitHelper.load_object(params[:xcresult_path], test_run_id)['summaries']['_values'][0]['testableSummaries']['_values']
@@ -20,7 +22,10 @@ module Fastlane
20
22
  test_suites << { name: target_name, error: failure_summary['message']['_value'] }
21
23
  next
22
24
  end
23
- test_classes = target['tests']['_values'][0]['subtests']['_values'][0]['subtests']['_values']
25
+ test_classes = []
26
+ if defined?(target['tests']['_values'][0]['subtests']['_values'][0]['subtests']['_values'])
27
+ test_classes = target['tests']['_values'][0]['subtests']['_values'][0]['subtests']['_values']
28
+ end
24
29
  test_classes.each do |test_class|
25
30
  suite_name = "#{target_name}.#{test_class['name']['_value']}"
26
31
  suite = { name: suite_name, cases: [] }
@@ -29,16 +34,57 @@ module Fastlane
29
34
  duration = 0
30
35
  duration = test['duration']['_value'] if test['duration']
31
36
  testcase_name = test['name']['_value'].tr('()', '')
37
+ tags = testcase_name.split('_')[1..-1]
38
+ testcase_name = testcase_name.split('_').first
32
39
  testcase = { name: testcase_name, time: duration }
40
+ map["#{suite_name}.#{testcase_name}"] = {'files' => [], 'tags' => tags}
41
+
42
+ if defined?(test['summaryRef']['id']['_value'])
43
+ summaryRef = test['summaryRef']['id']['_value']
44
+ ref = Helper::XcresultToJunitHelper.load_object(params[:xcresult_path], summaryRef)
45
+ if defined?(ref['activitySummaries']['_values'])
46
+ ref['activitySummaries']['_values'].each do |summary|
47
+ if summary['attachments']
48
+ summary['attachments']['_values'].each do |attachment|
49
+ timestamp = DateTime.parse(attachment['timestamp']['_value']).to_time.to_i
50
+ filename = attachment['filename']['_value']
51
+ name = attachment['name']['_value']
52
+ folder_name = "#{suite_name}.#{testcase_name}"
53
+ id = attachment['payloadRef']['id']['_value']
54
+ Helper::XcresultToJunitHelper.fetch_screenshot(params[:xcresult_path], "#{junit_folder}/attachments/#{folder_name}", "#{filename}", id)
55
+ map[folder_name]['files'].push({'description' => name, 'mime-type' => 'image/png', 'path' => "#{folder_name}/#{filename}", 'timestamp' => timestamp})
56
+ end
57
+ end
58
+ end
59
+ end
33
60
 
34
- summaryRef = test['summaryRef']['id']['_value']
35
- ref = Helper::XcresultToJunitHelper.load_object(params[:xcresult_path], summaryRef)['activitySummaries']['_values']
36
- ref.each do |summary|
37
- if summary['attachments']
38
- summary['attachments']['_values'].each do |attachment|
39
- id = attachment['payloadRef']['id']['_value']
40
- Helper::XcresultToJunitHelper.fetch_screenshot(params[:xcresult_path], "#{junit_folder}/attachments/#{suite_name}.#{testcase_name}", "#{id}.png", id)
61
+ if defined?(ref['performanceMetrics']['_value'])
62
+ performancemetrics = ""
63
+ ref['performanceMetrics']['_values'].each do |metric|
64
+ metricname = metric['displayName']['_value']
65
+ if defined?(metric['baselineAverage']['_value'])
66
+ metricbaseline = metric['baselineAverage']['_value']
67
+ else
68
+ metricbaseline = 0
69
+ end
70
+ metricmaxdev = metric['maxPercentRelativeStandardDeviation']['_value']
71
+ metricunit = metric['unitOfMeasurement']['_value']
72
+ metricave = 0
73
+ measurecount = 0
74
+ metric['measurements']['_values'].each do |measure|
75
+ metricave = metricave + measure['_value'].to_f
76
+ measurecount += 1
77
+ end
78
+ metricave = (metricave/measurecount).round(2)
79
+ if metricbaseline != 0
80
+ metricresult = (((metricbaseline.to_f-metricave)/metricbaseline.to_f)*100).round(2)
81
+ else
82
+ metricresult = 0
83
+ end
84
+ performancemetric = "\nMetric: #{metricname}\nResult: #{metricresult}%\nAverage: #{metricave}#{metricunit}\nBaseline: #{metricbaseline}#{metricunit}\nMax Deviation: #{metricmaxdev}%\n\n"
85
+ performancemetrics << performancemetric
41
86
  end
87
+ testcase[:performance] = performancemetrics
42
88
  end
43
89
  end
44
90
 
@@ -63,6 +109,7 @@ module Fastlane
63
109
  end
64
110
  end
65
111
  Helper::XcresultToJunitHelper.generate_junit(junit_folder, test_suites)
112
+ Helper::XcresultToJunitHelper.save_screenshot_mapping(map, "#{junit_folder}/attachments/")
66
113
  end
67
114
  end
68
115
  UI.message("The xcresult_to_junit plugin has finished!")
@@ -19,7 +19,13 @@ module Fastlane
19
19
  if !File.directory?(output_path)
20
20
  FileUtils.mkdir output_path
21
21
  end
22
- JSON.load FastlaneCore::CommandExecutor.execute(command: "xcrun xcresulttool export --path #{xcresult_path} --output-path #{output_path}/#{file_name} --id #{id} --type file")
22
+ JSON.load FastlaneCore::CommandExecutor.execute(command: "xcrun xcresulttool export --path #{xcresult_path} --output-path \"#{output_path}/#{file_name}\" --id #{id} --type file")
23
+ end
24
+
25
+ def self.save_screenshot_mapping(map_hash, output_path)
26
+ File.open("#{output_path}/map.json", 'w') do |f|
27
+ f << map_hash.to_json
28
+ end
23
29
  end
24
30
 
25
31
  def self.save_device_details_to_file(output_path, device_destination)
@@ -63,23 +69,23 @@ module Fastlane
63
69
  end
64
70
 
65
71
  def self.junit_testcase_start(suite, testcase)
66
- print "<testcase name=#{testcase[:name].encode xml: :attr} classname=#{suite[:name].encode xml: :attr} time='#{testcase[:time]}'"
72
+ print "<testcase name=#{testcase[:name].encode xml: :attr} classname=#{suite[:name].encode xml: :attr} time='#{testcase[:time]}'>"
67
73
  end
68
74
 
69
- def self.junit_testcase_success
70
- puts '/>'
75
+ def self.junit_testcase_end
76
+ puts '</testcase>'
71
77
  end
72
78
 
73
79
  def self.junit_testcase_failure(testcase)
74
- puts '>'
75
80
  puts "<failure message=#{testcase[:failure].encode xml: :attr}>#{testcase[:failure_location].encode xml: :text}</failure>"
76
- puts '</testcase>'
77
81
  end
78
82
 
79
83
  def self.junit_testcase_error(testcase)
80
- puts '>'
81
84
  puts "<error>#{testcase[:error].encode xml: :text}</error>"
82
- puts '</testcase>'
85
+ end
86
+
87
+ def self.junit_testcase_performance(testcase)
88
+ puts "<system-out>#{testcase[:performance]}</system-out>"
83
89
  end
84
90
 
85
91
  def self.generate_junit(junit_folder, test_suites)
@@ -98,9 +104,11 @@ module Fastlane
98
104
  Helper::XcresultToJunitHelper.junit_testcase_failure(testcase)
99
105
  elsif testcase[:error]
100
106
  Helper::XcresultToJunitHelper.junit_testcase_error(testcase)
101
- else
102
- Helper::XcresultToJunitHelper.junit_testcase_success()
103
107
  end
108
+ if testcase[:performance]
109
+ Helper::XcresultToJunitHelper.junit_testcase_performance(testcase)
110
+ end
111
+ Helper::XcresultToJunitHelper.junit_testcase_end
104
112
  end
105
113
  end
106
114
  Helper::XcresultToJunitHelper.junit_suite_end()
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module XcresultToJunit
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-xcresult_to_junit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Birdsall
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-18 00:00:00.000000000 Z
11
+ date: 2020-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: 2.134.0
139
- description:
139
+ description:
140
140
  email: shane.birdsall@fiserv.com
141
141
  executables: []
142
142
  extensions: []
@@ -152,7 +152,7 @@ homepage: https://github.com/zanizrules/fastlane-plugin-xcresult_to_junit
152
152
  licenses:
153
153
  - MIT
154
154
  metadata: {}
155
- post_install_message:
155
+ post_install_message:
156
156
  rdoc_options: []
157
157
  require_paths:
158
158
  - lib
@@ -167,8 +167,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  requirements: []
170
- rubygems_version: 3.0.2
171
- signing_key:
170
+ rubyforge_project:
171
+ rubygems_version: 2.7.6.2
172
+ signing_key:
172
173
  specification_version: 4
173
174
  summary: Produces junit xml files from Xcode 11+ xcresult files
174
175
  test_files: []