新能源汽车自动化测试(一)

车载自动化介绍:

 

世界现在是越来越智能化了,为了提升效率和节约时间,就得不断学习和提升。所以来聊聊如何用Python调用canoe来实现车载自动化测试


车载自动化应用:

 首先是安装win32库

  1. 打开cmd
  2. pip install pypiwin32
  3. 为了节约时间可以使用国内镜像  pip -i http://mirrors.aliyun.com/pypi/simple/ pypiwin32

再来聊聊为什么要用win32的库

     windows系统上的软件,基于COM标准,开发各种组件Component,这些组件提供各种接口,其他组件通过接口使用它们,
组件需要经过注册才能被发现和使用注册后的组件作为服务端(COM Server),其他想要调用组件接口的组件作为客户端(COM Client)
CANoe在安装完成后已经windows系统中注册了COM组件

小案例测试代码

import os
import time
import sys
from win32com.client import *   #引入win32库
from win32com.client.connect import  *  #引入win32库
class CANoe:
    def __init__(self):
        self.application = None
        self.application = Dispatch("CANoe.Application")  # 实例化canoe,获得一个canoe进程对象,如果想再得到一个,用DispatchEx
        self.application.Configuration.Modified = False  # 启动时设置不可更改
        self.ver = self.application.Version  # 获得canoe的版本信息
        self.Running = self.application.Masurement.Running  # Measurement里面最常用的就是running,判断canoe是否在running  # 提取出版本号,类似于14.2.43(SP2)
        print('Loaded CANoe version',
              self.ver.major, '.',
              self.ver.minor, '.',
              self.ver.Build, '...')

        # 打开canoe的cfg文件

    def Open_cfg(self, cfgname):
        if self.application != None:
            self.application.open(cfgname)
            print("Opening: " + cfgname)
        else:
            raise RuntimeError("CANoe Application is missing,unable to open cfg")

    def OpenTestSetup(self, testsetup):
        self.TestSetup = self.application.Configuration.TestSetup
        path = os.path.join(self.ConfigPath, testsetup)
        testenv = self.TestSetup.TestEnvironments.Add(path)
        testenv = CastTo(testenv, "TestEnvironment")
        self.TestModules = []
        self.TraverseTestItem(testenv, lambda tm: self.TestModules.append(CanoeTestModule(tm)))


        # 关闭canoe的cfg文件

    def Close_cfg(self):
        if self.application != None:
            self.application.Quit(self)
            self.application = None

            # 运行canoe工程

    def Start(self):
        if not self.Running:
            self.application.Masurement.Start()

            # 停止canoe工程

    def Stop(self):
        if self.Running:
            self.application.Masurement.Stop()

            # 拿到Signal value

    def Get_SigVal(self, chanel_num, msg_name, sig_name, bus_type="CAN"):
        if (self.application != None):
            result = self.application.GetBus(bus_type).GetSignal(chanel_num, msg_name, sig_name)
            val = result.Value
            return val
        else:
            raise RuntimeError("CANoe is not Open, unable to get signal value")

            # 设置Signal value

    def Set_SigVal(self, chanel_num, msg_name, sig_name, bus_type, setValue):
        if (self.application != None):
            result = self.application.GetBus(bus_type).GetSignal(chanel_num, msg_name, sig_name)
            result.Value = setValue
        else:
            raise RuntimeError("CANoe is not Open, unable to set signal value")

            # 得到系统变量System value

    def Get_Sysvar(self, ns_name, sysvar_name):
        if (self.application != None):
            SysCAN = self.application.System.Namespaces
            sys_namespace = SysCAN(ns_name)
            sys_value = sys_namespace.Variables(sysvar_name)
            return sys_value.Value
        else:
            raise RuntimeError("CANoe is not Open, unable to get system value")

            # 设置环境变量System value

    def Set_Sysvar(self, ns_name, sysvar_name, var):
        if (self.application != None):
            SysCAN = self.application.System.Namespaces
            sys_namespace = SysCAN(ns_name)
            sys_value = sys_namespace.Variables(sysvar_name)
            sys_value.Value = var
        else:
            raise RuntimeError("CANoe is not Open, unable to set system value")


class CanoeTestModule:
    def __init__(self, tm):
        self.tm = tm
        self.Events = DispatchWithEvents(tm, CanoeTestEvents)
        self.Name = tm.Name
        self.IsDone = lambda: self.Events.stopped
        self.Enabled = tm.Enabled

    def Start(self):
        if self.tm.Enabled:
            self.tm.Start()
            self.Events.WaitForStart()


class CanoeTestEvents:
    def __init__(self):
        self.started = False
        self.stopped = False
        self.WaitForStart = lambda: self.started
        self.WaitForStop = lambda: self.stopped

    def OnStart(self):
        self.started = True
        self.stopped = False
        print("<", self.Name, " started >")

    def OnStop(self, reason):
        self.started = False
        self.stopped = True
        print("<", self.Name, " stopped >")


app = CANoe()  # 定义canoe为app
app.Open_cfg('J:\EasyTest\Easy\Easy.cfg')  # 定义要打开的canoe的cfg文件
time.sleep(5)  # 等待了5s
app.Close_cfg()

【资源说明】 基于python+django的新能源电动汽车使用体验大数据分析系统源码+演示视频+报告论文.zip 第章 绪论 1 1.1 研究背景 1 1.2 研究目标与意义 1 1.2.1 研究目标 1 1.2.2 研究意义 1 1.3 论文组织结构 2 1.4 本章小结 2 第二章 相关技术研究以及开发工具 3 2.1 Pyhon语言介绍 3 2.2 Django框架介绍 3 2.3 PyCharm工具介绍 3 2.4 爬虫技术介绍 3 2.4.1 网络爬虫概念 4 2.4.2 聚焦网络爬虫原理及其过程 4 2.5 Sqlite数据库介绍 5 2.6 本章小结 5 第三章 系统分析 6 3.1 管理员需求分析 6 3.2 系统用例分析 6 3.3 数据流图 7 3.4 数据字典 8 3.5 本章小结 9 第四章 系统设计与实现 10 4.1 系统总体框架设计 10 4.2 总体结构设计 11 4.3 数据库详细设计 12 4.3.1 数据库概念模型设计 12 4.3.2 数据库逻辑设计 14 4.4 登录功能设计与实现 16 4.5 新能源电动汽车数据爬取功能 17 4.5.1 数据采集总览 17 4.5.2 网络爬虫headers设置功能实现 17 4.5.3 新能源电动汽车信息爬取功能实现 17 4.6 新能源电动汽车数据清洗功能 18 4.6.1 数据清洗总览 18 4.6.2 数据清洗结果 19 4.7 新能源电动汽车数据存储功能实现 20 4.8 新能源电动汽车用户体验数据分析 21 4.8.1 数据分析总览 21 4.8.2 新能源电动汽车信息查询功能设计与实现 22 4.7.3 纯电续航里程与价格分析功能设计与实现 23 4.7.4 续航里程和最低价格分析功能设计与实现 24 4.7.5 续航里程和最高价格分析功能设计与实现 25 4.7.6 电动汽车补贴排行分析功能设计与实现 26 4.7.7 各个价格区间车型数量分析功能设计与实现 26 4.7.8 纯电续航里程车型数量分析功能设计与实现 27 4.8 本章小结 28 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
<think>好的,用户想了解车载系统自动化测试的工具、框架和方法。首先需要整理已有的引用资料,看看里面提到的内容。引用1提到了FOne AutoTest-X,用于汽车中控和仪表的测试。引用2和4讨论了UI自动化测试的框架演变,从Java+UIAutomator到Python+Appium。引用3提到了款嵌入式系统自动化测试工具,虽然具体名称没提,但可以推荐类似的工具。引用5则涉及使用Python和Pytest进行DoIP诊断测试。 接下来要组织这些信息,按照工具、框架、方法分类。工具方面,FOne AutoTest-X和可能的嵌入式工具需要介绍。框架方面,Appium和Pytest是关键。方法部分需要涵盖UI测试、协议测试(如DoIP)、兼容性测试等。还要注意引用对应的参考文献,确保每个点都有依据。另外,用户可能对实际应用和步骤感兴趣,所以需要分点说明,保持结构清晰。最后生成相关问题,引导用户深入探讨。</think>### 车载系统自动化测试技术详解 #### 、核心工具与框架 1. **FOne AutoTest-X** 针对车载HMI(中控IVI、仪表)的自动化测试工具,支持图形化操作与脚本定制,可覆盖触控交互、多媒体功能等场景[^1]。 **特点**:无需代码开发,集成测试用例管理与执行报告生成。 2. **Appium框架** 当前主流的车载中控UI自动化测试框架,基于Python语言,支持跨平台(Android/Linux/QNX等系统)的控件识别与操作[^2][^4]。 ```python # 示例:使用Appium控制车载屏幕滑动 from appium import webdriver desired_caps = {'platformName': 'Android', 'deviceName': 'IVI'} driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.swipe(start_x=500, start_y=1000, end_x=500, end_y=200, duration=800) ``` 3. **Pytest+DoIP组合** 用于车载诊断协议(如UDS on DoIP)的自动化测试,结合Python脚本实现诊断指令发送与响应验证[^5]。 **典型流程**: - 建立车辆以太网连接 - 发送诊断请求(如$0x10$会话控制) - 断言ECU响应数据是否符合预期 #### 二、关键测试方法 1. **UI自动化测试** - **控件遍历**:通过XPath/ID定位中控屏幕元素(如按钮、菜单) - **多分辨率适配**:模拟不同屏幕尺寸下的布局兼容性[^4] - **性能监测**:记录界面响应时间与帧率(如启动导航地图耗时) 2. **协议级测试** - **CAN/LIN总线测试**:使用Vector CANoe等工具模拟总线信号 - **诊断协议覆盖**:针对ISO 14229标准设计测试用例 - **OTA升级验证**:自动化回滚与版本校验流程 3. **硬件在环(HIL)测试** 通过工控机模拟车辆传感器信号(如车速脉冲、温度输入),验证车载系统在极限工况下的稳定性[^3]。 #### 三、实施步骤与注意事项 1. **环境搭建** - 使用车载测试工装(如电源模拟器、信号发生器) - 配置ADB/SSH连接车机系统 2. **用例设计原则** - 优先级:先核心功能(如仪表报警提示),后扩展功能 - 数据驱动:参数化测试输入(如不同温度下的空调控制) - 异常注入:模拟网络中断、电压波动等异常场景 3. **持续集成** 将自动化测试接入Jenkins/GitLab CI,实现版本发布前自动回归测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值