-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_runner.py
More file actions
66 lines (57 loc) · 2.08 KB
/
test_runner.py
File metadata and controls
66 lines (57 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import xml.etree.ElementTree as ET
import json
import sys
test_cases = []
with open('test_cases.json', 'r') as f:
test_cases = json.load(f)['tests']
tests_dict = dict()
for test in test_cases:
tests_dict[test['fullname']] = test
tree = ET.parse('artifacts/playmode-results.xml')
root = tree.getroot()
score = 0
max_score = 0
for suite in root.iter('test-suite'):
name = suite.attrib['fullname']
if name in tests_dict:
suite_result = suite.attrib['result']
tests_dict[name]['result'] = suite_result
tests_dict[name]['info'] = []
for case in suite.iter('test-case'):
tests_dict[name]['info'].append(case)
# Process in order of .json file
for test_case in test_cases:
test = tests_dict[test_case['fullname']]
max_score += test['points']
if 'result' not in test:
print(f'Expected test {test_case["fullname"]} but was not found in results.xml')
continue
result = test['result']
items = test['info']
test_points = test['points']
earned_points = 0
message = ''
name = test['fullname']
if result not in ['Passed', 'Failed']:
print(f'Unrecognized result type "{result}" for test "{name}"')
if result == 'Passed':
score += test_points
earned_points = test_points
print(f'{name}: {result} ({earned_points}/{test_points})')
for item in items:
output = item.find('output')
failure = item.find('failure')
if output is not None or failure is not None:
print("-------------")
print(f"{item.attrib['name']}{'' if failure is None else ' FAILED'}:")
if result == 'Failed':
if failure is not None:
message = failure.find('message').text
stack_trace = failure.find('stack-trace').text
print(f'Failure message:\n{message}')
print(f'Stack trace:\n{stack_trace}')
if output != None:
print(f'Test Output:\n{output.text}')
print(f'Total: {score}/{max_score}')
exit_code = 0 if score == max_score and score != 0 else 1
sys.exit(exit_code)