在日常的工作中,经常会需要使用UI测试工具来进行重复用例或者繁琐用例的执行。如果当前的测试对象是基于win、安卓、ios等成熟或者主流系统,大把的测试工具可供选择。
如果是基于X11的桌面系统也有基于python的pyautogui、pyuserinput等众多的库使用,在使用python开发测试工具的过程中,发现如果设备的系统不统一,比如虽然都是Linux的发行版本,有manjaro、ubuntu、debain等众多的桌面系统,基于ARM32/ARM64/X86/X64等硬件平台,这就导致对应的python版本不一致,pyautogui的安装也基于一些第三方库,库的安装又依赖一大堆库,无限循环套循环,当然这样虽然麻烦但是也还是能解决。
当遇到是无桌面的测试终端,内存与存储不够运行python版本,在这种情况下之前的方案就完全走不通了。
我以个人工作中的解决方案来做一下这个系列,如何从零开始做一个兼容各种软件、硬件平台的测试系统。
整个设计功能如下:
1、能通过简单的方式进行脚本的录制与回放,便于测试工具的上手;
2、能通过简单的脚本语言进行脚本编辑,实现稍微复杂的测试逻辑;
3、能实现多脚本的持续运行,便于长时间的自动执行;
4、能实现图片断言功能;
5、支持多种软、硬件平台,基本实现一次代码,多次编译即可运行;
6、支持进程的内存监控与数据存储。
由于我所测试的设备均有网口或者WiFi,所以我的设计思路如下:
1、程序内部运行一个小程序(我称之为中间件),中间件启动后开启TCP服务,用于接收指令来进行触屏、鼠标或者键盘操作;
2、Linux的输入由中间件调用uinput模块来实现;
3、业务逻辑与图片识别在windows环境运行,这样复杂的计算与业务逻辑就可以在软、硬件资源丰富的PC上来运行。
至于开发语言的选型:
项目 | 开发语言 | 功能 |
Windows程序 | C# | 1、Tcpclient 2、图像识别 3、Linux的SSH、sftp客户端 4、脚本运行 5、内存监控 |
中间件 | Rust | 1、rust语言实现tcp server,实现数据解析、转发等操作,调用C++库文件 |
底层库 | c++ | 硬件底层操作 |
至于我的中间件为什么使用rust,我将在第二篇文章中说明。