Подпроцессы не запускаются с тестом обработки ошибок Pytest - PullRequest
0 голосов
/ 18 февраля 2020

В настоящее время я преобразовываю свою установку unittest в pytest, все работает, но на определенных тестах я запускаю процесс командной строки, чтобы загрузить код в оборудование, которое я подключил через USB. этот процесс работает нормально с unittest, однако при использовании pytest или nose2 я получаю ответ

------------------------------------------------ Captured stderr call -------------------------------------------------
Error processing Test

это происходит только тогда, когда мой процесс начинает работать? Я не получаю сообщение об ошибке Я не уверен, почему один не выводится? Команда в порядке, так как она запускается на cmd, и unittest есть что-то, чего мне не хватает, чтобы заставить его работать с pytest?

Для справки, мой класс я запускаю

class LoadCode():

def __init__(self, comport):
    ''' Constructor
    '''

    self.filename = None   
    self.code_comport = comport
    self.code_loaded = False
    self.logger = logging.getLogger(__name__)

def set_code_filename(self, new_file_name):
    ''' Sets the filename parameter for loading the code
    '''
    if (self.filename != new_file_name):  
        self.filename = new_file_name
        self.logger.info("Setting code File to " + self.filename)
        self.code_loaded = False
    else:
        self.logger.info("Code File Name Is Already Set !")

def write_code(self):
    REBOOT_TIME = 50 #approximatly 50 seconds if enough for a reboot after loading boot and main   and enough time for 
    SUCCESSFUL_RETURNCODE = 0   # 0 is a successful return code for subprocess     

    if(self.filename != None and self.code_comport != None):
        #set up command line to run
        command = <<COMMAND>>   
        self.logger.info("Running: " + command)
        #run command line as subprocess (thread will wait for command line to finish)              
        load_code = subprocess.run(command)
        #successful returncode = 0 anything else means an error has occured during subprocess               
        subprocess.CompletedProcess(args=[command], returncode = SUCCESSFUL_RETURNCODE)
        if (load_code.returncode == SUCCESSFUL_RETURNCODE ):
            self.code_loaded = True
            self.logger.info(self.filename) 
            time.sleep(REBOOT_TIME)  #Allow reboot
    else:
        raise AssertionError("ERROR: No code File Set/No Comport Set")
    self.is_code_loaded()

def is_code_loaded(self):
    '''check the bool of code to ensure it has successfully ran
    '''
    if self.code_loaded == False:
        Print("Failed")
        raise AssertionError("Code Was Not Loaded ..")
    else:
        print("WORKED")

1 Ответ

0 голосов
/ 19 февраля 2020
subprocess.CompletedProcess(args=[command], returncode = SUCCESSFUL_RETURNCODE)

эта строка кода не нужна, так как она возвращается из subproccess.run (). спасибо @Masklinn за указание на это. подробности: https://python.readthedocs.io/en/latest/library/subprocess.html?highlight=CompletedProcess

Путь, который был сгенерирован, содержал пробелы в середине и не имел ни одного в начале, поэтому команда не выполнялась и была возвращена ошибка! теперь мой подпроцесс отлично работает с pytest и nose2! :)

...