Newer
Older
"""
Tool entry point
"""
import sys
from bs4 import BeautifulSoup
from test_entry import TestEntry
from write_excel import ExcelWriter
"""
Parser taking a file name (of the XML output from robot),
and extracts relevant information, eventually creating a list
of TestEntry objects
"""
def __init__(self, input_file, output_file):
self.api = ""
self.output_file = output_file
self.robot_file_contents = ""
self.load_file(input_file)
"""
Load xml file
"""
with open(fname, "r", encoding="utf8") as robot_file:
self.robot_file_contents = robot_file.read()
print("Empty file {}".format(fname))
"""
Run parser, extracting all info to create the test entries
"""
soup = BeautifulSoup(self.robot_file_contents, "lxml")
# Suite information
suite = soup.find("suite")
path = suite["source"]
parts = path.split("\\")
# Extract info for test entries
self.api = parts[len(parts) - 2]
self.robot_file_contents = parts[len(parts) - 1]
# Tests
tests = soup.find_all("test")
for test in tests:
self.test_entries.append(self.create_test_entry(test))
# Write tests
excel_writer = ExcelWriter(self.output_file)
# Write chart
excel_writer.write_pie_chart()
# And finally, save the work book
def create_test_entry(self, xml_obj):
"""
Takes the xml entry corresponding to the test from the output file,
and returns a TestEntry object with the relevant information extracted.
"""
# retrieve ID and name
id_raw = xml_obj.find("doc", recursive=False).contents
match_group = re.search(r"Test ID: ([0-9\.]*)$", id_raw[0].string, re.MULTILINE)
test_id = match_group.group(1)
name = xml_obj["name"]
#retrieve status and error message (if FAIL)
status_obj = xml_obj.find("status", recursive=False)
cts = status_obj.contents
error_msg = cts[0] if len(cts) > 0 else ""
result = status_obj["status"]
return TestEntry(test_id, name, (result, error_msg), (self.api, self.robot_file_contents))
parser = argparse.ArgumentParser(description='Robot Test Reporter written in Python.\n'
'Produces an xlsx file from a robot XML '
'output file.\n'
'The command outputs to a new xlslx file if it '
'does not exist, or appends to an existing one.')
parser.add_argument('input_file', help='XML file generated by Robot')
parser.add_argument('-o', dest='output_file', default='testResults.xlsx',
help='output file name (default: testResults.xlsx)')
args = parser.parse_args()
TestOutputParser(args.input_file, args.output_file).run_parser()