Squish Hook 进入具有 Windows 控制台和 Qt window 的 AUT

Squish Hook into an AUT that has a Windows console and Qt window

在工具包设置为 Qt 并设置 'Hook into sub-processes launched by the application' 的情况下尝试启动 AUT 时,我必须启动应用程序(这是一个 windows 应用程序,它启动一个进程来设置 Qt window) 使用 Squish 提供的 dllpreload.exe 附加到 Qt window。这样做不会显示 windows 控制台,只会启动 Qt window。这成功挂接到 Qt...

当设置 testSettings.setWrappersForApplication("application", ("Windows", "Qt"))testSettings.setWrappersForApplication("application", ("Windows")) 时,它无法将 Qt window 作为 Qt window 挂钩并且无法识别 Qt 组件。

squish 是否可以将 windows 控制台识别为 'Windows' 并将 Qt window 识别为 'Qt'?

连接到 Qt 应用程序的用例,该应用程序是本机 Windows 应用程序的子进程,记录在 a Knowledge Base article 中。最简单的方法是:

  1. 重命名Qt应用程序的原始可执行文件,例如myqtapp.exe为相同的名称但在末尾添加下划线,即myqtapp_.exe.
  2. 将 Squish 附带的 dllpreload.exe 程序重命名为 myqtapp.exe

这样,您的 Windows 程序会在不知不觉中调用 dllpreload.exe,然后它会根据其自身的文件名推断出原始应用程序的文件名(它只会添加一个下划线)。

dllpreload.exe 程序虽然不是完美的代理,因此您的 Windows 应用程序可能注意到它没有与真正的 AUT 交互。在这种情况下,修改 Windows 应用程序可能更容易,以便它明确地将 dllpreload.exe 添加到用于启动 Qt 应用程序的命令行。

您可以有条件地执行此操作,以便仅在通过 Squish 启动 Windows 应用程序时执行此操作。这种情况可以通过测试 SQUISH_PREFIX 环境变量的存在来检测。