170 lines
6.4 KiB
Python
170 lines
6.4 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright 2019 - The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import argparse
|
|
import json
|
|
|
|
|
|
def read_acts_results(acts_summary_filename):
|
|
"""Opens the ACTS results file and returns the pass/fail/unknown counters.
|
|
|
|
Args:
|
|
acts_summary_filename: The ACTS results file name.
|
|
|
|
Returns:
|
|
master_results_data: A list of all the test results, including the
|
|
result of each test.
|
|
master_results_pass: A list of all pass test results.
|
|
master_results_fail: A list of all fail test results.
|
|
master_results_unknown: A list of all unknown test results.
|
|
pass_counter: A counter of how many tests pass.
|
|
fail_counter: A counter of how many tests fail.
|
|
unknown_counter: A counter of how many tests are unknown.
|
|
"""
|
|
with open(acts_summary_filename) as json_file:
|
|
data = json.load(json_file)
|
|
|
|
master_results_data = [['Test', 'Result']]
|
|
master_results_pass = [['Test', 'Result']]
|
|
master_results_fail = [['Test', 'Result']]
|
|
master_results_unknown = [['Test', 'Result']]
|
|
pass_counter = 0
|
|
fail_counter = 0
|
|
unknown_counter = 0
|
|
|
|
for result in data['Results']:
|
|
results_data = []
|
|
results_pass = []
|
|
results_fail = []
|
|
results_unknown = []
|
|
if result['Result'] == 'PASS':
|
|
results_pass.append(result['Test Name'])
|
|
results_pass.append(result['Result'])
|
|
master_results_pass.append(results_pass)
|
|
pass_counter += 1
|
|
if result['Result'] == 'FAIL':
|
|
results_fail.append(result['Test Name'])
|
|
results_fail.append(result['Result'])
|
|
master_results_fail.append(results_fail)
|
|
fail_counter += 1
|
|
if result['Result'] == 'UNKNOWN':
|
|
results_unknown.append(result['Test Name'])
|
|
results_unknown.append(result['Result'])
|
|
master_results_unknown.append(results_unknown)
|
|
unknown_counter += 1
|
|
results_data.append(result['Test Name'])
|
|
results_data.append(result['Result'])
|
|
master_results_data.append(results_data)
|
|
return (master_results_data,
|
|
master_results_pass,
|
|
master_results_fail,
|
|
master_results_unknown,
|
|
pass_counter,
|
|
fail_counter,
|
|
unknown_counter)
|
|
|
|
|
|
def print_acts_summary(master_results_data,
|
|
master_results_pass,
|
|
master_results_fail,
|
|
master_results_unknown,
|
|
pass_counter,
|
|
fail_counter,
|
|
unknown_counter,
|
|
split_results=False,
|
|
):
|
|
"""Prints the ACTS test results as either all of the tests together, or
|
|
split into pass, fail, and unknown.
|
|
|
|
Args:
|
|
master_results_data: A list of all the test results, including the
|
|
result of each test.
|
|
master_results_pass: A list of all pass test results.
|
|
master_results_fail: A list of all fail test results.
|
|
master_results_unknown: A list of all unknown test results.
|
|
pass_counter: A counter of how many tests pass.
|
|
fail_counter: A counter of how many tests fail.
|
|
unknown_counter: A counter of how many tests are unknown.
|
|
split_results: Whether to split the results into pass/fail/unknown or
|
|
display the results in the order the tests were run.
|
|
"""
|
|
widths = [max(map(len, col)) for col in zip(*master_results_data)]
|
|
if not split_results:
|
|
for row in master_results_data:
|
|
print(' '.join((val.ljust(width) for val, width in zip(row,
|
|
widths))))
|
|
print('')
|
|
print('Pass: %s '
|
|
'Fail: %s '
|
|
'Unknown: %s '
|
|
'Total: %s' % (pass_counter,
|
|
fail_counter,
|
|
unknown_counter,
|
|
pass_counter+fail_counter+unknown_counter))
|
|
else:
|
|
print('')
|
|
for row in master_results_pass:
|
|
print(' '.join((val.ljust(width) for val, width in zip(row,
|
|
widths))))
|
|
print('Pass: %s' % pass_counter)
|
|
|
|
print('')
|
|
for row in master_results_fail:
|
|
print(' '.join((val.ljust(width) for val, width in zip(row,
|
|
widths))))
|
|
print('Fail: %s' % fail_counter)
|
|
if unknown_counter is not 0:
|
|
print('')
|
|
for row in master_results_unknown:
|
|
print(' '.join((val.ljust(width)
|
|
for val, width in zip(row, widths))))
|
|
print('Unknown: %s' % unknown_counter)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-f',
|
|
'--results_file',
|
|
help='ACTS results file')
|
|
parser.add_argument('--split_results',
|
|
help='separate passing and failing results',
|
|
action='store_true')
|
|
|
|
args = parser.parse_args()
|
|
if not args.results_file:
|
|
parser.error('Use --results_file or -f to specify the ACTS '
|
|
'results file you want to parse.')
|
|
|
|
(master_results_data,
|
|
master_results_pass,
|
|
master_results_fail,
|
|
master_results_unknown,
|
|
pass_counter,
|
|
fail_counter,
|
|
unknown_counter) = read_acts_results(args.results_file)
|
|
print_acts_summary(master_results_data,
|
|
master_results_pass,
|
|
master_results_fail,
|
|
master_results_unknown,
|
|
pass_counter,
|
|
fail_counter,
|
|
unknown_counter,
|
|
split_results=args.split_results)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|