软件测试52讲
茹炳晟
eBay中国研发中心,测试基础架构技术主管
立即订阅
13425 人已学习
课程目录
已完结 63 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从“小工”到“专家”,我的软件测试修炼之道
免费
测试基础知识篇 (11讲)
01 | 你真的懂测试吗?从“用户登录”测试谈起
02 | 如何设计一个“好的”测试用例?
03 | 什么是单元测试?如何做好单元测试?
04 | 为什么要做自动化测试?什么样的项目适合做自动化测试?
05 | 你知道软件开发各阶段都有哪些自动化测试技术吗?
06 | 你真的懂测试覆盖率吗?
07 | 如何高效填写软件缺陷报告?
08 | 以终为始,如何才能做好测试计划?
09 | 软件测试工程师的核心竞争力是什么?
10 | 软件测试工程师需要掌握的非测试知识有哪些?
11 | 互联网产品的测试策略应该如何设计?
GUI自动化测试篇 (10讲)
12 | 从0到1:你的第一个GUI自动化测试
13 | 效率为王:脚本与数据的解耦 + Page Object模型
14 | 更接近业务的抽象:让自动化测试脚本更好地描述业务
15 | 过不了的坎:聊聊GUI自动化过程中的测试数据
16 | 脑洞大开:GUI测试还能这么玩(Page Code Gen + Data Gen + Headless)?
17 | 精益求精:聊聊提高GUI测试稳定性的关键技术
18 | 眼前一亮:带你玩转GUI自动化的测试报告
19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略
20 | 与时俱进:浅谈移动应用测试方法与思路
21 | 移动测试神器:带你玩转Appium
API自动化测试篇 (3讲)
22 | 从0到1:API测试怎么做?常用API测试工具简介
23 | 知其然知其所以然:聊聊API自动化测试框架的前世今生
24 | 紧跟时代步伐:微服务模式下API测试要怎么做?
代码测试篇 (3讲)
25 | 不破不立:掌握代码级测试的基本理念与方法
26 | 深入浅出之静态测试方法
27 | 深入浅出之动态测试方法
性能测试篇 (7讲)
28 | 带你一起解读不同视角的软件性能与性能指标
29 | 聊聊性能测试的基本方法与应用领域
30 | 工欲善其事必先利其器:后端性能测试工具原理与行业常用工具简介
31 | 工欲善其事必先利其器:前端性能测试工具原理与行业常用工具简介
32 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(上)
33 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(下)
34 | 站在巨人的肩膀:企业级实际性能测试案例与经验分享
测试数据准备篇 (4讲)
35 | 如何准备测试数据?
36 | 浅谈测试数据的痛点
37 | 测试数据的“银弹”- 统一测试数据平台(上)
38 | 测试数据的“银弹”- 统一测试数据平台(下)
测试基础架构篇 (4讲)
39 | 从小作坊到工厂:什么是Selenium Grid?如何搭建Selenium Grid?
40 | 从小工到专家:聊聊测试执行环境的架构设计(上)
41 | 从小工到专家:聊聊测试执行环境的架构设计(下)
42 | 实战:大型全球化电商的测试基础架构设计
测试新技术篇 (5讲)
43 | 发挥人的潜能:探索式测试
44 | 测试先行:测试驱动开发(TDD)
45 | 打蛇打七寸:精准测试
46 | 安全第一:渗透测试
47 | 用机器设计测试用例:基于模型的测试
测试人员的互联网架构核心知识篇 (5讲)
48 | 优秀的测试工程师为什么要懂大型网站的架构设计?
49 | 深入浅出网站高性能架构设计
50 | 深入浅出网站高可用架构设计
51 | 深入浅出网站伸缩性架构设计
52 | 深入浅出网站可扩展性架构设计
特别放送篇 (8讲)
测试专栏特别放送 | 答疑解惑第一期
测试专栏特别放送 | 答疑解惑第二期
测试专栏特别放送 | 答疑解惑第三期
测试专栏特别放送 | 答疑解惑第四期
测试专栏特别放送 | 答疑解惑第五期
测试专栏特别放送 | 答疑解惑第六期
测试专栏特别放送 | 答疑解惑第七期
测试专栏特别放送 | 浅谈全链路压测
测一测 (1讲)
测一测 | 这些软件测试题目,你都掌握了吗?
结束语 (1讲)
结束语 | 不是结束,而是开始
软件测试52讲
登录|注册

17 | 精益求精:聊聊提高GUI测试稳定性的关键技术

茹炳晟 2018-08-06
不知不觉,我已经介绍完了 GUI 测试相关的知识点,你可以先回顾一下这些知识点,是否还有不清楚的地方,也欢迎你给我留言进行讨论。同时,我希望这些知识点,已经帮你搭建了 GUI 自动化测试的知识体系。
那么,今天我将从实际工程应用的角度,和你一起聊聊 GUI 测试的稳定性问题。
如果你所在的公司已经规模化地开展了 GUI 测试,那我相信你们也一定遇到过测试稳定性的问题。GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败。 这也是影响 GUI 测试健康发展的一个重要障碍,严重降低了 GUI 测试的可信性。
所以,今天我分享的主题就是,如何提高 GUI 测试的稳定性。虽然从理论上来讲,GUI 测试有可能做到 100% 稳定,但在实际项目中,这是一个几乎无法达到的目标。根据我的经验,如果能够做到 95% 以上的稳定性,就已经非常不错了。
要提高 GUI 测试稳定性,首先你需要知道到底是什么原因引起的不稳定。你必须找出尽可能多的不稳定因素,然后找到每一类不稳定因素对应的解决方案。
为此,根据我的实践经验,以及所遇到的场景,我为你总结了五种造成 GUI 测试不稳定的因素:
非预计的弹出对话框;
页面控件属性的细微变化;
被测系统的 A/B 测试;
随机的页面延迟造成控件识别失败;
测试数据问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件测试52讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • sylan215
    1. 非预期弹框:
    对于非预期的弹框也可以通过检查置顶窗口是否是预期软件窗口,从而确定是否被第三方弹框影响。
    2. 页面控件变化:
    如果是 selenium 的话,建议优先使用 xpath,这样就算 id、clases、name 等控件属性改变,只有不是页面改版,应该不会影响自动化稳定性。
    3. A/B 测试页面:
    判断当前页面属于哪个分支,然后走兼任处理逻辑,同意这个方案。其实很多地方都可以通过类似的兼容方案进行处理,比如第一个非预期弹框,也可以算是异常场景的兼容处理。
    4. 页面延迟:
    重试机制确实是个好办法,但是如果用例都是因为重试才执行正确,有可能会漏出和缓存相关的问题,因为重试应该算一个独立测试场景了,现在是把它作为主要测试场景了。
    这地方我记得 selenium 有一个函数可以设定一个最大超时时间,在这个时间之前都会等待,一旦超时时间内满足了继续执行的条件,也可以立刻执行,这个方法还是比较不错的,既保证了用例操作的预期性,也解决了延迟的不可控的问题。
    5. 测试数据问题:
    构造自动化数据时要特别注意,构造一些带特殊字段的数据库信息,最好是超出常人操作的数据信息,这样可以有效避免数据被误修改的风险,当然,还有一个处理办法在 15 讲的时候提到过,就是先检查测试数据是否存在/异常,不存在或异常都进行重建即可,这部分也算是测试代码的兼容处理吧。
    以上,欢迎沟通交流,公众号「sylan215」

    作者回复: 非常高质量的留言,已经关注你的公众号了👍

    2018-08-06
    2
    36
  • Cynthia🌸
    页面延迟那个,具体表现应该就是找不到元素吧,那么等一等是不是就可以找到了?
    我记得selenium里面有等待函数,而且还可以用sleep。
    之前做过的项目,最早没有加等待,就经常因为不稳定而报错,加上等待之后这种概率少多了
    2018-08-07
    5
  • 口水窝
    网络不稳定,无线与流量切换,浏览器版本升级等造成GUI测试不稳定。
    2019-04-02
    1
  • 张红占
    能否通过实例讲解 总结的有点high level

    作者回复: 这部分内容的确可以通过实例讲解,但是这样的篇幅会比较大,而且重点也不会太突出,所以选择了总结问题以及对应解决思路的讲解方法。

    2018-08-06
    1
  • 小寒Edwin
    老师好,步骤级别的的不稳定,这块的retry大概是怎么的一个实现思路呢?
    2019-11-15
  • Tron
    Robotframework中的Wait until xxx timeout=30s其实也是用的重试模式
    2019-10-25
  • 小老鼠
    对于非预计的弹出对话框引起的不稳定,可以引入“异常场景恢复模式”来解决。
    问:如何作到随时捕获异常?比如用Java或python

    对于页面控件属性的细微变化造成的不稳定,可以使用“组合属性”定位控件,并且可以通过“模糊匹配技术”提高定位识别率。
    需要二次开发

    对于 A/B 测试带来的不稳定,需要在测试用例脚本中做分支处理,并且需要脚本做到正确识别出不同的分支。
    需要辨别A版本或B版本

    对于随机的页面延迟造成的不稳定,可以引入重试机制,重试可以是步骤级别的,也可以是页面级别的,甚至是业务流程级别的。
    问:如何看待selenium 中的显示等待或隐式等待,但也要有个等待时间限制。

    对于测试数据引起的不稳定,我在这里没有详细展开,留到后续的测试数据准备系列文章中做专门介绍。

    还有一种不稳定是上一个测试用例执行失败,没有把测试环境恢复。
    2018-10-25
  • 彼端宓悦
    关于 webdriver 中的二维码登录测试,有什么可行的解决思路吗?
    2018-10-15
  • KP
    针对控件的定位,模糊匹配是否会影响整个脚本的运行时间和效率?如何抓取显示时间短的控件并做即时响应感觉会更难。
    2018-09-19
  • 人心向善
    稳定性测试真的让人头疼说心惊胆战一点不为过,举个例子:业务需求要求完成7*24小时的稳定性,跑到尾声的时候发现大量报错且准确率已经不足95%的比例,这种时候是最痛苦的,重新跑吧前面的5.6天就白进行了,不重跑吧,不能保证最终的测试结果,而且还有好多非自然因素,断网或断网环境莫名挂掉,这些都会让稳定性测试猝不及防,顺利的话周期会很短,不顺利的话就很难说要取决的因素太多了……
    2018-08-24
  • 涅槃Ls
    打卡17

    作者回复: 感谢支持

    2018-08-08
  • 阳光灿烂的日子
    老师每天都期待讲一个高大上的接口测试框架,或者接口测试框架设计思路。
    2018-08-07
  • 文大头
    我遇到的更多的不稳定,大多是开发对页面做了修改,特别是页面框架的改动,导致元素定位失败。为此,定位元素时尽可能使用元素的相对位置,而不是绝对的xpath路径定位,xpath中也选取相对稳定的元素属性定位,另外xpath本身也支持模糊匹配,我很少需要单独写模糊匹配的代码。
    针对延时问题,除了前面留言说的硬等到超时报错外,可以观察是否有其他元素在正常情况下是跟被测元素一起出现的,如果有,就检测那个元素出现了,被测元素是否也出现,没有就直接报错;检测元素消失也类似。
    2018-08-07
  • hi !girl
    老师,步骤级别、页面级别和业务流程级别的重试机制可以给一个实例吗

    作者回复: 步骤和页面级别的retry是会在测试框架中实现的,往往是在try catch中实现重试,而用例级别的retry会在用例调用级别,也就是发起测试的ci流水线中实现。

    2018-08-06
  • hi !girl
    对于第四点,通常需要延迟的主要是涉及网络请求的页面,能否先给出一个合理的动态时间等待,后选择重试呢
    2018-08-06
  • 图·美克尔
    异常场景恢复模式是将在整个操作过程外加try catch实现的吗?

    作者回复: 最简单的实现的确是通过try catch

    2018-08-06
  • Robert小七
    异常恢复场景是否包含了重试机智?如何解决定位失败后可能产生的无限重试?

    作者回复: 如果启用了异常场景恢复模式,那么通常的流程是先有三次步骤级别重试,如果失败了才会启动异常场景恢复模式。一般不会出现无限重试的场景

    2018-08-06
收起评论
17
返回
顶部