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 openpyxlclass udstest(object):def __init__(self):udsoncan.setup_logging()  # udslogdef get_xlsx(self, sheet):"获取指定Excel数据"excel = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'UDSTestcase.xlsx')  # 修改文件路径为.xlsxfile = 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行遍历当前sheetrow = [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 listdef 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_commandif 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     $10Set Suite Variable    ${test_data}

5.导入的excel表格

在这里插入图片描述

6.结果

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis(19/134)

大致了解了一下工具类,自己手敲了一边,java的封装还是真的省去了很多麻烦,封装成一个工具类就可以不用写很多重复的步骤,一个工厂对应一个数据库一个environment就好了。 mybatis中调用sql中的delete占位符里面需要有字符&#xf…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)

本文验证基于请求头中传递token信息的认证方式,webapi项目的控制器类中新建如下函数,仅通过验证的客户端能调用,需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…

Linux:进程(三)

1. 进程创建补充 fork之后父子两个执行流分别执行,fork之后谁谁先执行由调度器来决定。 一般,父子代码共享。当父子不再写入时,数据也是共享的,但是当有一方要写入,就触发写时拷贝。 fork调用失败的原因 1. 系统中有…

一、vue智能Ai对话(高仿通义千问)普通版。

如需源码&#xff1a;请私信。 普通版视频地址&#xff1a;普通版视频 流式进阶版视频地址&#xff1a;流式进阶版视频 流式进阶版&#xff1a;流式进阶版源码 html结构和js方法&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta …

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

【winRAR】windows11右键直接打开winRAR

总览 目前能够完成的操作不能像 win10 那样全面&#xff0c;需要做一些取舍&#xff0c;这两种解决后的样子任选其一&#xff1a; 1.右键之后&#xff0c;直接显示 “解压到当前文件夹” 2.右键之后&#xff0c;直接出现 winRAR 的母菜单&#xff0c;在鼠标 hover 到上面的时…

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…

STM32 FreeRTOS 任务挂起和恢复---实验

实验目标 学会vTaskSuspend( )、vTaskResume( ) 任务挂起与恢复相关API函数使用&#xff1a; start_task:用来创建其他的三个任务。 task1&#xff1a;实现LED1每500ms闪烁一次。 task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键按下逻辑&#xff0c;KE…

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…

Python运算符

1、算术运算符 加 减— 乘* 除/ 整除// 取余% 幂运算** 优先级&#xff1a; 第1级&#xff1a;** 第2级&#xff1a;* &#xff0c; / &#xff0c; % &#xff0c;// 第3级&#xff1b; &#xff0c; - print("加", 1 4) print("减",8 - 19) p…

RTMP|RTSP播放器只解码视频关键帧功能探讨

技术背景 我们在做RTMP|RTSP直播播放器的时候&#xff0c;遇到过这样的技术诉求&#xff0c;在一些特定的应用场景中&#xff0c;可能只需要关键帧的信息&#xff0c;例如视频内容分析系统&#xff0c;可能只对关键帧进行分析&#xff0c;以提取特征、检测对象或场景变化。鉴于…

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…

【Node.js]

一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 &#xff0c;使用了一个事件驱动、非阻塞式I/O模型&#xff0c; 让JavaScript 运行在服务端的开发平台&#xff0c;它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 官网地…

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面&#xff0c;包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF&#xff08;高频&#xff09; 或 UHF&#xff08;超高频&#xff09; 波段的无线通信协议&#xff0c;主要用于军事通信系统中。为了…

iOS 网络请求: Alamofire 结合 ObjectMapper 实现自动解析

引言 在 iOS 开发中&#xff0c;网络请求是常见且致其重要的功能之一。从获取资料到上传数据&#xff0c;出色的网络请求框架能夠大大提升开发效率。 Alamofire 是一个极具人气的 Swift 网络请求框架&#xff0c;提供了便据的 API 以完成网络请求和响应处理。它支持多种请求类…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR&#xff0c;用来进行目标检测。 单卡训练语句&#xff08;正常运行&#xff09;&#xff1a; python main.py多卡训练语句&#xff1a; 需要通过torch.distributed.launch来启动&#xff0c;一般是单节点&#xff0c;其中CUDA_VISIBLE…

RV1126+FFMPEG推流项目(8)AENC音频编码模块

本节分享的是AENC音频编码模块&#xff0c;是负责在AI模块通道里面取出收集到的音频数据&#xff0c;进行编码。了解AENC模块之前&#xff0c;先来看一个数据结构“RV1126_AENC_CONFIG”&#xff0c;这个数据结构是自己封装的&#xff0c;里面有AENC通道号&#xff0c;和内部描…

智能新浪潮:亚马逊云科技发布Amazon Nova模型

在2024亚马逊云科技re:Invent全球大会上&#xff0c;亚马逊云科技宣布推出新一代基础模型Amazon Nova&#xff0c;其隶属于Amazon Bedrock&#xff0c;这些模型精准切入不同领域&#xff0c;解锁多元业务可能&#xff0c;为人工智能领域带来革新。 带你认识一起了解Amazon Nova…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

C++《AVL树》

在之前的学习当中我们已经了解了二叉搜索树&#xff0c;并且我们知道二叉搜索树的查找效率是无法满足我们的要求&#xff0c;当二叉树为左或者右斜树查找的效率就很低下了&#xff0c;那么这本篇当中我们就要来学习对二叉搜索树进行优化的二叉树——AVL树。在此会先来了解AVL树…