从零开始构建全面的UI测试系统

发表时间: 2024-06-26 23:29

在日常的工作中,经常会需要使用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,我将在第二篇文章中说明。