Canoe 自动化:测试模块的设置

问题描述 投票:0回答:2

我正在尝试自动化独木舟,在尝试在方法“load_testenvironment”中为测试模块创建对象时遇到一些错误。我指的是独木舟->帮助->技术参考->COM接口,但没有太多帮助。

任何人都可以告诉我我在这里做错了什么吗?

错误: 引发属性错误( AttributeError:“”对象没有属性“TestModules”

代码:

import time, os, msvcrt
from win32com.client import *
from win32com.client.connect import *

import win32com.client
import pythoncom

def DoEvents():
    pythoncom.PumpWaitingMessages()
    time.sleep(.1)


def DoEventsUntil(cond):
    while not cond():
        DoEvents()


class CanoeSync(object):
    """Wrapper class for CANoe Application object"""
    Started = False
    Stopped = False
    ConfigPath = ""
    CANOE_APP_NAME = "CANoe.Application"
    def __init__(self):
       # app = win32com.client.Dispatch(self.CANOE_APP_NAME)
        app = DispatchEx('CANoe.Application')
        app.Configuration.Modified = False
        ver = app.Version
        print('Loaded CANoe version ',
              ver.major, '.',
              ver.minor, '.',
              ver.Build, '...', sep='')
        self.App = app
        #self.Measurement = win32com.client.Dispatch(self.App.Measurement)
        self.Measurement  = self.App.Measurement

        self.Networks = None
        self.Devices = None
        self.Device = None
        self.Diagnostic = None

        self.Running = lambda: self.Measurement.Running
        #self.Networks = win32com.client.Dispatch(self.App.Networks)
        #self.network = None

        self.Testmodules = None
        self.environment_obj = dict()
        self.testmodule_obj = dict()

        self.WaitForStart = lambda: DoEventsUntil(lambda: CanoeSync.Started)
        self.WaitForStop = lambda: DoEventsUntil(lambda: CanoeSync.Stopped)
        WithEvents(self.App.Measurement, CanoeMeasurementEvents)

    def load_testenvironment(self):
        self.Testmodules =  self.App.Configuration.TestSetup.TestEnvironments.Item(1).TestModules

    def run_testenviroment(self,environment_name):
        pass


    def Load(self, cfgPath):
        # current dir must point to the script file
        cfg = os.path.join(os.curdir, cfgPath)
        cfg = os.path.abspath(cfg)
        print('Opening: ', cfg)
        self.ConfigPath = os.path.dirname(cfg)
        self.Configuration = self.App.Configuration
        self.App.Open(cfg)


    def Start(self):
        if not self.Running():
            self.Measurement.Start()
            self.WaitForStart()

    def Stop(self):
        if self.Running():
            self.Measurement.Stop()
            self.WaitForStop()



    def diagnostic_setup(self):
        self.Networks = self.App.Networks
        self.Devices = self.Networks.Item(1).Devices   #set only for one
        self.Device = self.Devices.Item(1)
        self.Diagnostic = self.Devices.Item(1).Diagnostic
        print(self.Device.Name)

    def tester_presentstatus(self):
        print(self.Diagnostic.TesterPresentStatus)


    def diag_request(self,request):
        diareq = self.Diagnostic.CreateRequest(request)
        diareq.Send()
        # wait until ECU response is pending
        while diareq.Pending:
            time.sleep(0.1)
        if diareq.Responses.Count == 0:
            return False
        else :
            response = list()
            print('count of resp:',diareq.Responses.Count)
            for num_of_resp in range(0, diareq.Responses.Count):
                resp = diareq.Responses(num_of_resp + 1)
                if resp.Positive :
                    for data in resp.Stream:
                        response.append(hex(data))
                else :
                    print(111,resp.ResponseCode)
            print(response)
            return response


    def diag_response(self):
        pass

class CanoeMeasurementEvents(object):
    """Handler for CANoe measurement events"""

    def OnStart(self):
        CanoeSync.Started = True
        CanoeSync.Stopped = False
        print("< measurement started >")

    def OnStop(self):
        CanoeSync.Started = False
        CanoeSync.Stopped = True
        print("< measurement stopped >")
python-3.x canoe
2个回答
0
投票

试试这个:

def load_testenvironment(self):
    testEnv = CastTo(self.App.Configuration.TestSetup.TestEnvironments.Item(1),"ITestEnvironment2")
    self.Testmodules = testEnv.TestModules

说明: 查看 COM dll (Vector.CANoe.Interop.dll),接口 ITestEnvironment 确实没有属性 TestModules。但是,接口 ITestEnvironment2 执行以下操作: enter image description here


-1
投票

com 接口有很多版本,最好的方法是用 Cast 来把接口强制转换到最新的,可以在canoe15\Exec32\COMdev\CANoe.h 中查看有哪些接口版本。

© www.soinside.com 2019 - 2024. All rights reserved.