对于大部分从事硬件工作的人而言,可能不太会去涉及软件相关的开发,更多的是工具的使用,但对于测试而言,会一点软件开发可以比较灵活的提高工作效率,特别是对于大量的重复性机械操作类的测试任务,一般都要寻求自动化的解决方案,不然测试人员会痛不欲生且效率低下。
近期开始写一下用Python做自动化测试的实战操作系列,一边分享也一边巩固一下。这会是一个系列,尽量写的详细和细节一点,就算不了解的人都可以尝试从这里开始有一些收获。第一个系列会写如何用Python去控制Litepoint的IQxel系列仪表去做WiFi的射频自动化测试。
首先第一期讲讲我们要用的语言Python,简单来说,一个脚本语言,可读性强,最重要的是,是初学者的语言,入门极简,这对于没有编程基础的人来说相当友好,对于我们从事硬件的来说,够用好用最重要,学的多深多牛逼不是我们的重点,不花大力气永远也比不了搞专业搞软件的。
首先安装Python,去官网下载Welcome to Python.org,在Downloads标签里找适合自己的操作系统的版本,现在基本都是64位的系统,所以推荐选择windows installer(64-bit)这个下载即可,特别提一下,Python有2.7.x和3.x两个大的版本,但是2.7.x和3.x有些语法并不兼容,简单来说就是两种版本的脚本可能无法直接交换运行,并且2.7.x早已经不再更新维护了,但是网上有很多早期资料都是2.7.x版本的,查找资料的时候注意甄别一下,所以现在都推荐用3.x以上版本,下载最新的安装即可,安装没有什么特别需要注意的,点两下就好了,可以勾上加入环境变量选项。
安装完成后我们的PC上就可以执行Python脚本了。接下来讲Python另一个最大的优势之一,丰富的跨平台的库,大量第三方库,我们俗称“轮子”,就是我们想做一个脚本,很多功能并不需要我们完全重新开发,直接把现成的“轮子”拿过来就可以跑,这对于非专业的软件开发者来说真是省了大力气,我们只需要学一下怎么用就好了,一般“轮子”都带有详细的帮助手册,完美!
轮子怎么用后面再提,先来说一下IDE工具,我们要编写脚本需要一个工具,这就是IDE(集成开发环境),IDE那也是相当的多,就不一一介绍了,就说一下我用过的几个IDE的差异和特点,前期可以都体验一下,然后结合个人习惯和软件特性选择一款。最有名的应该是Pycharm了,我喜欢它的环境和库隔离操作方式,我个人的理解,可能名称不一定准确,这个功能IDE基本都有,但是Pycharm操作方式比较好用,主要功能就是它可以根据每一个项目选择Python的版本和项目所要用的库都独立开来,有一个好处就是你如果需要打包项目到别的机器上运行的时候会很友好,比较省空间。第二个VSCode,主要特点就是免费,然后有很多插件可以用,个人推荐,省心省事儿。第三个是jupyter,一般随Anaconda安装而安装,最出名的就是在线调试,只要有网络连接,可以随时进行代码测试。
选择好IDE之后我们就可以正式开始创建python项目了,这里选VSCode来介绍。VSCode去Visual Studio Code - Code Editing. Redefined下载,安装好打开VSCode之后我们需要在Extensions里安装Python extension,可以在上面搜索栏中搜索python,点击Install安装即可,安装好之后我们就可以新建Python项目了。
前面我们提到了“轮子”,那么“轮子”如何使用呢?很简单,首先需要安装“轮子”的库,Python里安装第三方库的方法是使用pip,使用方法是打开一个Windows的命令行窗口,输入"pip install 库名"回车即可开始自动搜索并下载安装,当然需要联网,还有就是前面安装的时候已经提前添加了Python的环境变量,要不然就要到安装目录下去执行pip安装了。
pipinstallpyvisa
至于找“轮子”就要看项目的需求了,然后根据关键词去搜索即可,就我们即将要做的实战项目来说,我们需要可以控制仪表的接口库,还有需要控制被测设备的接口库。对于仪表而言,一般来说通用的控制接口是VISA,主流仪表基本都支持,百度的VISA定义如下,可以了解一下,Python里推荐库为pyvisa,因为有很多不同的“轮子”可能实现的功能是相同的,找主流的使用,维护和更新都比较好。
VISA(Virtual Instrument Software Architecture,简称为"Visa"),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/O接口软件标准及其规范的总称。VISA提供用于仪器编程的标准I/O函数库,称为VISA库。VISA函数库驻留在计算机系统内,是计算机与仪器的标准软件通信接口,计算机通过它来控制仪器。
百度百科
而对于我们的被测设备而言,可能方式就比较多样化了,但是主流的大多数都是lan, usb之类,找对应的接口,这里罗列一些主流的三方库名,可以根据实际情况安装。
接口 |
库名 |
usb |
serial |
ssh |
paramiko |
telnet |
telnetlib |
“轮子”装好,我们就可以在脚本里使用了,使用的方法也很简单,首先import加载库,然后下面直接调用库中的功能函数即可。各个函数和实现的功能可以通过文档去了解,下面举个telnet的调用的简单例子,可以用来连接被测设备。
importtelnetlib#导入telnetlib库tn = telnetlib.Telnet() #创建一个对象tn.open(host, port=23) #打开一个会话,host是主机地址,port是端口号tn.read_until(b'login:') #使用 read_until() 方法等待服务器发送的数据tn.write(username.encode('ascii')+b'\n') #使用 write() 方法向 Telnet 服务器发送数据
同样仪表端也可以类似的方式进行连接和控制。
importpyvisarm=pyvisa.ResourceManager() ins=rs.open_resource('TCPIP0::%s::hislip0::INSTR'%ip) ins.write('*RST') #仪表复位ins..query('*IDN?') #查询仪表信息
对于仪表的控制指令,我们可以使用仪表的SCPI指令集,相对简单和易于使用,并且主流的仪表一般都会附带查询SCPI指令的相关方式,可能是文档,也可能直接在仪表上按键时直接显示,IQ系列设备通过网页进入仪表测试界面,然后在admin tools里有相应文档可以查询。关于SCPI的定义参考如下:
可编程仪器标准命令(英语:Standard Commands for Programmable Instruments,缩写:SCPI)定义了一套用于控制可编程测试测量仪器的标准语法和命令。
百度百科
纸上得来终觉浅,绝知此事要躬行。第一期就写这么多,有兴趣的可以试试,上面的代码不一定能直接用,很有可能会报错,但是在检查错误的过程中你会发现学习的效果会更好,我个人的体验是这样的,下期再会!