常见问题(FAQ)
Q: CukeTest 的对象识别原理是什么?当应用界面更新或在不同电脑上运行时,脚本的兼容性和维护性如何?
A: CukeTest 构建了一套以 对象识别 为主、视觉识别为辅 的多维自动化识别体系。核心的对象识别技术通过读取控件内部属性来精确定位,以确保脚本的稳定与高效。同时,当遇到标准控件属性无法获取的场景时(例如虚拟化环境、游戏或完全自定义绘制的界面),可以采用 图像识别、OCR文字识别或虚拟控件 等技术作为补充,确保自动化测试的全覆盖。
这种设计带来了以下优势:
识别原理与准确率:CukeTest 内置了对多种技术的支持,包括 Windows、Qt、Java、Linux (ATK) 和 Web 等。它通过直接读取控件的内部属性(如
name
,className
,text
等)来工作。与单纯的视觉识别方案相比,这种方式在准确率和执行性能上都有显著优势。应对界面更新:当被测应用的界面发生改动时,您无需重写整个脚本。CukeTest 将控件定义存储在对象模型(
.tmodel
)中。您只需在模型管理器中找到对应发生变化的控件,单独更新其识别属性 即可让脚本适配新版应用。对于一些动态变化的属性,您可以在识别规则中将其忽略,或使用通配符、正则表达式等灵活的匹配模式来提高识别的容错性。跨环境部署能力:由于核心机制是基于对象而非固定坐标,脚本具备良好的环境可移植性。当您需要在不同分辨率的设备、或将脚本部署到其他机器上运行时,只要被测应用的技术栈和控件核心属性保持一致,脚本通常就可以直接复用。
Q: 每次运行脚本前,都需要手动打开被测软件吗?
A: 不需要。CukeTest 支持通过脚本自动启动和关闭被测应用。在录制操作时,您可以在录制设置中指定被测应用的启动路径,CukeTest 会自动生成用于启动该应用的代码。
Q: 如何在脚本中等待应用完全启动后再执行后续操作?
A: 直接使用固定时长的延时(如 Util.delay()
)可能因环境不同而不稳定。更好的方法是等待应用的关键窗口(例如主窗口)出现。可以结合控件的 exist(seconds)
方法来实现智能等待。
例如,等待“计算器”应用的主窗口在10秒内出现:
// 启动应用进程
await Util.launchProcess('calculator');
// 等待标题为“计算器”的窗口出现,最长等待10秒
if (!await model.getWindow('计算器').exist(10)) {
// 如果10秒后窗口仍未出现,则抛出错误并中止测试
throw new Error('应用 "calculator" 未能成功启动,请检查或延长等待时间。');
}
// ...确认窗口出现后,继续执行其他自动化操作...
Q: 一个测试用例中可以操作多个不同的应用吗?
A: 可以。在一个测试场景(用例)中,您可以与多个应用进行交互。在录制过程中,如果需要操作另一个应用,只需点击录制工具条上的“启动应用”按钮,启动第二个应用并继续录制即可。CukeTest 会将对不同应用的操作录制到同一个脚本中。
Q: 代码能力不强,可以直接用录制的脚本进行测试吗?
A: 完全可以。虽然 CukeTest 推荐使用 BDD(行为驱动开发)模式来获得更好的可读性和维护性,但对于代码能力还在培养中的团队,可以直接利用录制生成的脚本。
这里有两种简便方法:
- 简化 BDD 项目:在一个
feature
文件中只创建一个场景(Scenario)和一个步骤(Step),然后将录制生成的完整脚本代码直接粘贴到这个步骤的实现函数中。这样做既可以立即运行测试并生成报告,也为未来逐步细化和重构测试逻辑提供了空间。 - 使用
pytest
模式:将录制生成的脚本文件和函数名修改为pytest
的规范(即以test_
开头),就可以直接作为pytest
用例来运行。
Q: 如何在不打开 CukeTest 界面的情况下执行自动化测试?
A: 可以使用命令行来执行测试。首先,在命令行终端中导航到您的 CukeTest 项目所在的文件夹路径,然后执行 cuke run
命令即可。这种方式无需打开图形用户界面,便于集成到各类自动化流程中。
更多详细信息,请参阅官方文档:命令行执行
Q: 运行测试时,如何防止 CukeTest 窗口遮挡被测应用?
A: 为了避免 CukeTest 主窗口在运行时覆盖或干扰被测应用,导致脚本找不到控件,您可以使用以下两种方法:
最小化 CukeTest 窗口:在测试脚本的开始和结束时,调用相应的 API 来最小化和恢复 CukeTest 窗口。
JavaScriptconst { CukeTest } = require("cuketest"); // 脚本开始时最小化 CukeTest CukeTest.minimize(); // ... 此处执行您的自动化测试操作 ... // 脚本结束后恢复 CukeTest 窗口 CukeTest.restore();
激活被测应用窗口:直接调用被测应用主窗口的
activate()
方法,将其置于最顶层,确保脚本可以正确操作。
Q: 如何批量运行多个测试项目?
A: CukeTest 提供了两种主要方式来串联并运行多个项目:
- 使用命令行/批处理:您可以编写一个批处理文件(
.bat
)或 Shell 脚本,在其中按顺序执行每个项目的cuke run
命令。 - 使用批量运行工具: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 框架:集成了 Cucumber 和 pytest-bdd 等框架,帮助团队更好地协作和管理测试用例。
- 一站式平台:提供了从脚本录制、编码、调试、运行到报告生成的完整解决方案。
- 跨平台跨技术:自身具备对多种应用类型(如桌面、Web、移动端)的自动化能力。
- 可扩展性:能够与 Selenium, Appium 等优秀的开源库结合使用,让您在一个统一的平台中管理所有类型的自动化测试。
Q: 如何报告 Bug 或提交功能建议?
A: 我们欢迎任何形式的反馈!您可以通过以下任一渠道联系我们:
- QQ 交流群: 加入群
707467292
,直接与开发团队和社区用户交流。 - GitHub Issues: 在我们的 GitHub 问题跟踪页面提交详细的 Bug 报告或功能请求。
- 官方网站: 访问联系我们页面,填写并提交您的问题。