作者 |archer
小編 | 不吃豬頭肉

背景
在汽車電子系統測試中,CANoe作為主流的仿真測試工具,常需與云端服務器、第三方軟件或物聯網設備進行交互。隨著CANoe與外部軟件、服務器或設備交互越來越多,直接使用Socket進行通信往往不能滿足使用需求,依托于CANoe 的連接功能集(Connectivity Feature Set),以及Distributed Object(DO)功能,可以仿真HTTP節點,實現設備與服務器等之間的通信,保證數據處理的可靠性和便捷性。本文詳細解析如何利用CANoe搭建HTTP測試環境,并提供典型應用場景示例。

HTTP通信模型HTTP全稱為HyperText Transfer Protocol(超文本傳輸協議),用于客戶端和服務器之間的通信,傳輸文本、圖片、視頻等資源。HTTP是在應用層上的協議,基于TCP/IP通信協議來傳輸數據。HTTP協議為無狀態協議,即服務器不保存客戶端的歷史請求信息,它的請求響應模型為客戶端發起請求 → 服務端返回響應。

圖1 HTTP通信模型
HTTP 的請求-響應模型通常由以下幾個步驟組成:
建立連接:客戶端與服務器之間建立連接。在傳統的 HTTP 中,這是基于 TCP/IP 協議的。最近的 HTTP/2 和 HTTP/3 則使用了更先進的傳輸層協議,例如基于 TCP 的二進制協議(HTTP/2)或基于 UDP 的 QUIC 協議(HTTP/3)。
發送請求:客戶端向服務器發送請求,請求中包含要訪問的資源的 URL、請求方法(GET、POST、PUT、DELETE 等)、請求頭(例如,Accept、User-Agent)以及可選的請求體(對于 POST 或 PUT 請求)。
處理請求:服務器接收到請求后,根據請求中的信息找到相應的資源,執行相應的處理操作。這可能涉及從數據庫中檢索數據、生成動態內容或者簡單地返回靜態文件。
發送響應:服務器將處理后的結果封裝在響應中,并將其發送回客戶端。響應包含狀態碼(用于指示請求的成功或失敗)、響應頭(例如,Content-Type、Content-Length)以及可選的響應體(例如,HTML 頁面、圖像數據)。
關閉連接:在完成請求-響應周期后,客戶端和服務器之間的連接可以被關閉,除非使用了持久連接(如 HTTP/1.1 中的 keep-alive)。
HTTP常用的方法:


CANoe HTTP環境配置
CANoe中HTTP功能配置如下:進入Options→Extensions→Connectivity設置項,然后勾選HTTP Active選項框。注意:此配置需要連接CANoe license才可選擇。

圖2 CANoe HTTP功能配置
在使用HTTP進行數據交互之前,需要創建HTTP的vCDL數據庫文件,定義相關的IP、端口和方法,以及payload的數據結構。
創建vCDL數據庫流程
在Communicating Setup窗口中單擊“Open vCDL Editor”;參考Vector的help文檔,根據vCDL的語法(類C#),創建HTTP的接口、對象和數據;根據HTTP的屬性值(communication setup中Objects 窗口),定義HTTP的屬性值;在communication setup窗口中,選擇import Data Source導入創建好的vCDL文件;

圖3 HTTP vCDL數據庫開發界面
如圖3所示,HTTP vCDL數據庫部分參數說明如下:
[HTTPBinding::Host="http://127.0.0.1:9091"]:該行定義了第三方軟件的服務器地址與端口號,將接口方法的HTTP請求發送到該地址。[interface IClient5]:定義了一個接口名稱為IClient5。[HTTPBinding::Method=POST]:該行代碼是指HTTP的請求方法為POST,這里需注意,HTTP常用的請求方法還有GET,GET方法用于從服務器獲取資源,POST 方法用于向服務器提交數據,通常會導致服務器狀態的改變,在測試的過程中,通常情況下使用CANoe進行測試,然后再由CANoe去調用第三方軟件運行,所以在這里使用POST方法。[HTTPBinding::path="getExecuteResult"]:該行代碼定義了HTTP的綁定路徑,在這個例子中,路徑被設置為"getExecuteResult"。這意味著當客戶端想要調用這個服務方法時,它需要在HTTP請求的URL中包含這個路徑。完整URL為 http://127.0.0.1:9091/getExecuteResult。[Binding="SerializationService"]:綁定名為 SerializationService 的服務,用于處理數據序列化。[Serialization="JSON"]:這部分指定了序列化和反序列化應該使用的具體格式。JSON是一種輕量級的數據交換格式,易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript的一個子集,但是JSON是獨立于語言的,很多編程語言都支持JSON格式。[SerializationService::Method=Serialize]:指定序列化服務使用的方法名為Serialize。consumed method Datatypes::Result_Response GetExecuteResult(gInput_Testend Input):該行定義了一個由客戶端調用名為getExecuteResult的方法,形參類型為gInput_getExecuteResult(該形參類型為用戶自定義)。方法的返回值為Datatypes::Result_Response類型。

使用場景介紹通過上面的配置,即完成了一個HTTP Client節點的仿真。要完成雙向通信,還需要一個Server節點。下面以python程序仿真的Server和后臺服務器的網頁顯示界面為例,舉例說明通信過程:1.場景一:CANoe與Python服務端交互

圖4 CANoe和Python接口交互示例
步驟:
(1)Python服務端:使用requests/FaskAPI搭建HTTP Server,并封裝了/RunCase和/getExecuteResult接口;
(2)CANoe啟動測試:調用RunCase和getExecuteResult方法發送JSON請求體;
(3)服務端響應:執行封裝好的接口,返回狀態碼和結果數據;
(4)結果解析:CANoe Trace窗口自動解析HTTP的報文(如圖5)。

圖5 CANoe Trace窗口HTTP數據解析
2.場景二:TBox自動化測試
真實服務器一般會有一個網頁顯示界面,方便測試人員手動的查詢后臺云端數據。所以可通過HTTP的接口訪問后臺數據,很好應用于TBox的自動化測試。

圖6 基于HTTP接口的TBox自動化測試
步驟:
(1)TBox與云端通信:通過4G/5G網絡上傳車輛狀態、接收遠控請求等指令;
(2)CANoe仿真客戶端:模擬手動下發網頁請求,讀取網頁數據等操作;
(3)自動化校驗:結合CAPL腳本自動判斷云端數據(如整車電源模式、門鎖狀態、車速等)是否符合預期;

總結
本方案利用HTTP協議的技術特點,可以解決CANoe與其他軟件或者服務器直接交互問題。結合第三方測試工具封裝的測試接口,實現 HTTP 通信的自動化測試,提高測試效率和覆蓋度。通過本文方案,可顯著提升CANoe在車聯網、座艙自動化等場景下的測試效率,構建高可靠性的分布式測試系統。北匯信息是一家專注于汽車電子測試領域的企業,對網絡測試有著豐富經驗,并可提供相關培訓、咨詢服務以及測試解決方案,幫助汽車制造商和零部件供應商確保其車載網絡的可靠性和安全性。如果需要具體的測試服務或了解更多信息,歡迎大家來聯系我們。注:文中部分圖片來源于Vector。
-
仿真
+關注
關注
54文章
4482瀏覽量
138251 -
HTTP
+關注
關注
0文章
537瀏覽量
35348 -
CANoe
+關注
關注
4文章
85瀏覽量
9768
發布評論請先 登錄
CANoe:網絡和ECU開發、測試和分析的專業工具
職場人減壓秘籍大公開
華為的網絡AI領域10大公開數據集是哪些
2022微信公開課小程序AR應用大公開!
淺談CANoe實現SOA仿真測試
如何實現3秒定位?GNSS模組實戰指南大公開
效率翻倍!量產燒錄工具使用技巧大公開~
CANoe仿真HTTP節點的實戰秘籍大公開
評論