Мне нужно реализовать класс синтаксического анализатора для файлов XML в python, и мне нужно сделать его производным классом из следующего (неполного) класса.
class AbstractLogsParser(object):
# Different test statuses
TEST_RES_PASS = 0
TEST_RES_FAIL = 1
TEST_RES_SKIP = 2
def __init__(self, logs_extension):
"""
Base class constructor.
@param logs_extension Extension of log files to parse.
"""
self._logs_ext = '.'+logs_extension
def get_result_by_type(self, result_type):
"""
Returns number of passed, failed or skipped tests.
@param result_type Type of results to return.
"""
return -1
def generate_detailed_report(self):
"""
Generates detailed report on each test suite.
"""
raise Exception("generate_detailed_report is not implemented")
def process_logs(self, folder):
"""
Parses all log files with target extension in the specified folder. @param folder Folder to look up for log files.
"""
raise Exception("process_logs is not implemented")
Производный синтаксический анализатор XML будет иметьметоды для различных метрик и статистики, но кажется, что фактический анализ должен происходить в базовом классе.Первоначально я хотел использовать ElementTree , чтобы сделать это, но я не понимаю, как кодировать методы в базовом классе для размещения унаследованного класса XML-анализатора, который мне нужно построить.
Конструктор AbstractLogsParser принимает расширение файла в качестве аргумента, поэтому метод process_logs
должен иметь возможность анализировать файлы разных форматов.Было бы разумно использовать регулярные выражения для разбора файлов журнала построчно, предполагая, что ключевые слова в файлах журнала всегда одинаковы?Я просто ищу несколько советов о том, как правильно реализовать реализацию.
Вот пример файла журнала XML, который должен обрабатывать анализатор.
<test_results test_suite="GAP_CONN_001">
<environment>LOCAL</environment>
<debug>Test suite start</debug>
<tc_result id="conn_bv_001" result="PASS">
<debug>Run 2 sequences</debug>
</tc_result>
<tc_result id="conn_bv_002" result="FAIL" />
<tc_result id="conn_bv_002" result="PASS" />
<tc_result id="conn_bv_004" result="SKIP">
<reason>No pass criteria</reason>
</tc_result>
</test_results>