Запуск тестовых модулей в CANoe с использованием Python

Я разработал код автоматизации CANOE на основе Python, в котором я запускаю CANOE, открываю конфигурацию, загружаю спецификацию теста и запускаю ее.

Теперь я хочу дождаться завершения выполнения тестового модуля, чтобы принять к сведению Вердикт. Но не знаю, как это сделать. Любая помощь будет оценена.

"""Execute XML Test Cases without a pass verdict"""
from time import sleep
import win32com.client as win32
import configparser
import time
from pandas.core.computation.expressions import set_test_mode
import pythoncom


testComplete = False

class TestModuleEvents(object):
    def OnReportGenerated(self,Success, SourceFullName, GeneratedFullName):
        print("Report Generated")
        testComplete = True
    def OnStop(self, value):
        print("Test Module Stopped")
        testComplete = True

    def OnStart(self):
        print("Test Module Started")
        testComplete = True

class TestConfigurationEvents(object):
    def OnStart(self):
        print("Measurement Started")
        testComplete = False

    def OnStop(self):
        print("Measurement Stopped")
        testComplete = True

config = configparser.RawConfigParser()
config.read('usecase02_configuration.properties')
configurationPath = config.get('TESTCONFIGURATION', 'configurationpath')
testspec = config.get('TESTCONFIGURATION', 'testspecification')

CANoe = win32.DispatchEx("CANoe.Application")
CANoe.Open(configurationPath)

testSetup = CANoe.Configuration.TestSetup
testSetup.TestEnvironments.Add(testspec)
test_env = testSetup.TestEnvironments.Item('Test Environment')
test_env = win32.CastTo(test_env, "ITestEnvironment2")


print(report.FullName)

# Get the XML TestModule (type <TSTestModule>) in the test setup
test_module = test_env.TestModules.Item('Tester')
CANoe.Measurement.Start()
sleep(5)   # Sleep because measurement start is not instantaneous

win32.WithEvents(test_module, TestModuleEvents)
test_module.Start()

# sleep(60)

while test_module.Verdict==0:
    time.sleep(1)

# test_module.Stop()
print(test_module.Verdict)

person Malai    schedule 25.05.2020    source источник
comment
В чем именно твоя проблема? У вас уже есть код для запуска тестового модуля, а также код для ожидания завершения тестового модуля. Так в чем конкретно ваш вопрос?   -  person M. Spiller    schedule 26.05.2020
comment
Спасибо, что заглянули в код. Если вы посмотрите на цикл while while test_module.Verdict==0: time.sleep(1), я предположил, что вердикт по умолчанию будет равен 0, а при успешном или неудачном выполнении будет 1 или 2. Но пока он не ждал, посмотрите, как Вердикт по умолчанию равен 1. Затем я попытался изменить время, как показано ниже while not testComplete: time.sleep(1) Надеясь, что, когда запуск тестового модуля будет завершен, он вызовет onStop внутри TestModuleEvents и установит testCompleted = true. Но этого тоже не произошло. Нужна поддержка при вызове onStop и завершения while.   -  person Malai    schedule 28.05.2020


Ответы (1)


У вас все готово. Я думаю, что единственная проблема - это непонимание того, как глобальные переменные работают в python.

Вы объявляете testComplete в глобальной области видимости вашего файла Python. Внутри TestModuleEvents.OnStop вы объявляете другую переменную с именем testComplete. Этот экземпляр совершенно не связан с переменной в глобальной области видимости.

Измените свой OnStop-обработчик (и другие) на что-то вроде этого:

    def OnStop(self, value):
        global testComplete
        print("Test Module Stopped")
        testComplete = True

Это импортирует глобальную переменную в вашу область видимости и установит для нее значение True вместо создания новой.

После этого измените цикл while на:

while not testComplete:
    time.sleep(1)
person M. Spiller    schedule 28.05.2020