У меня есть набор Python тестовых сценариев, который выполняет кейс, а затем записывает результат в файл журнала - каждый раз в конце теста. Проблема с этим подходом состоит в том, что если моя программа неожиданно падает, файл журнала не будет сгенерирован. Это образец моих тестовых скриптов
id = "mytest"
def scr1(control, log):
res = False
try:
log.opencase(id)
log_format = "result 1 {:s}; result 2 {:s};"
#sample step 1
log.log_output("step 1 output")
#calculate var1, var2
#sample step 2
log.log_output("step 2 output")
#calculate var3, var4
log_format = "Output 1 = {:s}; Output 2 = {:s};"
#Populate the results I need
result1 = log_format.format (var1, var2)
result2 = log_format.format(var3,var4)
log.log_final(result1)
log.log_final(result2)
#check if result1 = result2 - if yes, set res = True
except Exception as ex:
log.error("Ex"+ex)
res = False
finally:
if res:
print("PASS")
else:
print("FAIL")
log.log_output("Logging program output here")
log.close_case(res)
return res
Все мои скрипты в этом формате. Есть ли способ, без изменения сценариев, я могу добиться регистрации выходных данных, как только они станут доступны, и сохранить их в файле журнала, а не потерять их в случае сбоя программы?
Пример моей функции ведения журнала:
LOG_INFO = 'info'
LOG_OUTPUT = 'timestamp'
#Make an XML of type "output"
def log_output(self, txt):
if self.Echo:
print(txt)
elem = et.SubElement(self.testname, LOG_OUTPUT, {LOG_TIMESTAMP: self._get_timestamp()})
elem.txt = txt
self.linear_log(LOG_OUTPUT + txt)
def linear_log(self, msg):
if self.LinearLog:
lin = open(self.LinearLog, "a")
lin.write(self._get_timestamp() + msg)
lin.close()
#Make an XML element
def log_final(self, str):
if self.Echo:
print("Final" + text)
element = et.SubElement(self.testname,self._get_timestamp())
element.text = str
self.linear_log(text)
Когда я говорю cra sh - я имею в виду - аппаратный cra sh. Аппаратный сбой. Эти сценарии отправляют команды оборудованию (тестовой камере), и камера выполняет определенные операции. Но иногда некоторые модули в камере могут выходить из строя, поскольку это тестовое устройство. При таких обстоятельствах я заканчиваю сценарий нажатием любой красной кнопки (конец) на Pycharm, так как иногда сценарий не отвечает, если не получает ожидаемый ответ от камеры - и я не вижу ничего зарегистрированного в файле журнала поскольку это не было изящным выходом.
Сценарий выполняется на компьютере windows и сохраняет в нем журнал. Камера подключена через последовательный порт.
Проблема заключается в регистрации log.log_final (result1) и log.log_final (result2). Если происходит сбой оборудования до достижения этого шага, ie, если происходит сбой оборудования при вычислении var3 и var4, он не регистрирует log.log_final для result1 и result2, хотя доступны var1 и var2. Есть ли специфика c logi c, которую я могу применять для регистрации «доступных данных» (здесь var1 и var2) каждый раз, когда программа ожидает все данные, необходимые для регистрации?