常见问题(FAQ)

Q: CukeTest 的对象识别原理是什么?当应用界面更新或在不同电脑上运行时,脚本的兼容性和维护性如何?

A: CukeTest 构建了一套以 对象识别 为主、视觉识别为辅 的多维自动化识别体系。核心的对象识别技术通过读取控件内部属性来精确定位,以确保脚本的稳定与高效。同时,当遇到标准控件属性无法获取的场景时(例如虚拟化环境、游戏或完全自定义绘制的界面),可以采用 图像识别、OCR文字识别或虚拟控件 等技术作为补充,确保自动化测试的全覆盖。

这种设计带来了以下优势:

  1. 识别原理与准确率:CukeTest 内置了对多种技术的支持,包括 Windows、Qt、Java、Linux (ATK) 和 Web 等。它通过直接读取控件的内部属性(如 name, className, text 等)来工作。与单纯的视觉识别方案相比,这种方式在准确率和执行性能上都有显著优势。

  2. 应对界面更新:当被测应用的界面发生改动时,您无需重写整个脚本。CukeTest 将控件定义存储在对象模型(.tmodel)中。您只需在模型管理器中找到对应发生变化的控件,单独更新其识别属性 即可让脚本适配新版应用。对于一些动态变化的属性,您可以在识别规则中将其忽略,或使用通配符、正则表达式等灵活的匹配模式来提高识别的容错性。

  3. 跨环境部署能力:由于核心机制是基于对象而非固定坐标,脚本具备良好的环境可移植性。当您需要在不同分辨率的设备、或将脚本部署到其他机器上运行时,只要被测应用的技术栈和控件核心属性保持一致,脚本通常就可以直接复用。

Q: 每次运行脚本前,都需要手动打开被测软件吗?

A: 不需要。CukeTest 支持通过脚本自动启动和关闭被测应用。在录制操作时,您可以在录制设置中指定被测应用的启动路径,CukeTest 会自动生成用于启动该应用的代码。

Q: 如何在脚本中等待应用完全启动后再执行后续操作?

A: 直接使用固定时长的延时(如 Util.delay())可能因环境不同而不稳定。更好的方法是等待应用的关键窗口(例如主窗口)出现。可以结合控件的 exist(seconds) 方法来实现智能等待。

例如,等待“计算器”应用的主窗口在10秒内出现:

JavaScript
// 启动应用进程
await Util.launchProcess('calculator');

// 等待标题为“计算器”的窗口出现,最长等待10秒
if (!await model.getWindow('计算器').exist(10)) {
    // 如果10秒后窗口仍未出现,则抛出错误并中止测试
    throw new Error('应用 "calculator" 未能成功启动,请检查或延长等待时间。');
}

// ...确认窗口出现后,继续执行其他自动化操作...

Q: 一个测试用例中可以操作多个不同的应用吗?

A: 可以。在一个测试场景(用例)中,您可以与多个应用进行交互。在录制过程中,如果需要操作另一个应用,只需点击录制工具条上的“启动应用”按钮,启动第二个应用并继续录制即可。CukeTest 会将对不同应用的操作录制到同一个脚本中。

Q: 代码能力不强,可以直接用录制的脚本进行测试吗?

A: 完全可以。虽然 CukeTest 推荐使用 BDD(行为驱动开发)模式来获得更好的可读性和维护性,但对于代码能力还在培养中的团队,可以直接利用录制生成的脚本。

这里有两种简便方法:

  1. 简化 BDD 项目:在一个 feature 文件中只创建一个场景(Scenario)和一个步骤(Step),然后将录制生成的完整脚本代码直接粘贴到这个步骤的实现函数中。这样做既可以立即运行测试并生成报告,也为未来逐步细化和重构测试逻辑提供了空间。
  2. 使用 pytest 模式:将录制生成的脚本文件和函数名修改为 pytest 的规范(即以 test_ 开头),就可以直接作为 pytest 用例来运行。

Q: 如何在不打开 CukeTest 界面的情况下执行自动化测试?

A: 可以使用命令行来执行测试。首先,在命令行终端中导航到您的 CukeTest 项目所在的文件夹路径,然后执行 cuke run 命令即可。这种方式无需打开图形用户界面,便于集成到各类自动化流程中。

更多详细信息,请参阅官方文档:命令行执行

Q: 运行测试时,如何防止 CukeTest 窗口遮挡被测应用?

A: 为了避免 CukeTest 主窗口在运行时覆盖或干扰被测应用,导致脚本找不到控件,您可以使用以下两种方法:

  1. 最小化 CukeTest 窗口:在测试脚本的开始和结束时,调用相应的 API 来最小化和恢复 CukeTest 窗口。

    JavaScript
    const { CukeTest } = require("cuketest");
    
        // 脚本开始时最小化 CukeTest
        CukeTest.minimize(); 
    
        // ... 此处执行您的自动化测试操作 ...
    
        // 脚本结束后恢复 CukeTest 窗口
        CukeTest.restore();

  2. 激活被测应用窗口:直接调用被测应用主窗口的 activate() 方法,将其置于最顶层,确保脚本可以正确操作。

Q: 如何批量运行多个测试项目?

A: CukeTest 提供了两种主要方式来串联并运行多个项目:

  1. 使用命令行/批处理:您可以编写一个批处理文件(.bat)或 Shell 脚本,在其中按顺序执行每个项目的 cuke run 命令。
  2. 使用批量运行工具:CukeTest 内置了批量运行工具,您可以通过图形界面配置一个项目列表,设定它们的执行顺序,运行后会自动汇总生成一份包含所有项目结果的总报告。

Q: 为什么运行自动化脚本时不能手动操作鼠标?

A: 在桌面自动化测试过程中,测试脚本会精确地模拟用户的鼠标点击、移动、拖拽等行为来与界面交互。如果此时人为地移动或点击鼠标,会干扰脚本预设的操作流程,导致脚本无法定位到正确的控件或执行错误的动作,从而影响测试的准确性和稳定性。

Q: 编写好的测试脚本可以脱离 CukeTest 环境,集成到我们自己的框架中吗?

A: 可以。CukeTest 具有良好的集成性,支持将测试脚本整合到您自己的框架或调试中心。除了通过命令行调用外,CukeTest 的核心自动化库也支持作为标准的 Python 包(.whl 文件)进行安装。您可以将其安装到您自己的 Python 环境中,然后在您的自定义脚本或框架中导入并调用 CukeTest 的自动化能力。

详情请见:在外部 Python 环境中安装 CukeTest 库

Q: CukeTest 和 Selenium, Appium 等工具有什么区别?它属于哪一类测试工具?

A: CukeTest 是一个综合性的自动化测试脚本开发与管理平台。它与 Selenium (Web), Appium (移动端) 等工具不同,后者是专注于特定领域的自动化驱动库。

CukeTest 的特点在于:

  • 内置 BDD/TDD 框架:集成了 Cucumberpytest-bdd 等框架,帮助团队更好地协作和管理测试用例。
  • 一站式平台:提供了从脚本录制、编码、调试、运行到报告生成的完整解决方案。
  • 跨平台跨技术:自身具备对多种应用类型(如桌面、Web、移动端)的自动化能力
  • 可扩展性:能够与 Selenium, Appium 等优秀的开源库结合使用,让您在一个统一的平台中管理所有类型的自动化测试。

Q: 如何报告 Bug 或提交功能建议?

A: 我们欢迎任何形式的反馈!您可以通过以下任一渠道联系我们:

  • QQ 交流群: 加入群 707467292,直接与开发团队和社区用户交流。
  • GitHub Issues: 在我们的 GitHub 问题跟踪页面提交详细的 Bug 报告或功能请求。
  • 官方网站: 访问联系我们页面,填写并提交您的问题。

results matching ""

    No results matching ""