最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Python編寫(xiě)測(cè)試腳本

 更新時(shí)間:2025年02月21日 15:42:13   作者:不知道是誰(shuí)2  
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)PyCAN和CANard庫(kù)實(shí)現(xiàn)編寫(xiě)測(cè)試腳本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 工具庫(kù)簡(jiǎn)介

1.1 python-can

定位:通用的 CAN 總線通信庫(kù),支持多種硬件接口(SocketCAN、PCAN、Kvaser 等)。

核心功能:

連接物理 CAN 設(shè)備或虛擬接口。

發(fā)送/接收 CAN 報(bào)文(標(biāo)準(zhǔn)幀、擴(kuò)展幀)。

支持 CAN FD(靈活數(shù)據(jù)速率)。

適用場(chǎng)景:快速搭建 CAN 通信原型,兼容性強(qiáng)。

1.2 canard(CAN 協(xié)議棧)

定位:專注于 UDS(ISO 14229) 和 J1939 等高層協(xié)議解析的庫(kù)。

核心功能:

解析 DBC 文件,自動(dòng)化生成信號(hào)值。

支持 UDS 診斷服務(wù)(如 0x22 讀數(shù)據(jù)、0x2E 寫(xiě)數(shù)據(jù))。

處理多幀傳輸(如 ISO-TP 協(xié)議)。

適用場(chǎng)景:需要與 ECU 進(jìn)行診斷交互的自動(dòng)化測(cè)試。

2. 環(huán)境準(zhǔn)備

2.1 安裝庫(kù)

# 安裝通用 CAN 庫(kù)
pip install python-can

# 安裝 canard(UDS 協(xié)議支持)
pip install canard

2.2 硬件準(zhǔn)備

物理設(shè)備:PCAN-USB、Kvaser、Vector 設(shè)備(需安裝對(duì)應(yīng)驅(qū)動(dòng))。

虛擬測(cè)試:使用 socketcan(Linux 虛擬 CAN 接口)或 CANoe 模擬總線。

3. 核心功能實(shí)現(xiàn)示例

3.1 使用 python-can 收發(fā) CAN 報(bào)文

import can

# 連接 CAN 接口(以 socketcan 為例)
bus = can.interface.Bus(channel='vcan0', bustype='socketcan')

# 發(fā)送單幀數(shù)據(jù)
msg = can.Message(
    arbitration_id=0x123,  # CAN ID
    data=[0x01, 0x02, 0x03, 0x04],
    is_extended_id=False    # 標(biāo)準(zhǔn)幀
)
bus.send(msg)

# 接收數(shù)據(jù)
for msg in bus:
    print(f"Received: ID={hex(msg.arbitration_id)}, Data={msg.data}")

# 關(guān)閉連接
bus.shutdown()

3.2 使用 canard 解析 DBC 文件

from canard import Canard
from canard.hw import socketcan

# 加載 DBC 文件
dbc = Canard()
dbc.load_dbc('vehicle.dbc')

# 創(chuàng)建虛擬 CAN 接口
dev = socketcan.SocketCanDev('vcan0')
dev.start()

# 解析接收到的報(bào)文
def on_message(msg):
    decoded = dbc.decode_message(msg.arbitration_id, msg.data)
    print(f"信號(hào)值: {decoded}")

dev.add_listener(on_message)

3.3 實(shí)現(xiàn) UDS 診斷服務(wù)(基于 canard)

from canard.proto.uds import UdsClient

# 創(chuàng)建 UDS 客戶端
uds = UdsClient(transport=can.Bus(bustype='socketcan', channel='vcan0'))

# 發(fā)送診斷請(qǐng)求:讀取 ECU 序列號(hào)(服務(wù) 0x22,參數(shù) 0xF189)
response = uds.request([0x22, 0xF1, 0x89])
if response:
    print(f"ECU 序列號(hào): {bytes(response.data[2:]).decode()}")
else:
    print("請(qǐng)求超時(shí)")

4. 自動(dòng)化測(cè)試腳本設(shè)計(jì)

4.1 測(cè)試場(chǎng)景示例:車門(mén)狀態(tài)驗(yàn)證

def test_door_status():
    bus = can.interface.Bus(channel='vcan0', bustype='socketcan')
    
    # 發(fā)送車門(mén)控制命令(ID=0x200,數(shù)據(jù)=[0x01] 表示開(kāi)門(mén))
    bus.send(can.Message(arbitration_id=0x200, data=[0x01]))
    
    # 等待并驗(yàn)證車門(mén)狀態(tài)反饋(預(yù)期 ID=0x201,數(shù)據(jù)[0]=0x01)
    for msg in bus:
        if msg.arbitration_id == 0x201:
            assert msg.data[0] == 0x01, "車門(mén)未正確打開(kāi)"
            break
    bus.shutdown()

4.2 集成測(cè)試框架(如 pytest)

import pytest

???????@pytest.fixture
def can_bus():
    bus = can.interface.Bus(channel='vcan0', bustype='socketcan')
    yield bus
    bus.shutdown()

def test_engine_rpm(can_bus):
    # 發(fā)送轉(zhuǎn)速請(qǐng)求命令
    can_bus.send(can.Message(arbitration_id=0x700, data=[0x03]))
    
    # 驗(yàn)證響應(yīng)是否在合理范圍(如 800-5000 RPM)
    for msg in can_bus:
        if msg.arbitration_id == 0x701:
            rpm = int.from_bytes(msg.data[2:4], byteorder='big')
            assert 800 <= rpm <= 5000, "轉(zhuǎn)速異常"
            break

5. 高級(jí)應(yīng)用技巧

5.1 CAN FD 支持

# 使用 python-can 發(fā)送 CAN FD 報(bào)文
msg = can.Message(
    arbitration_id=0x123,
    data=[i % 256 for i in range(64)],  # 64 字節(jié)數(shù)據(jù)
    is_fd=True,
    bitrate_switch=True  # 啟用比特率切換
)
bus.send(msg)

5.2 與 HIL 系統(tǒng)集成

# 連接 Vector 硬件(需安裝 XL Driver)
bus = can.interface.Bus(
    bustype='vector',
    channel=1,
    app_name='Python_HIL_Test'
)

# 發(fā)送同步周期性報(bào)文
task = bus.send_periodic(msgs=[msg1, msg2], period=0.1)
task.stop()  # 停止發(fā)送

5.3 自動(dòng)化測(cè)試報(bào)告生成

# 使用 pytest-html 生成測(cè)試報(bào)告
pytest.main(["--html=report.html"])

6. 常見(jiàn)問(wèn)題與調(diào)試

6.1 硬件連接失敗

現(xiàn)象:CanError: Error sending message

解決:

檢查設(shè)備驅(qū)動(dòng)是否安裝(如 PCAN 需安裝 PCAN-Basic API)。

確認(rèn)通道權(quán)限(Linux 需 sudo ip link set vcan0 up)。

6.2 DBC 解析錯(cuò)誤

現(xiàn)象:KeyError: 'Unknown frame ID'

解決:確保 DBC 文件中包含目標(biāo) CAN ID 的定義。

6.3 多幀傳輸處理

# 使用 canard 處理 ISO-TP 多幀傳輸
from canard.proto.iso_tp import IsoTpTransport

tp = IsoTpTransport(can_bus, tx_id=0x7E0, rx_id=0x7E8)
data = tp.recv()  # 接收長(zhǎng)數(shù)據(jù)(自動(dòng)重組)

以上就是如何使用Python編寫(xiě)測(cè)試腳本的詳細(xì)內(nèi)容,更多關(guān)于Python測(cè)試腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • django queryset相加和篩選教程

    django queryset相加和篩選教程

    這篇文章主要介紹了django queryset相加和篩選教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • TensorFlow的reshape操作 tf.reshape的實(shí)現(xiàn)

    TensorFlow的reshape操作 tf.reshape的實(shí)現(xiàn)

    這篇文章主要介紹了TensorFlow的reshape操作 tf.reshape的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python中pygame安裝過(guò)程(超級(jí)詳細(xì))

    python中pygame安裝過(guò)程(超級(jí)詳細(xì))

    這篇文章主要介紹了python中pygame安裝過(guò)程(超級(jí)詳細(xì)),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 用TensorFlow實(shí)現(xiàn)戴明回歸算法的示例

    用TensorFlow實(shí)現(xiàn)戴明回歸算法的示例

    這篇文章主要介紹了用TensorFlow實(shí)現(xiàn)戴明回歸算法的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Pandas?時(shí)間序列分析中的resample函數(shù)

    Pandas?時(shí)間序列分析中的resample函數(shù)

    這篇文章主要介紹了Pandas?時(shí)間序列分析中的resample函數(shù),Pandas?中的resample函數(shù)用于各種頻率的轉(zhuǎn)換工作,下面我們就來(lái)看看其的參數(shù)、相關(guān)資料等,需要的小伙伴可以參考一下,希望給你帶來(lái)幫助
    2022-02-02
  • Python常見(jiàn)沙箱技術(shù)與沙箱逃逸避免方法詳解

    Python常見(jiàn)沙箱技術(shù)與沙箱逃逸避免方法詳解

    Python沙箱可以幫助你在安全的環(huán)境中運(yùn)行不受信任的代碼,本文將探討?Python?沙箱的概念、常見(jiàn)的沙箱技術(shù)以及如何避免沙箱逃逸,感興趣的可以了解下
    2024-01-01
  • Python深入淺出分析enum枚舉類

    Python深入淺出分析enum枚舉類

    在python中枚舉是一種類(Enum,IntEnum),存放在enum模塊中。枚舉類型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • python中pyenv-win安裝與使用教程

    python中pyenv-win安裝與使用教程

    pyenv-win是一個(gè)在Windows系統(tǒng)上管理Python版本的工具,本文主要介紹了python中pyenv-win安裝與使用教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Python自動(dòng)化辦公之Word轉(zhuǎn)PDF的實(shí)現(xiàn)

    Python自動(dòng)化辦公之Word轉(zhuǎn)PDF的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹一下如何在?windows、mac、linux?三種系統(tǒng)中都可以生成?PDF?的解決方案,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • python自動(dòng)化測(cè)試selenium核心技術(shù)等待條件教程

    python自動(dòng)化測(cè)試selenium核心技術(shù)等待條件教程

    這篇文章主要為大家介紹了python自動(dòng)化測(cè)試selenium核心技術(shù)等待條件教程的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11

最新評(píng)論

台湾省| 滁州市| 西丰县| 融水| 静宁县| 阿克苏市| 赤城县| 景泰县| 泽州县| 泾川县| 乐业县| 樟树市| 芦溪县| 仙桃市| 胶州市| 东阳市| 吉木乃县| 商城县| 桓台县| 望都县| 贺州市| 方山县| 波密县| 永兴县| 吉木萨尔县| 策勒县| 大冶市| 阿城市| 阿克陶县| 宁波市| 炉霍县| 青冈县| 荣昌县| 德惠市| 重庆市| 乌鲁木齐市| 宁化县| 桂阳县| 同心县| 尚义县| 温州市|