Squish回归测试的核心,是把已经验证过的关键业务流程持续重复执行,并通过稳定的验证条件判断新版本是否引入功能异常。实际使用中,测试结果不稳定往往并不是被测功能本身存在缺陷,而是由对象识别、界面同步、测试数据或运行环境变化引起。处理“Squish怎么执行回归测试,Squish回归测试结果不稳定如何优化”时,需要先保证测试套件本身具有明确的执行范围,再针对偶发失败的位置判断究竟是应用问题还是自动化脚本问题。
一、Squish怎么执行回归测试
Squish可以在IDE中运行单个Test Case,也可以按照Test Suite连续执行多个测试用例。对于固定版本验证、每日构建或发布前检查,更适合以测试套件为单位组织回归任务。Squish 9.2的官方文档仍将Test Suite作为批量执行测试的基本单位。
1、先整理需要参与回归的测试用例
回归测试不应简单地把所有历史脚本全部执行一次,而应先确定当前版本真正需要覆盖的功能。
①在【Test Suites】中打开目标测试套件,检查登录、核心业务操作、数据保存、查询、异常处理等关键流程是否已经包含。
②确认每个Test Case对应的业务功能仍然有效。应用界面或操作流程已经改变的脚本,应先完成维护再进入正式回归。
③进入【Test Suite Settings】检查被测程序配置,确认当前使用的AUT、启动参数、工作目录及运行环境与待测版本一致。
④对关键功能建立固定回归范围,新增功能再逐步补充用例,避免每次测试使用不同的范围。
2、从Squish IDE执行测试套件
需要调试或观察执行过程时,可以直接在IDE中运行。
①选中需要执行的【Test Suite】。
②先确认被测程序能够由Squish正常启动,并处于预期的初始状态。
③点击【Run Test Suite】,Squish会按照测试套件中的用例执行。
④执行结束后打开【Test Results】,查看各测试用例以及验证点的通过、失败和错误信息。
Squish的【Test Results】不仅显示最终结果,点击具体结果还可以定位到产生该记录的脚本位置,并展开查看更详细的信息,因此排查失败时应从具体失败节点开始,而不是只看整个Test Case显示为Fail。
3、批量回归时使用squishrunner
需要接入Jenkins、GitLab CI等自动流程时,可以通过【squishrunner】执行测试套件。
Squish支持使用【--testsuite】批量执行完整测试套件,也可以通过【--testcase】只运行指定用例。运行时需要与squishserver通信,也可以通过【--local】让本次任务使用临时本地Server。
对于持续集成环境,还可以通过【--reportgen】输出JUnit或XML格式结果。其中当前官方文档推荐使用较新的XML 3系列格式,JUnit结果则适合直接接入常见CI测试报告页面。
4、回归完成后先区分失败类型
测试失败后,不要立即判断为软件功能回归,应先查看失败发生在哪个层面。
①如果验证点的实际值与预期值不同,重点检查业务功能和测试数据。
②如果出现对象查找失败,重点检查Object Map以及控件属性是否发生变化。
③如果对象最终能够出现,但脚本提前超时,应检查界面同步和等待逻辑。
④如果测试脚本本身产生异常,则先修复脚本逻辑,再重新判断应用结果。
这样能够把真正的产品回归与自动化测试自身的问题分离开来。
二、Squish回归测试结果不稳定如何优化
同一个Test Case在代码没有变化的情况下反复出现“一次通过、一次失败”,通常属于自动化测试稳定性问题。优化时最重要的是找到失败条件,而不是简单延长整个脚本的执行时间。
1、把固定延时改成状态等待
GUI程序的窗口创建、数据刷新和页面切换耗时并不固定。如果脚本依赖固定等待时间,机器负载稍高就容易失败。
Squish提供【waitForObject】和【waitForObjectExists】等待目标对象达到可访问或存在状态,并允许设置超时时间。相比单纯使用固定延时,这种方式能够根据应用实际状态继续执行。
①窗口打开后,等待关键对象真正出现再继续操作。
②按钮需要后台处理完成后才能使用时,等待其状态满足要求。
③Web测试除了等待对象,还应根据需要确认页面加载状态。
④只有确实无法建立明确状态条件的位置,才考虑保留固定延时。
重点不是把超时时间统一调大,而是让脚本等待“条件成立”。
2、检查Object Map是否依赖动态属性
对象识别不稳定是Squish回归测试偶发失败的重要来源。Squish通过Object Map中的真实名称和属性组合查找AUT中的对象;符号名称则用于测试脚本中引用这些对象。
①在【Object Map】中找到经常失败的对象,查看实际参与匹配的属性。
②删除运行过程中经常变化、又没有识别价值的属性。
③优先保留能够稳定区分对象的类型、固定名称、ID或容器关系。
④对于文字会发生规律性变化的属性,可以根据实际对象特点使用通配或正则匹配,而不是保存完整动态文本。
官方文档也建议新测试优先使用符号名称;当属性本身具有变化特征时,可以通过多属性名称和通配方式提高识别灵活性。
3、消除测试用例之间的状态依赖
单个用例执行正常,但放入完整Test Suite后失败,通常要检查前后用例是否相互影响。
①每个Test Case开始时都建立明确的账号、页面和测试数据状态。
②不要让第二个用例依赖第一个用例创建的数据才能执行。
③测试产生的临时记录、文件和窗口应在适当阶段清理。
④登录、初始化测试数据等重复逻辑,可以整理成【Shared Scripts】,避免不同用例分别维护后产生行为差异。
Squish支持在测试套件中建立共享脚本和共享测试数据,用于复用多个Test Case需要的公共逻辑,这比在各个脚本中复制相同初始化代码更容易保持一致。
4、减少过度严格的验证条件
部分“不稳定”实际上来自验证点设置过细。例如时间戳、随机编号、列表排序以及动态提示文字每次运行都可能变化。
①只比较业务真正要求保持一致的属性。
②动态生成的数据不要直接与固定完整字符串比较。
③列表测试应先确认排序规则,再判断目标数据是否存在。
④界面截图验证出现波动时,要检查字体渲染、分辨率、缩放和窗口尺寸是否一致。
验证点越接近实际业务要求,回归结果越容易解释,也能减少没有实际缺陷的失败。
三、Squish回归测试优化后如何验证稳定性
优化完成后,不能以“重新运行一次已经通过”作为稳定性判断依据。
1、对原有偶发失败用例重复验证
①选择此前经常出现波动的Test Case进行多轮执行。
②记录每次失败的步骤、对象和验证点,观察失败位置是否仍然随机变化。
③如果始终在同一个业务验证点失败,应重新检查被测功能,而不是继续调整脚本。
2、再放回完整测试套件验证
①单独执行稳定后,再运行完整【Test Suite】。
②比较单独执行和整套执行的差异。
③如果只有批量执行才失败,重点检查测试数据、程序状态和用例间依赖。
④保存不同版本的测试结果,用于后续判断失败属于新增问题还是历史波动。
Squish支持通过IDE导出结果,也可以通过命令行生成XML、JUnit或上传到Test Center,从而保留多次测试结果用于后续分析。
总结
Squish回归测试结果是否可信,取决于测试脚本能否在不同运行条件下保持相同的判断逻辑。偶发失败较多时,重点应放在界面同步、对象识别、测试状态隔离以及验证条件是否合理,而不是通过不断增加等待时间掩盖问题。只有把自动化脚本自身的随机性降下来,回归结果才能真正反映版本变化带来的功能影响。如需进一步了解Squish回归测试执行、测试结果不稳定原因分析及稳定性优化方法,欢迎联系咨询。