• 13
  • 13
分享
  • 新能源车行业:带你见识不一样的自动化测试——软件测试圈
  • 曼倩诙谐 2021-08-20 10:12:53 字数 4776 阅读 3481 收藏 13

  提起自动化测试,大家脑中立即能浮现的大多数是Python开发语言、JAVA开发语言、Appium测试框架、Selenium测试框架等,大部分WEB公司只要做自动化测试基本上都离不开上面谈到的开发语言和框架。

  不过仍然有很多公司会有不一样的自动化测试需求,例如万次级别断常电、手机行业的开关机、功耗满负载测试等。

  笔者在工作中就遇到过以上“另类”自动化测试,会遇上很多沟沟坎坎,但是非常有意思,各位看官且慢慢往下看。

  进行断常电测试的背景与需求

  笔者供职于国内某新能源汽车企业,以前听到汽车两个字,能联想到的肯定是外观、加速、舒适、油耗等等,进入新能源时代,不得不提互联网、安卓、科技等等词汇。

  市场上新能源汽车在2021年已经进入了5G时代,爆炸的流量提升,极致的冲浪体验加速了互联网在新能源汽车上的应用,相对应的也催生了大批车机测试工程师,除了传统的CAN(FD)、ECU测试外,车机的软硬件测试已经走上了舞台。

  传统的汽车功能如行车记录仪、收音机、倒车影像(全景影像)均被集成到车机中,不再是单独的功能孤岛。

  虽然某些功能在中控以及方向盘保留了按钮控制,同时也被整合到车机中包括灯光设置、ACC自动领航设置、自动泊车设置、空调设置、音效设置等等,互联网作为最重要的部分已经被车机拿下。

  例如音乐APP、播报APP、智能语音、地图APP以及海量移动应用等等。

  作为汽车中的主机,首先面临的就是汽车超频繁的上电、下电,一辆家用汽车15年间预计会有3万次的启动,我们不可能由人力去做此类测试,因此需要有控制车机自动上电、下电的方案。

  断常电方案设计之继电器

  继电器通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”,故在电路中起着自动调节、安全保护、转换电路等作用。

  控制上下电的关键器件是继电器,通常为继电器供电为5V,所以我们选择1路或多路5V继电器模块,图2-1为常见的继电器模块。

  输入部分:

  ①DC+:接电源正极(电压按继电器要求,有5V、9V、12V、24V等选择,我们接Arduino开发板5V接口,所以选择5V)。

  ②DC-:接电源负极。

  ③IN:可以高或低电平控制继电器吸合(我们接Arduino开发板高低电平可编程输出口)。

  继电器输出端:

  ①NO:继电器常开接口,继电器吸合前悬空,吸合后与COM短接。

  ②COM:继电器公用接口。

  ③NC:继电器常闭接口,继电器吸合前与COM短接,吸合后悬空。

  高低电平触发选择端(方案中不涉及该接口):

  ①跳线与LOW短接时为低电平触发。

  ②跳线与High短接时为高电平触发。

1-1.png

图2-1

  图2-2为4路继电器的接线方案,通过Arduino开发板为输入端DC+、DC-供电,同时通过Arduino开发板的可编程输出口为继电器输入端的IN接口输入交替的高低电平,从而达到控制输出端NC接口的吸合,从而达到自动通断电的目标。

  ①向Arduino开发板供电(电脑USB口5V)。

  ②Arduino开发板高低电平可编程输出口之一,接继电器IN口,控制高低电平交替输入给继电器。

  ③为继电器输入端供电,接继电器DC+接口。

  ④负极接继电器DC-接口。

  ⑤第一路COM口,接车机供电电源正极。

  ⑥第一路NO口,接车机正极输入,通过NO口的开合从而达到接通电源与车机的正极线路的通断,达到测试目的。

1-2.png

图2-2

  断常电方案设计之Arduino开发板

  Arduino是一款便捷灵活、方便上手的开源电子原型平台,如图3-1、3-2,它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。

  主要包含两个的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。

  你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。在我们的断常电自动化测试方案中它扮演的角色很简单,就是通过输出口输出高低电平给继电器。

  ①复位按键

  ②USB接口

  ③数字端口1-13

  ④3.3V输出

  ⑤5V输出

  ⑥GND

1-3.png

图3-1

  安装Arduino开发环境

  ①Arduino集成开发环境下载

  Arduino IDE 1.8.15下载:https://share.weiyun.com/lEzbr39k

  其中2.0是beta版本,不建议初学者使用。

  如果你下载的是windows安装版(exe后缀),那么直接安装即可,其他则直接解压即可使用。

  早期版本下载:https://pan.baidu.com/s/1_XjwpiClKPCrt3c4Ie3SCw

  如果你使用的是Arduino Due、ESP8266等开发板,也是使用这个IDE。

  通过开发板管理器添加更多控制器?http://www.arduino.cn/thread-17884-1-1.html

  ②安装Ardunino IDE 1.8.15版本,图3-2。

1-4.png

图3-2

  正式对Ardunino开发板进行开发

  ①通过USB将Ardunino连接到电脑,在“工具-开发板”选择Arduino Leonardo,因为笔者的Ardunino为Arduino Leonardo开发板。

  ②在集成开发环境写入如下代码。

void setup() {//设备初始化
  // initialize digital pin LED_BUILTIN as an output.
  Serial.begin(115200);//设置串口波特率为115200
  pinMode(LedP, OUTPUT);//将LedP引脚设置为输出模式
}
// the loop function runs over and over again forever
void loop() {
  if (Serial.available()>0)//判断串口是否激活
  {
    inByte = Serial.read();//读取串口数据到变量inByte
    if (inByte == '1')//判断inByte是否接收到十六进制字符1
      {
        digitalWrite(LedP, LOW);//如果inByte接收到十六进制字符1,将LedP引脚输出低电平
      }
    if (inByte == '0')//判断inByte是否接收到数字0
      {
        digitalWrite(LedP, HIGH);//如果inByte接收到十六进制字符0,将LedP引脚输出高电平
      }
  }
}

  ③点击向右按钮将写好的程序上传至Ardunino开发板,至此,开发板的程序就写好了,下一章我们开始正式测试该方案。

  测试线路通断状况

  使用Python模拟向Ardunino串口发送十六进制字符1和0,进而引发继电器的开合,测试线路的通断情况。

Import serial#导入serial模块
try:
portx="COM8"
bps=115200#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
timex=0.5#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
Ser =serial.Serial(portx,bps,timeout=timex)#连接COM8串口
print("串口详情参数:", ser)#打印串口详情
result=Ser.write(‘\0x1’.encode())#向串口写十六进制字符1
print("写总字节数:",result)
print(ser.readline())
print("---------------")
Ser.close()#关闭串口
except Exception as e:
print("---异常---:",e)

  以上为Python的测试代码,真正工作起来时还需要加入循环向串口写入十六进制字符1和0,再扩展的话就是使用Python的图形界面了,将波特率、超时设置、循环次数、串口选择等放在图形界面中来配置,以后再分享给读者。

  总结

  以上方案与代码都是实际上机实操的,随着最终Ardunino开发板的一声蜂鸣,开始有规律的产生高低电平,由衷的感到欣喜,虽然这套方案相对比较简单,不过对于基础薄弱的同学可能还是有难度,在此给出详细的学习路线,以供参考和发散。

  Python的学习线路:可以先从基本语法、基础数据结构(数据类型、元组、list、map)开始学习,打好基础可以开始学习重要的包(例如requests、json、time、pip、Numpy、PyQt、selenium),接着可以在一个包深入学习,例如requests包,可以结合selenium、json等做一次接口自动化测试,相信按照这个学习路线下来你肯定对Python有比较深入的了解了。

  Ardunino开发板的学习路线:如果是为了工作可以选择针对性的问题公关,例如该方案中的高低电平输出。

  感兴趣的同学可以继续深入学习Ardunino开发板,它可以做的事情太多了,也很高大上,例如无人机,不过这就需要更专业的算法、飞控知识以及硬件知识了。

  继电器:需要有电子电路基础,通过学习继电器,进而学习其他电子元器件,这样,以后碰到其他的测试可以在脑中就构造出方案。

  机器识图:这个是后话了,实验成功后,我们为了达到完全自动化的目的,还需要对机器识图进行研究,对开机后的画面进行学习比对,以判断单次开机的成功,此部分已小有成果,以后再分享给读者。

  遇到的问题

  该方案从构想到实施到稳定,遇到过形形色色的问题,收录在此,避免大家走弯路。

  1.PyCharm(Python的集成开发IDE)提示no module named serial

  File-->Settings-->Project:xxx-->project Interpreter--> 点击右侧的"+"-->输入serial-->选择对应可安装的serial-->Install Package-->等待一会安装成功,也可以在命令提示符下通过pip install serial来安装。

  2.PyCharm(Python的集成开发IDE)找不到解释器

  先打开File–>Setting–>Project,这时候看到选中栏显示的是No interpreter,在哪里找这个文件呢?不妨打开磁盘,直接搜索python.exe文件。

  3.Python运行程序发送1或0,Ardunino没反应

  开始笔者在PyCharm中写的代码是result=Ser.write(‘1’.encode()),怎么调试也不成功,也没有相应的报错信息。

  后来写成result=Ser.write(‘\0x1’.encode())就可以了,究其原因还是字符编码的问题以及Ardunino的程序中接收的数据类型要与该处匹配。

  4.Ardunino被烧毁是在最开始运行期间因为Ardunino开发板的输入输出口接插件未做绝缘处理,抑或是因为电线铜丝外露发生短路,烧毁过一个Ardunino开发板,大家在实施该方案时千万要注意绝缘这个问题,以免造成损失。



作者:我吃大西瓜   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •        “羊毛党”蕴含着强大势能,危可断独角兽的角,用可创建增长神话。如同“道德经”——道可道,非常道。羊有毛,非常毛。羊毛群体除了巨大的破坏力外,还具有强大的传播势能。了解利弊加以利用,从此以后再也不愁裂变活动没有大量免费种子用户传播啦~       但如果没有系统性了解羊毛党的破坏力,轻易尝试引火烧身,重着被按在地上强撸灰飞烟灭。       羊毛党的攻防本质是成本的较量!       运营有风控的组合拳,羊毛有机刷的工具刀,...
            0 0 1216
            分享
          •   我在大型政府部门做了 20 多年的质量过程改进服务,结合多年的实践经验,最近在天工 AI 助力下,使用 Python 写了一个接口和灰盒自动化测试工具 DATF(Daniel Auto Test?Framework)。  下边介绍一下 DATF 这个轻量化自动化测试工具的特性,欢迎有需求的测试人员试用,希望能对提高项目的质量和测试工作效率有所帮助。  轻量化  免安装,在个人用机上开包即用,无需额外设备花销。目前市场上的接口自动化测试工具基本是 SaaS 模式,需要订阅,数据放在公有云上。如果客户有数据安全要求,就只能购买产品后部署私有云,需要专用服务器、数据...
            0 0 150
            分享
          •   在当今数字化快速发展的时代,软件系统的稳定性和性能至关重要。为了满足某企业的业务需求,提高软件研发效率和质量,全栈式流水线调度平台项目应运而生。该项目在测试过程中展现出了一系列优秀的实践经验,特别是在性能测试方面,为项目的成功实施提供了有力保障。  一、项目背景与目标  为有序推进某平台建设,召开的某平台建设专题会提出了“一平台、多频道”的多部门协作研发要求,形成以“平台+”为思路的架构升级方案。该项目的目标是建设研发过程中持续集成、持续交付(CICD)的流水线调度和运行平台,支持云上容器化、云下主机两大类流水线运行场景,为该企业云上非信创、信创流水线、云下集中构建流水线的运行提供有效支撑...
            0 0 275
            分享
          • 一、web测试流程1、需求分析,了解具体需求2、测试准备:原型图、效果图、需求文件、测试用用例、用例评审、各种测试数据准备3、测试环节:接受版本开始执行1)冒烟测试:对版本质量的控制以及此版本是否具备测试条件;2)UI测试:核对效果图3)功能测试:核对需求文件测试用例,对功能进行验证4)兼容测试:各个浏览器,手机是否兼容5)性能测试,服务器接口,多线程等压测6)安全测试7)易用性测试:界面与交互性测试,符合交互规范,用户体验良好,使用方便快捷8)提交bug,争议bug评审,回归测试9)自动化测试a、ui自动化测试:一般使用python+selenium进行ui自动化测试4、发布功能,上线验证,...
            0 0 1355
            分享
          • 前言:自从片言社区(fewords.cn)上线后,我就一直在更新技术文章。最近停更了一周,也是在想除了纯粹的技术分享以外,聊聊思维方式、职业发展对大家是不是更有帮助。每天都有不少人咨询我问题,如果汇总统计各个类型的问题频次,排名第一的绝对是:35岁以后,我该怎么办? 在这次连载文章里我就来解读一下,如何面对职场中年危机。35岁现象,真的存在吗?我可以肯定的回答你,存在,且非常明显。首先我们要说明一个前提,我们今天讨论的是软件技术领域或者说是互联网相关岗位领域的35岁危机。为什么要声明这个前提呢?因为对于一个医生、律师或者教师,35岁的他,职业发展的真正黄金期才刚刚开始。但是对于一个软件技术领域...
            0 0 1674
            分享
      • 51testing软件测试圈微信