哈喽阿,各位社区的老铁们~

经过上次跟各位的深入交流,发现用 vnc 这种东西实现自动化点点点始终不是那么回事。
因此就用 python3 写了一个远程操控桌面的小工具。

因为需要在国产系统上使用,国产系统安装各种依赖是比较痛苦的。
所以这个工具要尽可能少的去依赖其他的第三方库。

主要思路:

1,待测的客户端起一个 tcp 服务
2,服务端通过这个服务获取客户端的截屏
3,服务端根据截图定位客户端的桌面坐标
4,服务端向客户端发送定位坐标及需要执行的鼠标或键盘动作的请求
5,客户端接收请求并执行相应动作

主要问题及解决方案:

1,如何截屏: linux 可以通过 PyQt5 这个库使用 QT5 实现,没有 QT5 的系统通过键盘上的 PrintSc 实现

2,如何通过截图定位坐标:通过 @shixue33 大佬的点播,看了一下 airtest 的源码,对我来说这个中文注释可是太友好了。
主要使用 airtest 的 find_template 方法实现的。原理还是 opencv,只不过 airtest 已经封装好了。

3,如何控制键盘鼠标: linux 通过 Xlib 这个库实现。

以上这些东西基本度娘都有,而且相对其他工具来讲在国产系统上还是比较容易安装的。很多基本上都是自带了。
所以就少了很多解决到天灵盖儿发麻的依赖问题。

基本的功能都验证过了,还没进行具体的业务使用。
接下来会尝试使用一下,看看效果。
各位老铁等我消息。

=============================================

流光一瞬,华表千年。半年的时间就这么过去了。

缝缝补补,修修改改这个小工具也算用了起来
整体状态一般,仅仅处在一个能用的水平上。
工具相对简单,更多的是在项目上进行的二次封装。

说一说修改与需要关注的地方

1. 关于截屏

之前采用 qt 截屏,备用方案为键盘的 PrintSC 实现,由于后者的效率太低已经弃用。
现在是 qt 截屏转为二进制直接响应。
python 使用 qt5 在 linux 上截屏有个小坑,如果在函数里导包,第二次调用这个函数的时候会有一个段错误的报错。

2.图片识别率

工具上现在使用 airtest 的模板匹配,很单一但是识别效果还是可以接受的。
令人难受的是如果环境多的话需要每个环境截一份定位图片。
也测试过使用特征点匹配,在我的现有项目上效果不太好。暂时没有加进去,后期为了提高识别率可能会加进去。
这方面感兴趣的小伙伴可以去看看 airtest 源码,常用的特征点匹配算法都有。

3.尝试加入记录坐标的小功能

有一个问题,如果图片已经出现了但是没识别到该怎么办?
遂加入了一个小功能,如果此次图片识别成功会记录坐标,如果下次识别失败会获取对应坐标后执行相应动作。
经过验证,这个功能属实没啥用。

4.初始化应用状态

在上一条用例失败后,可能会出现其他的窗口,会导致下一个用例失败。
然后又加了一个功能,就是把失败后可能出现的画面都截取下来,然后逐个点击关闭窗口。
感觉这个方法很笨,各位社区的老铁如果有更好的办法还请不吝赐教。

基本上也就这样了,问题还有很多,但是争取搞成一个能拿的出手的东西。

最后说说我的现状

由于我所在产品线自动化测试就我一人,而且还不隶属开发部门。
很多代码问题只能自己想,自己查。工作状态很自闭。基本属于闭门造车。
最近开发完了手头这个项目的自动化脚本,内心深感疲惫。丧失了之前的斗志。
感觉自己可能需要换换环境了。

相信未来还是会好起来的!😃


↙↙↙阅读原文可查看相关链接,并与作者交流