软件测试52讲
茹炳晟
eBay中国研发中心,测试基础架构技术主管
立即订阅
13370 人已学习
课程目录
已完结 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讲
登录|注册

14 | 更接近业务的抽象:让自动化测试脚本更好地描述业务

茹炳晟 2018-07-30
在上一篇文章中,我介绍了 GUI 自动化测试中的两个主要的概念“脚本与数据的解耦 ”以及“ 页面对象模型”。在引入“操作函数”封装时,我提到操作函数在改善测试脚本可读性问题的同时,也引入了两个新的问题,即: 如何把控操作函数的粒度,以及如何衔接两个操作函数之间的页面。
现在,我就以这两个问题作为引子,为你介绍 GUI 自动化测试中“业务流程(business flow)”的概念、核心思想以及应用场景。

如何把控操作函数的粒度?

操作函数的粒度是指,一个操作函数到底应该包含多少操作步骤才是最合适的。
如果粒度太大,就会降低操作函数的可重用性。极端的例子就是,前面文章中涉及的百度搜索的案例,把“登录”“搜索”“登出”的操作作为一个操作函数。
如果粒度太小,也就失去了操作函数封装的意义。极端的例子就是,把每一个步骤都作为一个操作函数。
更糟糕的是,在企业实际自动化测试开发中,每个测试工程师对操作函数的粒度理解也不完全相同,很有可能出现同一个项目中脚本粒度差异过大,以及某些操作函数的可重用性低的问题。
那么,操作函数的粒度到底应该如何控制呢?其实这个问题,在很大程度上取决于项目的实际情况,以及测试用例步骤的设计,并没有一个放之四海而皆准的绝对标准。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件测试52讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(27)

  • Cynthia🌸
    我曾经做过的一个自动化项目,整体代码实现方式与思路和这里介绍的不太一样。
    对业务流程也做了封装,但每一个封装都是以子用例的形式来做的,例如:
    从登录login到a业务到b业务再到c业务算是一条完整的用例
    而另一条用例是login a业务 x业务
    那么就封装一个子用例1为:login-a业务。

    但是没有做到a业务的单独封装。
    比如再来一个用例是:
    login a业务 b业务 y业务

    那么可以使用子用例1完成前面两个步骤,或者重新写一条子用例2:
    login a业务 b业务

    当然这个项目在其他的地方存在优势,所以沿用了一阵子。

    现在打算细细研究一下作者的思路。
    2018-07-30
    7
  • subona
    老师有类似的实现源码供参考吗?伪代码看不懂具体该怎么实现
    2018-10-16
    3
  • Tall Giraffe
    老师,我不太清楚LoginFlowParameters这个业务流程参数类的作用是什么,可以解释一下吗。这处有点看不懂
    2018-09-14
    3
  • 图·美克尔
    代码自动生成会讲到吗?

    作者回复: 代码细节不会讲,只会讲基本的思路。

    2018-08-01
    3
  • ll
    和老师的思路不谋而合,实际项目也用了基于业务流程封装的业务关键字,写测试用例过程非常灵活好用,功能变更只需要修改业务关键字内部结构,不改用例; 数据的实例化对象也超级好用,灵活改变数据,数据内容丰富多样。期待老师的测试数据准备的课程……
    2018-07-31
    2
  • 李真真
    在我自己学自动化测试的过程中,主要有三大疑问:1. 元素的有效定位方法
    2.断言如何做到全面性
    3.POM怎么颗粒化
    这些都没有固定的标准和方法,搞的有点无措。读了本篇,第三个问题就有了很清楚的一种参考方法啦。非常感谢老师!
    2018-07-30
    2
  • 口水窝
    继续打卡,还没做到深入GUI自动化封装的阶段,加油,先学习体系,在操作实践!
    2019-03-28
    1
  • sylan215
    1.上一篇我提到的 selenium 实现的 4 层实现,恰好和老师说的「业务流程」的层次性和逐层抽象的理念相吻合,看来从实际业务场景触发得出的结论是大同小异的;

    2.如果按「业务流程」的概念来解释我之前说的把登陆和退出操作实现在了第二层的函数层就很好理解了,因为登陆和退出操作不是完全固定的具有公共属性的原子操作,所以不能放到原子层,而登陆和实现又没有必要做成通用函数,所以按业务流程来说,也可以不放在函数实现层;

    3.总之,业务流程的理念对于颗粒度划分的解读就是「实用的就是最好的」。

    以上,欢迎关注公众号「sylan215」一起沟通交流。
    2019-02-13
    1
  • Allen
    公司的业务流程比较复杂,需要在接口层覆盖业务流程的自动化测试。最近正在设计接口自动化的测试方案,看了这篇文章,很有启发。

    作者回复: 能有收获就好,其实我后面还会介绍更好的办法,就是通过gui来捕捉后端的api调用列表,后面的文章会有具体例子,希望可以帮到你

    2018-07-31
    1
  • 图·美克尔
    然后,对于每一个业务流程类,都会有相应的业务流程输入参数类与之一一对应。具体的步骤通常有这么几步:

    初始化一个业务流程输入参数类的实例;

    给这个实例赋值;

    用这个输入参数实例来初始化业务流程类的实例;

    执行这个业务流程实例。
    为啥不把这几步再封装一次作为一个业务步骤呢?比如就可以直接:login(username,passed)->search(name)->checkout(id)->logout.
    也便于自由组合成其他的业务流程。比如:login->view order->logout

    作者回复: 非常高质量的留言,你说的方法非常好,而且我们也曾经实际尝试了,和你说的完全一样的思路,但是最终我们放弃了,主要原因是技术上的实现难度有点大,我们需要知道哪些flow是可以衔接的,并且还要做到ide中可以自动提示,同时flow之间的测试数据传递写出来也会比较难看,还有就是两个flow之间在实际用例中经常需要插入很多额外的操作,而且由于我们后面基于BDD做了代码自动生成,所以我们没有采用全链的方式。

    2018-07-30
    1
  • LIKE
    如果你的dao层用的mybatis,对这个参数实体就能很好理解了。
    老师关于业务流当中的输出参数,能做进一步讲解吗?谢谢
    2019-11-21
  • johnny
    经过反复阅读该篇文章和后面的测试数据准备篇。
    对于GUI自动化脚本封装方式可以概括为如下:
    GUI自动化脚本涉及到了三次封装
    1.引入页面对象进行第一次封装
    2.引入操作函数进行第二次封装
    3.引入业务流程进行第三次封装
    在具体实现方面,基于业务流程进行的第三次封装会涉及到和测试数据准备篇用到相似的技术-java的建造者设计模式。
    茹老师,我的理解正确吗?期待老师的回答
    2019-08-07
  • Geek_7d396d
    按照13章给的抽象模式:“XXXPage.YYYComponent.ZZZOpera... , 这里的YYYComponent 是指啥呢?

    2019-05-14
  • 后乐
    总结的很到位,很喜欢这种授人以渔的课程!学到了不少,得好好实践下~

    作者回复: 感谢支持,我一直反对直接教工具的使用,只有理解了背后的原理,才能做的更好

    2019-05-09
  • johnny
    第13节的内容能理解,我已经将伪代码实现了。但是这节的内容不好理解,老师可以给我发一个完整的示例吗(不是用伪代码描述的,是真正用java语言实现的代码示例)?简单的业务流程,只要能说明第14节内容就行。我的邮箱是cjnjk@163.com

    作者回复: 实际代码可能没法发,因为不来源,实在不好意思

    2018-11-19
  • 小老鼠
    如果某个用户场景别的测试用例肯定用不上,是否也需要封装,主要目的是便于阅读?
    2018-10-24
    1
  • 晶晶
    其实我觉得测试人员还是应该掌握面相对象设计思想才能更好的写出自动化测试工具,基础不打好,只能知其然而不能知其所以然。
    2018-09-27
  • 江鸟川
    做人用RF做界面自动化吗?感觉还是只是会个皮毛
    2018-09-17
  • Kuzaman
    精彩的文章,理清了思路,准备通用到接口测试中,把前一个响应的参数对全部抽取出来,做类似Java 里的get方法,方便下一个接口使用。期待与老师9月2号的见面。
    2018-08-14
  • Sunshine
    感谢老师讲解,现在脑子有了一个更清晰的思路

    作者回复: 能够有收获就是最好的

    2018-08-03
收起评论
27
返回
顶部