91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Python訪問CANoe COM接口實(shí)踐

北匯信息POLELINK ? 2022-07-27 16:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CANoe提供的COM接口使得外部腳本能夠訪問或控制CANoe軟件,從而實(shí)現(xiàn)自動化測試任務(wù),而易用且具有豐富生態(tài)的Python無疑是一個很好的選擇。本文將介紹CANoe COM基本構(gòu)成、常用COM對象以及Python腳本調(diào)用CANoe COM的方法,在此之前,先介紹一些基本概念。

CANoe COM Server & Python pywin32

COM全稱Component Object Model,是微軟為Windows平臺軟件提出的、實(shí)現(xiàn)軟件之間互操作的標(biāo)準(zhǔn)。它不會規(guī)定軟件的具體實(shí)現(xiàn),而是聲明一種對象模型,使得滿足這種模型的對象之間能交互,這些對象通常被稱為組件(Component)。組件會實(shí)現(xiàn)特定的功能,而這些功能以特定的方式提供——即接口(Interface),其他組件通過接口使用它們。另外,組件需要經(jīng)過注冊(Registry),才能被其他軟件發(fā)現(xiàn)和使用。注冊后的組件向其他軟件提供服務(wù),因此組件將作為服務(wù)端(COM Server),其他想要使用服務(wù)的作為客戶端(COM Client)。

在安裝完成CANoe軟件后,CANoe已經(jīng)在Windows組件服務(wù)管理器中注冊了CANoe COM Server,如果需要重新注冊,可以在安裝目錄下(默認(rèn)為C:\Program Files\Vector CANoe 14)的Exec64文件夾中找到RegisterComponents.exe,運(yùn)行即手動注冊。

Python pywin32 package,它提供了許多Python擴(kuò)展以調(diào)用Windows API,其中就包括COM組件,由于Python腳本將使用CANoe COM提供的服務(wù),因此Python腳本將作為COM Client,在pywin32包中就對應(yīng)win32com.client模塊,所以后續(xù)的Python腳本都要導(dǎo)入win32com.client模塊。

了解以上的概念后,下面就看看本文的主要內(nèi)容。

pYYBAGLg7OiAX3hXAAChV76gGck623.png

COM Object Hierarchy

在CANoe中,各個功能模塊按照一定的層級組織在一起構(gòu)成整個CANoe軟件。與這些功能模塊直接相關(guān)的COM組件同樣也是按照相應(yīng)的層級組織的,這就形成了COM Object Hierarchy:

poYBAGLg8J2AKnA5AADbEoPKEKo004.png

如上圖所示,圖的最左側(cè)是Application對象,是訪問其他對象的入口;通過它可以訪問Configuration對象,而通過Configuration對象才能訪問CommunicationSetup對象;要想設(shè)置CommunicationSetup,就需要按照Application->Configuration->CommunicationSetup從左向右的層級順序,找到相應(yīng)的屬性或是方法,從而實(shí)現(xiàn)設(shè)置。

Type Library

了解COM Object Hierarchy能幫助快速找到所需功能,但是不能知道實(shí)現(xiàn)所需功能對象的繼承關(guān)系,為此還需要了解CANoe Type Library。在CANoe軟件安裝目錄下(默認(rèn)為C:\Program Files\Vector CANoe 14)的Exec32\COMdev目錄中包含了注冊COM所用的類型庫,如下圖所示CANoe.h頭文件:

poYBAGLg7R6ACw1WAADTuWhPk9w203.png

在CANoe.h頭文件中包含所有CANoe COM對象的接口定義,比如ITestConfiguration接口:

pYYBAGLg7SiAU0cjAALZLJAolMk380.png

而如果想要設(shè)置TestConfigurationSettings對象,從COM Object Hierarchy得知需要從TestConfiguration對象訪問:

poYBAGLg8LSAfeNaAABtffi7y-Q175.png

但是在Type Library中Configuration對象有多個ITestConfiguration接口,比如:

poYBAGLg8MCAbRGJAAH6itW-pwM972.png

可以看到,ITestConfiguration2繼承自ITestConfiguration,在它的基礎(chǔ)上又?jǐn)U充了許多方法,比如獲取TestConfigurationSettings對象的方法get_Settings就在其中。

也就是說,要通過實(shí)現(xiàn)了ITestConfiguration2接口的TestConfiguration對象的get_Settings方法,才能獲得TestConfigurationSettings對象。

為此,通過win32com.client模塊中的CastTo方法,能將TestConfiguration轉(zhuǎn)換成基于ITestConfiguration2接口的對象。

COM Object

COM Object Hierarchy中有許多COM對象,短時間內(nèi)掌握所有COM對象是不現(xiàn)實(shí)的,下面僅針對常用的、與自動化測試緊密相關(guān)的COM對象做介紹。

Application

使用Python控制CANoe,首先要獲取關(guān)聯(lián)整個CANoe進(jìn)程的COM對象,也就是Application對象。通過Dispatch方法就可以獲得關(guān)聯(lián)到當(dāng)前CANoe進(jìn)程的COM對象,如果當(dāng)前并沒有CANoe進(jìn)程,則會啟動一個CANoe進(jìn)程;而如果想要另外獲得一個CANoe進(jìn)程,則可以使用DispatchEx方法。

下面是獲取Application對象的代碼示例:

poYBAGLg7WGAEQHSAACF_vWOyQ4383.png

在以上示例中,CANoe各部分功能封裝在CANoe類中,在CANoe類初始化時,把獲得的Application對象保存在CANoe類的App成員中,這樣在CANoe類的其他方法中,就可以通過使用App成員來訪問Application對象。

有了Application對象,才能訪問CANoe工程的各個功能模塊,比如打開CANoe工程:

poYBAGLg7WuAXl-AAABdhdMnZog652.png

而在open_canoe_config方法中,使用Application對象的Open方法打開特定的CANoe工程,具體Application對象的接口定義(這里僅展示IApplication的部分方法,其他方法以及后續(xù)擴(kuò)展的方法并未展示)如下:

pYYBAGLg8NmAcLVDAAOjr83HxcE392.png

Measurement

要想控制CANoe啟動測量,就需要獲取Measurement對象,對于上面獲得的Application對象,使用self.App.Measurement獲得。

在Measurement對象的接口定義中,可以看到Start方法,使用Measurement.Start()就能啟動CANoe測量。

pYYBAGLg8O-Aet5KAAJaMzIXbCM760.png

下面是啟動CANoe測量的代碼示例:

poYBAGLg7aCAA2g9AABJHk5zdhA132.png

System Variables

系統(tǒng)變量作為CANoe中重要的部分,要想獲取任意系統(tǒng)變量的值,就要獲取對應(yīng)系統(tǒng)變量的對象。

pYYBAGLg7bWAA1CnAAAdIla0OOg379.png

從COM Object Hierarchy中可以看到,系統(tǒng)變量Variable對象是按照Application->System->Namespaces->Namespace->Variables->Variable順序訪問的。

其中Namespaces和Variables分別表示Namespace和Variable對象的集合,因此可以使用Namespace名稱(Variable名稱)作為索引,從Namespaces(Variables)中獲得相應(yīng)的Namespace(Variable)對象。

pYYBAGLg8QaABmkeAAI3s_TWAow842.png

pYYBAGLg8RiAPlT-AAJR-CZ3Rjs323.png

另外,在Variable對象的接口定義中,可以看到get_Value和put_Value方法,而Python將這兩種方法轉(zhuǎn)變成了Value屬性,也就是說可以直接對Variable.Value取值或賦值。

pYYBAGLg8SiAOdh8AAF_k7D6tg0115.png

下面是獲得系統(tǒng)變量值的代碼示例:

pYYBAGLg7eOAO5qmAADfvW0SyQo840.png

在以上示例中,添加了簡單的異常處理可以暫且不看,僅考察if分支中的語句。首先,使用self.App.System.Namespaces獲得Namespaces對象,將其保存在system_namespaces變量中;然后使用剛保存的變量,以ns_name作為索引獲得Namespace對象并保存在sys_namespace變量中;再通過sysvar_name索引獲得Variable對象sys_variable,最后返回sys_variable.Value屬性值。

Test Configuration & Test Unit

pYYBAGLg7fmAL1JKAAAaklYqEvA671.png

與自動化測試(這里僅介紹Test Configuration配置,即與vTESTstudio軟件聯(lián)合使用的自動化測試)直接相關(guān)的就是Test Configuration以及Test Unit,前者對應(yīng)整個測試執(zhí)行的設(shè)置,后者包含具體執(zhí)行的測試用例。在COM Object Hierarchy中可以看到,它們的層級構(gòu)成為Application->Configuration->TestConfigurations->TestConfiguration->TestUnits->TestUnit:

poYBAGLg7hGAfnVjAABRhyYSQEc178.png

其中,TestConfigurations與TestUnits跟前文類似,表示TestConfiguration和TestUnit的集合,同樣可以通過索引訪問。除了可以使用相應(yīng)TestConfiguration(TestUnit)名稱作為索引以外,還能使用數(shù)字索引,但是切記索引起始為1。對于僅有一個TestConfiguration的情況,僅需要TestConfigurations(1)來獲得唯一的TestConfiguration對象。

當(dāng)CANoe工程中還沒有TestConfiguration或者TestUnit時,就需要先添加。查看它們的接口定義:

pYYBAGLg7laAd20kAAJKb06Gq-k508.png

pYYBAGLg7muAZZ1eAAE6RU1_1DQ140.png

可以看到Add方法能添加相應(yīng)的對象,對于TestConfigurations.Add()不需要其他參數(shù),即可添加并獲得新的TestConfiguration對象;而TestUnits.Add()需要提供所要添加的TestUnit的絕對路徑,同樣可以獲得對應(yīng)的TestUnit對象。另外值得注意的是,TestUnits的Add方法是在ITestUnits2接口上擴(kuò)展的,所以要通過前文所述的CastTo方法將TestUnits(默認(rèn)為基于ITestUnits接口)轉(zhuǎn)換成基于ITestUnits2的對象。

下面請看加載測試配置的代碼示例:

pYYBAGLg7o6AECd5AACSwL0vycw577.png

在以上示例中,首先通過TestConfigurations.Add()方法新添加一個TestConfiguration對象,并把它保存為類成員self.test_config;之后使用CastTo方法將新添加的TestConfiguration中的TestUnits對象轉(zhuǎn)換成基于ITestUnits2接口的TestUnits對象(默認(rèn)為ITestUnits接口);最后使用轉(zhuǎn)換后的TestUnits對象的Add方法,添加test_unit_path路徑下的測試單元(.vtuexe文件)。

加載測試配置后,還需要啟動測試執(zhí)行,查看ITestConfiguration接口定義,可以發(fā)現(xiàn)Start方法:

poYBAGLg7qqAdIOvAAMOlRk15uw039.png

下面是執(zhí)行測試的代碼示例(這里使用了之前保存的類成員self.test_config):

poYBAGLg7rWAN2_6AABJR5xLQF0460.png

執(zhí)行完測試后,需要獲得測試結(jié)果,可以通過CANoe軟件為Test Configuration創(chuàng)建的系統(tǒng)變量VerdictSummary查看:

pYYBAGLg7r6ADYyfAACDw1OmFww375.png

下面是獲得測試結(jié)果的代碼示例:

pYYBAGLg7siAKChyAABd-KrA_vM375.png

這里get_test_result方法有一個帶有默認(rèn)值的參數(shù)test_config_name表示實(shí)際執(zhí)行測試的TestConfiguration名稱,它的默認(rèn)值是Test_Configuration_1,如果沒有修改過就不需要提供參數(shù),否則需要提供;get_test_result返回保存在VerdictSummary中的測試結(jié)果,其數(shù)據(jù)類型是整型,需要在接口定義中查詢具體數(shù)值對應(yīng)的結(jié)果:

poYBAGLg7tSAagUcAAEDGX2Fl1o530.png

Test demo

聯(lián)合使用上述COM對象就能夠?qū)崿F(xiàn)自動化測試,下面展示完整的代碼示例:

pYYBAGLg7uCAaV6mAALQg54cWjk045.png

基于Canoe類,就可以通過實(shí)例化Canoe類,調(diào)用實(shí)例對象的方法來實(shí)現(xiàn)自動化測試,下面是簡單的代碼示例:

pYYBAGLg7uuAXjnJAADb4zITdKE658.png

首先,實(shí)例化Canoe類,將實(shí)例化后的對象保存在canoe變量中;之后定義了canoePrj變量表示CANoe工程的絕對路徑,然后使用open_canoe_config方法打開此工程;接著定義testPrj變量表示測試單元可執(zhí)行文件的絕對路徑,使用load_test_config方法加載測試單元;然后使用start_canoe方法啟動CANoe測量,等待2s后,使用run_test_config方法執(zhí)行測試,等待10s后測試停止;最后打印通過get_test_result方法獲得的測試結(jié)果。

這里使用了Vector CANoe 14自帶的PythonBasicEmpty.cfg demo工程作為測試工程,下面是關(guān)于此demo的介紹文檔:

pYYBAGLg7veARhCqAAC7T15Sypk188.png

這個demo中有更豐富的COM對象的應(yīng)用、更完善的信息提示,比如對測試啟動、停止等事件的控制,對CANoe運(yùn)行狀態(tài)的打印,在此不再贅述。

最后,運(yùn)行以上腳本后,可以獲得自動化測試結(jié)果,對照前文的VerdictState,可以確定測試通過:

poYBAGLg7v-AYYHkAAAK7g6l-W8747.png

pYYBAGLg7xKAX6qaAACN66v6raU589.png

總結(jié)

本文介紹了使用Python訪問CANoe COM以實(shí)現(xiàn)自動化測試的基本方法,通過幾個常用的COM對象及方法,構(gòu)建了簡單的自動化測試示例工程。對于更復(fù)雜的工程,同樣可以根據(jù)基本方法,靈活運(yùn)用COM以滿足測試需求。進(jìn)一步,可以將CANoe COM封裝成Python庫,利用可復(fù)用性高效地完成針對不同需求的自動化測試。

CANoe是德國Vector公司出的一款總線開發(fā)環(huán)境,是網(wǎng)絡(luò)和ECU開發(fā)、測試和分析的專業(yè)工具,支持從需求分析到系統(tǒng)實(shí)現(xiàn)的整個系統(tǒng)開發(fā)過程;其豐富的功能和配置選項被OEM和供應(yīng)商的網(wǎng)絡(luò)設(shè)計工程師、開發(fā)工程師和測試工程師所廣泛使用。

北匯信息作為Vector中國的合作伙伴,不僅提供相應(yīng)的工具和技術(shù)支持服務(wù)及培訓(xùn),還針對不同的應(yīng)用提供相應(yīng)的解決方案,助力中國客戶的研發(fā)效率提升。

注:本文部分圖片來自Vector。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4877

    瀏覽量

    90071
  • CANoe
    +關(guān)注

    關(guān)注

    4

    文章

    85

    瀏覽量

    9777
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    CANoe性能問題的處理方法

    用戶在使用CANoe配置時遇到性能問題(如系統(tǒng)響應(yīng)慢或配置執(zhí)行不順),希望自行采取措施改善情況。性能問題因系統(tǒng)和配置的多樣性而復(fù)雜,通常沒有單一解決方案,可能源于系統(tǒng)資源不足、配置復(fù)雜度過高,或兩者結(jié)合。
    的頭像 發(fā)表于 03-02 14:03 ?97次閱讀
    <b class='flag-5'>CANoe</b>性能問題的處理方法

    Python運(yùn)行本地Web服務(wù)并實(shí)現(xiàn)遠(yuǎn)程訪問

    本文介紹使用Python搭建本地Web服務(wù)并結(jié)合 ZeroNews 實(shí)現(xiàn)公網(wǎng)訪問。
    的頭像 發(fā)表于 02-06 11:39 ?160次閱讀
    <b class='flag-5'>Python</b>運(yùn)行本地Web服務(wù)并實(shí)現(xiàn)遠(yuǎn)程<b class='flag-5'>訪問</b>

    調(diào)用野莓平臺商品詳情API接口實(shí)踐

    方式、請求參數(shù)、響應(yīng)數(shù)據(jù)結(jié)構(gòu)、錯誤處理以及最佳實(shí)踐建議。 1. 接口概述 野莓平臺商品詳情API接口主要用于查詢單個商品的詳細(xì)信息。它是一個 RESTful風(fēng)格 的接口,通常使用 HT
    的頭像 發(fā)表于 02-04 16:42 ?532次閱讀
    調(diào)用野莓平臺商品詳情API<b class='flag-5'>接口實(shí)踐</b>

    CANoe.Diva典型使用問題五則

    一、Diva工程導(dǎo)入CANoe報錯問題現(xiàn)象:解決方案:請使用管理員權(quán)限運(yùn)行一下CANoe安裝包之下的圖中*.exe文件:(可能在Exec32中)(運(yùn)行時CANoe關(guān)閉):二、CANoe
    的頭像 發(fā)表于 11-27 09:51 ?2113次閱讀
    <b class='flag-5'>CANoe</b>.Diva典型使用問題五則

    1688平臺關(guān)鍵字搜索商品API接口技術(shù)實(shí)踐指南

    一、接口調(diào)用流程 認(rèn)證授權(quán) 需先通過開放平臺申請App Key和App Secret,獲取access_token: # Python示例 import requests auth_url
    的頭像 發(fā)表于 11-11 14:22 ?561次閱讀
    1688平臺關(guān)鍵字搜索商品API<b class='flag-5'>接口</b>技術(shù)<b class='flag-5'>實(shí)踐</b>指南

    淘寶平臺獲取店鋪商品列表API接口實(shí)現(xiàn)詳解

    ? 在電商數(shù)據(jù)分析、店鋪管理工具開發(fā)或競品監(jiān)控等場景下,通過API接口獲取淘寶店鋪的商品列表數(shù)據(jù)是一項常見且重要的需求。本文將介紹如何通過淘寶開放平臺的API接口實(shí)現(xiàn)這一功能。 一、 接口選擇與認(rèn)證
    的頭像 發(fā)表于 11-06 15:22 ?436次閱讀
    淘寶平臺獲取店鋪商品列表API<b class='flag-5'>接口實(shí)</b>現(xiàn)詳解

    商品自動上架/下架接口實(shí)現(xiàn)指南

    如何設(shè)計并實(shí)現(xiàn)一個高效的自動上架/下架接口,涵蓋原理、接口設(shè)計、代碼實(shí)現(xiàn)和優(yōu)化建議。本文假設(shè)使用Python和Flask框架作為示例,但原理可應(yīng)用于其他語言。 1. 需求背景與核心原理 自動上架/下架功能主要用于響應(yīng)特定事件:
    的頭像 發(fā)表于 10-11 15:30 ?553次閱讀
    商品自動上架/下架<b class='flag-5'>接口實(shí)</b>現(xiàn)指南

    孔夫子舊書網(wǎng)開放平臺接口實(shí)戰(zhàn):古籍圖書檢索與商鋪數(shù)據(jù)集成

    本文詳解孔夫子舊書網(wǎng)古籍?dāng)?shù)據(jù)接口的實(shí)戰(zhàn)調(diào)用,涵蓋認(rèn)證簽名、古籍檢索、商鋪集成與特色數(shù)據(jù)處理四大場景,提供可復(fù)用的Python代碼及避坑指南,助力學(xué)術(shù)研究、舊書商管理與古籍?dāng)?shù)字化落地。
    的頭像 發(fā)表于 09-23 13:59 ?700次閱讀

    termux如何搭建python游戲

    Pygame),確保已安裝`clang`編譯器:`apt install -y clang` 3. 權(quán)限問題:若需訪問手機(jī)文件,安裝`termux-setup-storage`并授權(quán)存儲訪問權(quán)限。 通過以上步驟,即可在Termux中搭建完整的
    發(fā)表于 08-29 07:06

    爆肝整理!CANoe選型不再糾結(jié),3分鐘快速上手!#CANoe

    CANoe
    北匯信息POLELINK
    發(fā)布于 :2025年07月30日 16:36:44

    產(chǎn)品添加與上架API接口設(shè)計指南

    ? 在現(xiàn)代電商或庫存管理系統(tǒng)中,產(chǎn)品添加與上架是關(guān)鍵流程。通過API接口實(shí)現(xiàn)自動化操作,能顯著提升效率。本文將分步解析如何設(shè)計和使用“產(chǎn)品添加”與“產(chǎn)品上架”API接口,確保結(jié)構(gòu)清晰、安全可靠。我們
    的頭像 發(fā)表于 07-24 14:45 ?680次閱讀
    產(chǎn)品添加與上架API<b class='flag-5'>接口</b>設(shè)計指南

    CANoe中ADAS功能集介紹

    )。AFS作為CANoe基礎(chǔ)功能的一部分,不需要購買額外的Option即可使用。同時,CANoe本身的強(qiáng)大功能和開放接口使得結(jié)合總線通信,集成第三方工具,實(shí)現(xiàn)SI
    的頭像 發(fā)表于 07-10 14:55 ?1312次閱讀
    <b class='flag-5'>CANoe</b>中ADAS功能集介紹

    基于FPGA的DVP接口實(shí)現(xiàn)

    DVP接口(Digital Video Port)是一種用于數(shù)字視頻傳輸?shù)牟⑿?b class='flag-5'>接口,常見于嵌入式系統(tǒng)和圖像傳感器中。DVP直接傳輸數(shù)字視頻信號,減少模數(shù)轉(zhuǎn)換需求,適合中低速視頻傳輸。數(shù)據(jù)線:通常為8
    的頭像 發(fā)表于 06-04 09:18 ?2080次閱讀
    基于FPGA的DVP<b class='flag-5'>接口實(shí)</b>現(xiàn)

    CANoe產(chǎn)品體系19版本新功能(下)

    NET 8.0現(xiàn)已支持測試腳本、應(yīng)用模型和仿真節(jié)點(diǎn)的開發(fā),支持C# 12,可使用async/await進(jìn)行等待,本機(jī)編譯實(shí)現(xiàn)快速加載,改進(jìn)應(yīng)用層對象的API實(shí)現(xiàn)處理復(fù)雜數(shù)據(jù)類型,并支持運(yùn)行在Linux版本CANoe SE中。
    的頭像 發(fā)表于 05-29 14:05 ?2487次閱讀
    <b class='flag-5'>CANoe</b>產(chǎn)品體系19版本新功能(下)

    python入門圣經(jīng)-高清電子書(建議下載)

    和Pygal 等強(qiáng)大的Python 庫和工具介紹,以及列表、字典、if 語句、類、文件與異常、代碼測試等內(nèi)容; 第二部分將理論付諸實(shí)踐,講解如何開發(fā)三個項目,包括簡單的Python 2D 游戲開發(fā)如何利用數(shù)據(jù)
    發(fā)表于 04-10 16:53