基于虚拟串口的新RobotFramework测试环境

现状

系统测试使用RobotFramework。
CI服务器在机房,虽然也有串口,但是,机房不适合拜访测试设备。
因此,在实验区,额外放了一台RobotFramework测试主机(CI服务器的从机),由CI服务器调度它干活。见下图
基于虚拟串口的新RobotFramework测试环境_第1张图片

期望

由于对简洁有强迫症,因此,决定消灭掉这台额外的测试主机。希望做成如下效果。

这里写图片描述

实际真的做到了!

方案原理

在PC,做一个PTY1(伪终端)并将其链接到PC串口通信用的/dev/ttyS0。
这个PTY1的数据通过网络(我使用最常见的ssh)转发到被测单板里做的另一个PTY2(PTY2链接到单板原来的 /dev/ttySxx)。
那么被测单板程序在使用/dev/ttySxx进行串口通信时,等价于和远程PC上的串口进行通信.
这样,PC和单板的程序都不需要改动,在没有串口线连接的情况下,实现了远程的串口通信!
由于不受物理串口影响,因此,PC可以创建出N个串口和N多个单板串口同时通信!

技术实现

如何将串口交互通过tcp实现呢(serial over tcp)?
socat在网络转发,中继方面非常厉害,因此,决定尝试用它。
我实验了如下语句:

socat -d -d PTY,link=$HOME/dev/ttyS0,raw,echo=0 SYSTEM:"ssh root@you_ip /usr/bin/socat -d -d -'PTY,link=/dev/ttyS0,nonblock,raw,echo=0'"

这里采用两个PTY配套通信的原理, 数据写入
$HOME/dev/ttyS0
(放到$HOME下是为了解决设备的操作权限问题)。
SYSTEM里的是shell命令,这里是采用ssh登录, socat 后面的单独的-,表示采用stdin和stdout数据流,这样意味着,两个PTY被神奇得连接起来了!
这样就实现了基于网络的串口通信.
其中,-d用于调试,越多个-d,调试信息就越多.(socat 后面先跟-d -d 再跟 - 才可以,浪费我好多时间!!)
注意:原有的/dev/ttyS0要通过cp -a备份起来,否则,这个socat用完就消失了. 不过不用担心, 万一忘记备份,重启一下设备,原来的tty就恢复了. (另外, raw代表透明传输,echo=0代表不需要echo回应.)

##该时间的更多好处
1.这里仅仅减少了一台测试主机,由于CI服务器是电源研究院的云服务器,多个项目组同时使用,因此,可以减少N台测试主机;
2.原来测试主机只有一个串口,如果需要拓展串口,必须购买拓展卡。现在不需要了,你要多少个,我给你多少个,呵呵,零成本!
3.在很多场合,有网络就不需要串口了,可以带来很多减成本和脑力想象的设计空间。

你可能感兴趣的:(devops)