自动化测试总结(二)

简介: 关联上文:自动化测试总结(一)其他参考文档见文末GUI测试的稳定性问题关于这个问题,最典型的情景就是:同样的测试用例,在同样的测试执行环境下,测试的结果有时是Success,有时是Fail,这严重降低了GUI测试的可信性,同时也是GUI层面的自动化测试位于金字塔最顶端的原因之一。

关联上文:自动化测试总结(一)
其他参考文档见文末

GUI测试的稳定性问题

关于这个问题,最典型的情景就是:同样的测试用例,在同样的测试执行环境下,测试的结果有时是Success,有时是Fail,这严重降低了GUI测试的可信性,同时也是GUI层面的自动化测试位于金字塔最顶端的原因之一。

在实际的项目过程中,GUI测试几乎不可能做到100%稳定,根据我的经验,如果能够做到 90% 以上的稳定性,就已经非常不错了,这需要整个产品技术团队的共同努力才有希望达成。

要提高 GUI 测试稳定性,首先我们需要知道到底是什么原因引起的不稳定。我们必须找出尽可能多的不稳定因素,然后找到每一类不稳定因素对应的解决方案。我列举了几种常见的造成GUI测试不稳定的因素,如下:

  • 非预计的弹出弹出对话框
    在用例执行过程中,操作系统或被测系统可能会突然弹出预期范围之外的对话框,GUI自动化测试有可能就会因此而失败。

解决方案:异常场景恢复模式?无界面GUI自动化测试?

  • 页面控件属性的细微变化
    如果页面控件的属性发生了变化,哪怕只是细微的变化,也必定会导致测试脚本的元素定位失败。这可以说是GUI自动化测试最大的痛点。
    目前,一些商用 GUI 自动化测试工具,比如 UFT(原QTP),已经集成了模糊匹配的功能。通常情况下,只需要启用“模糊匹配”选项即可。如果某个对象的定位是通过模糊匹配完成的,那么,测试报告中将会显示该信息,明确告知此次对象识别是基于模糊匹配完成的,因为 GUI 自动化工具并不能保证每次模糊匹配都一定正确。

解决方案:元素定位采用模糊匹配技术?

  • 随机的页面延迟造成控件识别失败
    随机的页面延迟,也是 GUI 测试防不胜防的。既然是随机的,也就是说我们没有办法去控制它,解决办法是加入重试(retry)机制。重试机制是指,当某一步 GUI操作失败时,框架会自动发起重试。对于Robot Framework+SeleniumLirary,可以使用有wait until系列的关键字(智能等待),尽量少的使用sleep。
Wait For Condition
Wait Until Element Contains
Wait Until Element Does Not Contain
Wait Until Element Is Enabled
Wait Until Element Is Not Visible
Wait Until Element Is Visible
Wait Until Page Contains
Wait Until Page Contains Element
Wait Until Page Does Not Contain
Wait Until Page Does Not Contain Element

解决方案:重试机制retry

  • 测试数据问题
    测试数据问题,也是造成 GUI 自动化测试不稳定的一个重要原因。比如,测试用例所依赖的数据被其他用例修改了。要解决此类的问题,就要回归到第一篇中所谈到的内容,必须要保证用例之间的独立性和尽量减少对执行环境的依赖。Robot框架本身不会规定Case执行的顺序,所以从某种程度上来说同一层级的Cases是随机执行的。很典型的情况就是,测试用例在本地调试时怎么跑怎么过,放到Server上所有Cases一起跑的时候就会Fail,还可能是偶发的,这种情况下就很可能是由于其他Case的痕迹影响到了它,查找问题的根源往往比较耗时。

解决方案:保证用例之间的独立性和尽量减少对执行环境的依赖

界面自动化测试,它最接近用户真实场景,也容易发现问题,但它的实现成本最高且太容易受外部依赖,容易影响脚本成功率。总体来说,适当的界面自动化测试是有必要的,但是真的没有必要在UI层投入太多精力。
【To be continued...】

参考文档

  1. 《软件测试52讲》,极客时间 2018-08-06 茹炳晟
相关文章
|
1月前
|
Web App开发 Java 测试技术
反了!居然让我教她自动化测试!
反了!居然让我教她自动化测试!
33 1
|
安全 测试技术 数据库
测试流程规范--准入准出规则
为了加强测试部软件测试的质量控制及与测试相关部门、人员更好理解测试各阶段的准入/准出条件而建立的准入/准出规范。
1863 0
测试流程规范--准入准出规则
聊聊自动化测试的度量指标
在聊自动化测试度量指标前,有必要回到做自动化的初衷上,就是为什么要做自动化测试,要解决什么问题。
|
小程序 前端开发 Unix
微信小程序 | 实现活动报名登记
微信小程序 | 实现活动报名登记
378 0
微信小程序 | 实现活动报名登记
|
10月前
|
监控 Linux
Linux系统之温度监控工具——lm_sensors的安装和基本使用
Linux系统之温度监控工具——lm_sensors的安装和基本使用
973 1
|
消息中间件 Kubernetes jenkins
说实话,Jenkins 真得很牛逼!只是大部分人不会用而已~(保姆级教程)(下)
说实话,Jenkins 真得很牛逼!只是大部分人不会用而已~(保姆级教程)(下)
|
存储 数据管理 Devops
自动化测试如何管理测试数据
近几年随着技术不断发展,新的工具、方法论和技术实践越来越多,自动化测试在具体工作中有了很多方法论和实践,这些实践的背后是什么原因在推动技术的发展,我觉得是个很值得复盘和回溯的事情。
自动化测试如何管理测试数据
|
Web App开发 网络协议 网络安全
启用ECH的配置
开启 Encrypted Client Hello (Secure SNI)
4085 0
|
机器学习/深度学习 算法 Devops
浅谈自动化测试的价值和常见误区
浅谈自动化测试的价值和常见误区
527 0
浅谈自动化测试的价值和常见误区
|
敏捷开发 存储 数据采集
一文搞懂测试左移和测试右移的 Why-How-What
![](https://ceshiren.com/uploads/default/original/3X/f/d/fdb234546dd6939eb69cef72255fc9d4b580bfe6.jpeg) 软件测试技术应当贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其核心目标是尽快尽早地发现软件产品中所存在的各种问题 bug—— 与用户需求、预先定义的不一致