基于ECU-TEST的ECU诊断工具API接口自动化测试应用
2020-06-04邵金萍
邵金萍
(潍柴动力股份有限公司,山东 潍坊 261061)
随着计算机、电子等学科领域在汽车上的广泛应用,汽车电控系统日益复杂成为必然趋势,电子模块的增加导致汽车故障诊断的难度也越来越大。ECU诊断工具在国内得到了迅速发展和普及。
为确保诊断工具的可靠性,针对其API接口测试的工作凸显重要性。传统的手动API接口测试效率低下、覆盖度低,且品质得不到保证[1]。作者所用ECU诊断工具同时存在项目版本众多、适配的ECU平台多样化、开发及测试周期短等问题[2]。因此基于Python脚本语言开发了一套ECU诊断工具的API接口自动调用方法,满足诊断工具跨ECU平台的功能和性能测试要求,在人力不足及接口工作量大的情况下,通过合理设计Python脚本和ECU诊断逻辑测试用例更准确高效地完成对诊断工具的开发测试工作[3-9]。
1 基于.NET框架的API接口命令调用实现
Visual Studio是目前流行的Windows平台应用程序开发平台,其中包含的.NET框架是一个多语言 (C++语言、C#语言、VB语言、J#语言等)组件开发和执行环境[10]。从层次结构上看,.NET框架包括3个主要组成部分:公共语言运行库(CLR:Common Language Runtime)、服务框架 (Service Framework)和上层的两类应用模板——传统的Windows应用程序模板 (Win Forms)和基于ASP.NET的面向Web的网络应用程序模板 (Web Forms和Web Service)[11-13]。
公共语言运行库 (CLR)是一个运行时环境,提供内存管理、线程管理、代码执行、代码安全验证、编译及其他系统服务。
服务框架位于CLR之上,提供了一套开发人员希望在标准语言库中存在的基本类库,包括集合、输入/输出、字符串及数据类。使用这些可重用类型集合,大大提高了开发效率。
基于.NET框架的API接口命令调用前需提前连接和ECU通信的硬件接口设备,将本文中的ECU诊断工具API命令所在的.dll文件添加到基于Visual Studio 2015 C#Win Forms程序的引用文件集中,运行编写好的Win Forms程序返回正确的测试结果,以获取故障码信息为例,如图1所示,为下一步Python脚本调用提供依据。
编译时目标平台选择Any CPU是将程序集编译为在任意平台上运行,也就是在32位Windows上按照32位运行,在64位Windows上按照64位运行。本文的ECU诊断工具API命令所在的.dll文件为32位,因此勾选了“首选32位 (P)”选项。编译配置界面如图2所示。
图1 基于Visual Studio的API命令编译运行图
图2 编译配置界面图
2 Python环境搭建
Python是一种面向对象的解释型计算机程序设计语言,其语法更接近自然语言,通俗易懂且具有丰富和强大的库[10,14-15]。
本文中用到32位的Python3.7.4以及它的两个库——pythonnet和tblib。pythonnet库是python与C#的交互模块,tblib库是实现其他程序对Python运行结果可追溯调用的模块库。
ECU诊断工具的.dll文件为32位,因此选择32位的Python软件。Python3默认采用UTF-8编码,解决了Python2的默认编码是ASCII带来的编程过程中经常遇到编码报错问题。
pythonnet库常用的命令有:
import sys
sys.path.append (r‘…’) #加载dll文件夹路径;
import clr#导入公共运行时环境;
clr.AddReference(‘…’)#加载dll文件;
from…import*#导入命名空间;
本ECU诊断工具API命令返回结果中分别将C#的list和datatable数据类型转换成Python的list和dictionary。以获取故障码信息为例,图3是Python调用dll文件的API命令成功的结果展示。
3 ECU诊断工具调用脚本开发及调试
ECU-TEST是一款支持多平台的ECU自动测试软件,具有二次开发功能强大、操作简单等优点。其不仅支持dSPACE ControlDeskNG、 ETASLabCar、 NIVeristand、CarSim、 MatLabSimulink、 AVLPUMA、 D2TMorphee等HILMILSIL仿真平台和台架,而且支持INCA、CANape、CANoe、CANalyzer等ECU标定诊断工具。要实现对ECU诊断工具API命令的自动测试需要将其返回结果和INCA中的测试结果在ECU-TEST中做比较,三者关系如图4所示。本章要完成的工作是ECU-TEST对ECU诊断工具的调用。
根据dll文件开发的Python脚本和包含API命令的dll文件需要同ECU诊断工具运行涉及到的其他dll文件放在同一个文件路径下。脚本调用流程如图5所示。
4 ECU诊断工具API接口自动测试用例演示
ECU-TEST调用ECU诊断工具测试调试完成后,连接INCA进行诊断工具功能的自动测试用例设计,以获取故障码信息的API命令自动测试为例,说明如图6所示。
Python根据某个元素读Excel的脚本属于测试用例二次开发内容,脚本实现设计如下所示:
import os
import pandas as pd
def ReadExcelDTCM (FilePath,FileName,SheetName,DFCName):
AbsoluteFilePath=os.path.join (FilePath,FileName)
df=pd.read_excel(AbsoluteFilePath,SheetName,header=0)
图3 Python调用API命令运行结果图
图4 测试工具关系图
图5 脚本调用流程图
DFCRow=''
for indexs in df.index:
for i in range (len (df.loc [indexs] .values)):
if (df.loc [indexs] .values [i] ==DFCName):
print ('RowNo:',indexs+1,'ColumnNo:',i+1)
图6 API命令自动测试用例流程图
print (df.loc [indexs] .values [DTCM所在列号])
DFCRow=df.loc [indexs] .values[DTCM所在列号]
return DFCRow
ECU-TEST对上述诊断工具的功能测试进行的测试用例编写步骤如图7所示。
5 结论
本论文提供了一种使用Python脚本语言实现了基于.dll文件的API命令调用的解决问题思路,稳定实现了对开发升级中的ECU诊断工具进行接口功能的自动化测试和版本用例移植,提高了测试效率和准确性。
图7 ECU-TEST自动测试用例编写图