Qt自动化服务和Qt Agent

在CukeTest运行Qt自动化时使用到两个组件:Qt自动化服务(Qt Service,后面都简称Qt服务)和Qt Agent。两者分别运行在CukeTest进程和被测的Qt应用进程中。通过两者交互完成自动化操作。

Qt自动化服务

Qt服务是全局唯一的,即一台机器上只有一个服务在运行。Qt服务总是伴随这CukeTest启动在后台中保持。可以在右下角的状态栏中观察到该服务正在运行。
状态栏中的Qt服务
后面的数字代表连接到当前服务中的Qt应用,至于如何让Qt应用连接到服务中,可以查看下一节——Qt Agent的介绍。

由于Qt服务使用了一个与应用进行通信的端口,因此是全局唯一的。同一时间只能有一个CukeTest实例(无论是命令行还是设计器)能启动Qt服务。对此,CukeTest是这样协调Qt服务的启动:

  1. 如果是CukeTest命令行执行时,设计器已经启动Qt服务: 命令行会停止设计器的Qt服务,并启动自己的Qt服务。在完成命令行运行后,如果需要重新启用设计器的Qt服务,需要手动从右下角的状态栏中启动。详见Linux命令行介绍
  2. 如果是多个设计器之间产生了Qt服务使用的冲突: 在启动多个CukeTest设计器时,会提示Qt服务被占用的信息,按照引导重新打开Qt服务即可。 重新打开Qt服务

如果您的使用不涉及Qt的自动化(比如单纯的Web自动化、API自动化等),可以关闭Qt服务,通过“文件” - “设置” - “高级”中的Qt自动化选项来设置,避免出现以上的Qt服务的转移行为产生的提示。

Qt Agent

CukeTest在启动Qt应用时,会在Qt应用进程中加载Qt Agent,使得CukeTest可以通过Qt服务对该应用进行操作。关于带agent启动Qt应用的方法可以查看启动Qt应用的介绍。

Qt Agent的引导

Qt Agent会根据目标应用选择合适的版本,比如:

  • Qt 4.x的应用会加载Qt 4.x的Qt Agent;
  • Qt 5.x的应用会加载Qt 5.x的Qt Agent;
  • 如果目标应用不是Qt应用: Qt Agent不做任何操作。

手动加载Qt Agent——配置LD_PRELOAD环境变量

命令行启动Qt应用一节中可以初步了解到加载Qt Agent的方法就是在启动命令后带上修改LD_PRELOAD环境变量。这也是执行Qt自动化时需要多加注意的一点。