Как регистрировать результаты как и когда доступно, не теряя его во время крейта sh? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть набор 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) каждый раз, когда программа ожидает все данные, необходимые для регистрации?

...