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

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

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

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


CANoe HTTP環(huán)境配置
CANoe中HTTP功能配置如下:進(jìn)入Options→Extensions→Connectivity設(shè)置項(xiàng),然后勾選HTTP Active選項(xiàng)框。注意:此配置需要連接CANoe license才可選擇。

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

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

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

圖4 CANoe和Python接口交互示例
步驟:
(1)Python服務(wù)端:使用requests/FaskAPI搭建HTTP Server,并封裝了/RunCase和/getExecuteResult接口;
(2)CANoe啟動(dòng)測(cè)試:調(diào)用RunCase和getExecuteResult方法發(fā)送JSON請(qǐng)求體;
(3)服務(wù)端響應(yīng):執(zhí)行封裝好的接口,返回狀態(tài)碼和結(jié)果數(shù)據(jù);
(4)結(jié)果解析:CANoe Trace窗口自動(dòng)解析HTTP的報(bào)文(如圖5)。

圖5 CANoe Trace窗口HTTP數(shù)據(jù)解析
2.場(chǎng)景二:TBox自動(dòng)化測(cè)試
真實(shí)服務(wù)器一般會(huì)有一個(gè)網(wǎng)頁顯示界面,方便測(cè)試人員手動(dòng)的查詢后臺(tái)云端數(shù)據(jù)。所以可通過HTTP的接口訪問后臺(tái)數(shù)據(jù),很好應(yīng)用于TBox的自動(dòng)化測(cè)試。

圖6 基于HTTP接口的TBox自動(dòng)化測(cè)試
步驟:
(1)TBox與云端通信:通過4G/5G網(wǎng)絡(luò)上傳車輛狀態(tài)、接收遠(yuǎn)控請(qǐng)求等指令;
(2)CANoe仿真客戶端:模擬手動(dòng)下發(fā)網(wǎng)頁請(qǐng)求,讀取網(wǎng)頁數(shù)據(jù)等操作;
(3)自動(dòng)化校驗(yàn):結(jié)合CAPL腳本自動(dòng)判斷云端數(shù)據(jù)(如整車電源模式、門鎖狀態(tài)、車速等)是否符合預(yù)期;

總結(jié)
本方案利用HTTP協(xié)議的技術(shù)特點(diǎn),可以解決CANoe與其他軟件或者服務(wù)器直接交互問題。結(jié)合第三方測(cè)試工具封裝的測(cè)試接口,實(shí)現(xiàn) HTTP 通信的自動(dòng)化測(cè)試,提高測(cè)試效率和覆蓋度。通過本文方案,可顯著提升CANoe在車聯(lián)網(wǎng)、座艙自動(dòng)化等場(chǎng)景下的測(cè)試效率,構(gòu)建高可靠性的分布式測(cè)試系統(tǒng)。北匯信息是一家專注于汽車電子測(cè)試領(lǐng)域的企業(yè),對(duì)網(wǎng)絡(luò)測(cè)試有著豐富經(jīng)驗(yàn),并可提供相關(guān)培訓(xùn)、咨詢服務(wù)以及測(cè)試解決方案,幫助汽車制造商和零部件供應(yīng)商確保其車載網(wǎng)絡(luò)的可靠性和安全性。如果需要具體的測(cè)試服務(wù)或了解更多信息,歡迎大家來聯(lián)系我們。注:文中部分圖片來源于Vector。
-
仿真
+關(guān)注
關(guān)注
52文章
4257瀏覽量
135647 -
HTTP
+關(guān)注
關(guān)注
0文章
525瀏覽量
32729 -
CANoe
+關(guān)注
關(guān)注
4文章
74瀏覽量
9172
發(fā)布評(píng)論請(qǐng)先 登錄



CANoe:網(wǎng)絡(luò)和ECU開發(fā)、測(cè)試和分析的專業(yè)工具
基于CANoe總線系統(tǒng)實(shí)時(shí)調(diào)度的仿真
CANOE教程之CANOE的使用手冊(cè)免費(fèi)下載

【工程師小貼士】二維三維傳感器開發(fā)大不同?細(xì)小電阻值測(cè)量法大公開
【工程師小貼士】二維三維傳感器開發(fā)大不同?低阻值四線測(cè)量法大公開
職場(chǎng)人減壓秘籍大公開
華為的網(wǎng)絡(luò)AI領(lǐng)域10大公開數(shù)據(jù)集是哪些
2022微信公開課小程序AR應(yīng)用大公開!

淺談CANoe實(shí)現(xiàn)SOA仿真測(cè)試

CANoe進(jìn)階功能:Multi CANoe

CANoe集成解決方案

評(píng)論