PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建

硬件环境:CANoe、待测设备(包含UDS诊断模块)
在这里插入图片描述

2.python+PyCharm环境

pip install robotframework
pip install robotframework-ride
pip install openpyxl
pip install udsoncan
pip install python-can
pip install can-isotp

3.项目目录

在这里插入图片描述

在这里插入图片描述

4. udstest.py


import can
from udsoncan.connections import PythonIsoTpConnection
import os, udsoncan, isotp, sys, binascii
import openpyxl

class udstest(object):
    def __init__(self):
        udsoncan.setup_logging()  # udslog

    def get_xlsx(self, sheet):
        "获取指定Excel数据"
        excel = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'UDSTestcase.xlsx')  # 修改文件路径为.xlsx
        file = openpyxl.load_workbook(excel)
        list = []
        sheet = file[sheet]  # 获得指定sheet数据
        row_value1 = [cell.value for cell in sheet[1]]  # 获取第1行的标题
        nrows = sheet.max_row  # 获取当前sheet行数
        ncols = sheet.max_column  # 获取当前sheet列数
        for i in range(2, nrows + 1):  # 从第2行遍历当前sheet
            row = [cell.value for cell in sheet[i]]  # 获取行数据
            dict = {}  # 创建空字典
            for j in range(0, ncols):  # 遍历sheet列,组成字典
                if row_value1[j] == 'NO.':
                    dict[row_value1[j]] = int(row[j])
                else:
                    dict[row_value1[j]] = row[j]  # 从第一列开始,将每一列的数据与第1行的数据组成一个键值对,形成字典
            list.append(dict)  # 将字典添加list中
        return list
    def set_can(self, txid, rxid):
        """can总线相关配置"""
        if isinstance(txid, str) or isinstance(rxid, str):
            txid = eval(txid)
            rxid = eval(rxid)
        isotp_params = {
            'stmin': 5,  # 流控帧间隔时间,0-127ms 或 100-900ns 值从 0xF1-0xF9
            'blocksize': 0,  # 流控帧单包大小,0表示不限制
            'tx_padding': 0,  # 当 notNone表示用于填充发送的消息的字节。
            'rx_flowcontrol_timeout': 1000,  # 在停止接收和触发之前等待流控制帧的毫秒数
            'rx_consecutive_frame_timeout': 1000,  # 在停止接收和触发 a 之前等待连续帧的毫秒数
        }
        try:
            self.canbus = can.interface.Bus(
                bustype='vector',
                app_name='Test_Can',  # 根据实际情况修改
                channel=0,  # 根据实际情况修改
                bitrate=500000  # 根据实际情况修改
            )  # CAN总线初始化
            self.tp_addr = isotp.Address(isotp.AddressingMode.Normal_11bits, txid=txid, rxid=rxid)  # 网络层寻址方法
            tp_stack = isotp.CanStack(bus=self.canbus, address=self.tp_addr, params=isotp_params)  # 网络/传输层(IsoTP 协议)
            self.conn = PythonIsoTpConnection(tp_stack)  # 应用层和传输层之间建立连接

        except:
            print(sys.exc_info()[1])
        else:
            print('CAN配置成功')

    def uds_request_respond(self, request_command):
        """发送uds请求和接收uds响应"""
        if not isinstance(request_command, str):  # 判断request_command数据类型
            request_command = str(int(request_command))
        requestPdu = binascii.a2b_hex(request_command.replace(' ', ''))  # 处理request_command
        if not self.conn.is_open():
            self.conn.open()  # 打开连接
        try:
            self.conn.specific_send(requestPdu)  # 发送uds请求
        except:
            print("发送请求失败")
        else:
            print('UDS发送请求:%s' % request_command)

        try:
            respPdu = self.conn.specific_wait_frame(timeout=3)  # 接收uds响应
        except:
            print('响应数据失败')
        else:
            res = respPdu.hex().upper()
            respond = ''
            for i in range(len(res)):
                if i % 2 == 0:
                    respond += res[i]
                else:
                    respond += res[i] + ' '
            print('UDS响应结果:%s' % respond)
            self.conn.close()  # 关闭连接
            self.canbus.shutdown()  # 关闭总线
            return respond.strip()

4. .robot

public.robot

*** Settings ***
Library           udstest.py  # 导入自定义库

*** Variables ***
${txid}           0x772   # 用于传输的CANID
${rxid}           0x77A    # 用于接收的CANID

*** Keywords ***
UDS_Test
    [Arguments]    ${test_data}
    set_can    ${txid}    ${rxid}    #CAN设置
    ${respond}    Uds Request Respond    ${test_data['request']}    #UDS请求响应
    Should Be Equal    ${test_data['expected']}    ${respond}    #断言

eg.$10.robot

*** Settings ***
Suite Setup       获取$10服务测试数据
Test Setup
Test Teardown
Resource          Public.robot

*** Test Cases ***
正响应-启动车载信息会话
    UDS_Test    ${test_data[0]}
    sleep    10

负响应-不支持请求服务子功能
    UDS_Test    ${test_data[1]}

负响应-请求报文数据长度不符合标准
    UDS_Test    ${test_data[2]}

*** Keywords ***
获取$10服务测试数据
    ${test_data}   Get Xlsx     $10
    Set Suite Variable    ${test_data}


5.导入的excel表格

在这里插入图片描述

6.结果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957432.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KUKA示教器仿真软件OfficeLite8.6.2,EthernetKRL3.1.3通信

一、准备软件。 1、vmware17.6.1 2、OfficeLite8.6.2 3、EthernetKRL3.1.3 4、KUKA Router 5、EthernetKRL_Server 通过网盘分享的文件:库卡相关软件 链接: https://pan.baidu.com/s/1NwvR3RVP0edLBeZnnnCYvw 提取码: smys 二、安装vmware17.6.1 1、找到下载…

保险行业专题|基于超融合实现 IT 基础设施现代化与国产化转型实践

更新内容 更新 SmartX 超融合在保险行业的覆盖范围、部署规模与应用情况。新增异地灾备,以及大数据平台、AI、云原生等数智化转型场景实践。更多超融合金融核心生产业务场景实践,欢迎阅读 3 册电子书(2024.11 更新版)。 【核心业…

玉米植物结构受乙烯生物合成基因 ZmACS7 的调控

摘要: 植物高度和叶片角度是玉米(Zea mays)植物结构的两个关键决定因素,与高种植密度下的抗倒伏性和冠层光合作用密切相关。这两个性状主要由几种植物激素调节。然而,乙烯在调节玉米植物结构中的机制,特别…

浅谈云端编辑器,分析其亮点与不足

浅谈云端编辑器,分析其亮点与不足 这个云端编辑器界面可以分为左侧题目筛选栏、中间题目描述与代码编辑区域、右侧AI提示功能三部分。以下是详细的分析: 1. 左侧题目筛选栏 层次结构清晰:左侧栏展示了一个层级结构,题目按主题分…

Zinc Finger锌指结构:

1,是一种蛋白质中的规律性结构,motif 是DNA结合motif(和DNA结合的部分里的规律性结构) 形状类似手指 2,不仅能结合DNA、RNA,还能结合蛋白质、脂质等 3,经典结构例如C2H2:也称为Cys…

安装wxFormBuilder

1. 网址:GitHub - wxFormBuilder/wxFormBuilder: A wxWidgets GUI Builder 2. 安装MSYS2 MSYS2可以在GitHub的内容中找到,这个版本是32位64位的 3. 在程序中打开MINGW64 shell 4. 在MSYS2 MINGW64 shell中输入 pacman -Syu pacman -S ${MINGW_PACKAGE…

leetcode 1620. 网络信号最好的坐标

题目如下 数据范围 示例 观察数据范围我们可以看到信号塔最多只有50座而x 与 y范围则是在0到50之间。 如果我们暴力枚举的话计算次数最多51 * 51 * 50时间复杂度即为O(n * n * M) 显然题目暗示我们使用枚举法通过代码 class Solution { public:vect…

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中,我们经常需要从远程主机下载文件到本地,以便进行分析或备份。Ansible的fetch模块正是为了满足这一需求而设计的,它可以帮助我们轻松地从远程主机获取文件,并将其保存到本地指定的位置。在这篇文章中&#xf…

数据恢复常用方法(三)如何辨别固态硬盘故障类型

数据恢复首先需要辨别固态硬盘故障类型,只有先确认故障类型,才能进行下一步动作 如下是一种常见的场景,固态硬盘无法识别,接入电源与数据线,电脑的磁盘管理不显示任何信息。 第一步:确认硬件状态&#xff…

七.网络模型

最小(支撑)树问题 最小部分树求解: 破圈法:任取一圈,去掉圈中最长边,直到无圈; 加边法:取图G的n个孤立点{v1,v2,…, vn }作为一个支撑图,从最短…

Django学习笔记(项目默认文件)-02

Django学习笔记(项目默认文件)-02 一、项目默认文件介绍 1、项目的文件结构 django_demo-manage.py (项目的管理、启动、创建app、数据管理)-django_demo-__init__.py-asgi.py (接受网络请求)-settings.py (项目配置文件)-urls…

虚幻商城 Fab 免费资产自动化入库

文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3.纯python的实惠版)

前情: 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)-CSDN博客 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2.换掉付费的Event Hubs)-CSDN博客 python脚本实现 厉害的…

开关电源基础

文章目录 线性电源与开关电源选用 开关稳压器脉宽调制简化的降压开关电源 开关电源类型输出电压分拓扑分 控制器与稳压器效率与 V o u t V_{out} Vout​ 同步与非同步隔离与非隔离非隔离式拓扑结构隔离式拓扑结构 线性电源与开关电源 线性稳压器就是我们通常说的LDO: 传输元件…

【Java数据结构】排序

【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法:挖坑法&#xff…

20250118-读取并显示彩色图像以及提取彩色图像的 R、G、B 分量

读取并显示彩色图像以及提取彩色图像的 R、G、B 分量 import cv2 # 彩图 R、G、B 的提取 import numpy as np from PIL import Image from matplotlib import pyplot as plt1. 读取并显示彩色图像的三种方法: img_path "./data/yndx"1.1 使用 PIL 读取…

【总结盘点类】2024,一场关于海量数据治理以及合理建模的系列写作

目录 1.今年的创作路线 2.先说第一条线 2.1.由日志引出的海量文本数据存储和分析问题 2.2.监控以及监控的可视化 2.3.数据量级再往上走牵扯出了大数据 2.4.由大数据牵扯出的JAVA线程高级内容 3.第二条线,也是2025要继续的主线 1.今年的创作路线 今年的写作内…

SpringBoot整合ES及简单API使用

1、pom文件导入ES依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.2</version> </dependency>2、编写配置&#xff0c;给容器中注…

Ardupilot开源无人机之Geek SDK进展2024-2025

Ardupilot开源无人机之Geek SDK进展2024-2025 1. 源由2. 状态3. TODO3.1 【进行中】跟踪目标框3.2 【暂停】onnxruntime版本3.3 【完成】CUDA 11.8版本3.4 【完成】pytorch v2.5.1版本3.5 【未开始】Inference性能3.6 【未开始】特定目标集Training 4. Extra-Work4.1 【完成】C…

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统&#xff08;IDS&#xff09;是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备&#xff0c;它…